当前位置:首页 » 编程语言 » oracle存储过程中的sql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

oracle存储过程中的sql

发布时间: 2022-07-03 13:38:38

1. 如何在oracle存储过程中执行动态sql语句

时需要在oracle 存储过程中执行动态SQL 语句 ,例如表名是动态的,或字段是动态的,
或查询命令是动态的,可用下面的方法:
set serveroutput ondeclaren number;sql_stmt varchar2(50);
t varchar2(20);beginexecute immediate 'alter session set nls_date_format=''YYYYMMDD''';
t := 't_' || sysdate;
sql_stmt := 'select count(*) from ' || t;
execute immediate sql_stmt into n;
dbms_output.put_line('The number of rows of ' || t || ' is ' || n);end;
如果动态SQL 语句 很长很复杂,则可用包装.
CREATE OR REPLACE PACKAGE test_pkgISTYPE cur_typ IS REF CURSOR;
PROCEDURE test_proc (v_table VARCHAR2,t_cur OUT cur_typ);END;/
CREATE OR REPLACE PACKAGE BODY test_pkgISPROCEDURE test_proc (v_table VARCHAR2,t_cur OUT cur_typ)ISsqlstr VARCHAR2(2000);BEGINsqlstr := 'SELECT * FROM '||v_table;
OPEN t_cur FOR sqlstr;END;END;/
在oracle 中批量导入,导出和删除表名以某些字符开头的表
spool c:\a.sql

2. 关于oracle存储过程中的sql拼接,大神进!!!

procere proc_test(
in_id in varchar2,
out_sum out varchar2
) as
begin
execute immediate 'select count(*) from table_name '||in_id into out_sum;
end;
/
sqlplus里调用时:
var out_sum varchar2(10)
exec package_name.proc_test('where id=''XXX'' or 1=1',:out_sum)
print out_sum

3. oracle存储过程中如何执行动态SQL语句

有时需要在oracle
存储过程
中执行动态SQL
语句
,例如表名是动态的,或字段是动态的,或查询命令是动态的,可用下面的方法:
set
serveroutput
on
declare
n
number;
sql_stmt
varchar2(50);
t
varchar2(20);
begin
execute
immediate
'alter
session
set
nls_date_format=''YYYYMMDD''';
t
:=
't_'
||
sysdate;
sql_stmt
:=
'select
count(*)
from
'
||
t;
execute
immediate
sql_stmt
into
n;
dbms_output.put_line('The
number
of
rows
of
'
||
t
||
'
is
'
||
n);
end;
如果动态SQL
语句
很长很复杂,则可用包装.
CREATE
OR
REPLACE
PACKAGE
test_pkg
IS
TYPE
cur_typ
IS
REF
CURSOR;
PROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ);
END;
/
CREATE
OR
REPLACE
PACKAGE
BODY
test_pkg
IS
PROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ)
IS
sqlstr
VARCHAR2(2000);
BEGIN
sqlstr
:=
'SELECT
*
FROM
'||v_table;
OPEN
t_cur
FOR
sqlstr;
END;
END;
/
在oracle
中批量导入,导出和删除表名以某些字符开头的表
spool
c:\a.sql
select
'drop
table
'
||
tname
||
';'
from
tab
where
tname
like
'T%';
spool
off
@c:\a

4. oracle存储过程怎么判断一条sql语句是否成功

oracle存储过程判断一条sql语句是否成功的方法是增加exception处理,如果没有抛出exception,那就证明正常执行了。

在Oracle中,异常分为以下两类:

Oracle预定义异常

用户自定义异常

在Oracle中预定义的异常如下表所示:

在Oracle中有以下三种方式触发异常:

  • 由Oracle自动触发异常

  • 使用RAISE语句手工触发

  • 调用存储过程RAISE_APPLICATION_ERROR手工触发

代码将演示Oracle自动触发异常:

-- Created on 2015-7-14 by JellyThink
declare
iA NUMBER(2) := 10;
begin
iA := iA / 0; -- Oracle自动触发异常
dbms_output.put_line(iA);
exception
when ZERO_DIVIDE then
dbms_output.put_line('Error Code:' || SQLCODE || ' ' || SQLERRM);
when others then
dbms_output.put_line('Others Exception');
end;

5. oracle存储过程中 sql写法

表结构一样的话record,
到时候就是
delete t where name= ‘区一’;
delete t where name= ‘区二’;
insert into t values(record1.猫数+record2.猫数。。。。。。。。。。。。。。。。。。。。。)即可

6. oracle 存储过程中动态sql语句

v_sql :=' update aj set recount=(select num_rows from dba_tables where table_name = ' || v_tablename || ') where tablename=' || v_tablename

7. SQL命令查询Oracle存储过程信息

oracle数据库中,已建立好的存储过程信息存储在系统表ALL_SOURCE 中,需要用sysdba身份登录数据库,进行查询操作,SQL命令如下:

SELECTline,textFROMALL_SOURCE
WHERETYPE='PROCEDURE'
ANDNAME='过程名称'
ANDOWNER='用户名'
ORDERBYline;

存储过程分成多行,每一行会存储为一条数据,所以,查询出来的会是多行,line表示行号。


ALL_SOURCE 表中还存储了以下类型信息:

SQL>selectdistincttypefromall_source;
TYPE
------------
TYPE(对象)类型
TYPEBODY类型体
PROCEDURE存储过程
FUNCTION函数
TRIGGER触发器
PACKAGE包
PACKAGEBODY包体

8. 如何使用oracle存储过程执行外部的sql脚本文件

你把脚本内容直接在存储过程中实现,然后利用job去定时调度就好了。