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怎么写
用 execute immediate mSql;来执行,也就是Oracle的动态 sql 语句
3. oracle 存储过程中动态sql语句
v_sql :=' update aj set recount=(select num_rows from dba_tables where table_name = ' || v_tablename || ') where tablename=' || v_tablename
4. 如何在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;
procere
test_proc
(v_table
varchar2,t_cur
out
cur_typ);
end;
/
create
or
replace
package
body
test_pkg
is
procere
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
5. Oracle存储过程 动态sql报错
execute immediate 'select count(1), count(distinct send_userid) ' ||
'from (select distinct query_key, send_userid ' ||
' from ' || t_name ||
' t where send_time >= trunc( ' || v_date ||
' ) + ( ' || i || ' - 1) / 48 ' ||
' and send_time < trunc(:1) + ' || i ||
' / 48) r '
into SEND_LETTERS1, SEND_UIDS1
using v_date;
into要放在外面,参数也要在外面
6. oracle sql怎么创建存储过程
import java.sql. * ;
public class ProcereNoArgs
{
public static void main(String args[]) throws Exception
{
// 加载Oracle驱动
DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver());
// 获得Oracle数据库连接
Connection conn = DriverManager.getConnection( " jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd " );
// 创建存储过程的对象
CallableStatement c = conn.divpareCall( " {call pro1(?)} " );
// 给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188
c.setInt( 1 , 188 );
// 执行Oracle存储过程
c.execute();
conn.close();
}
}
7. oracle 存储过程 动态sql语句
procere bulupdate语法上的错误
参数定义时的数据类型不能指定长度,varchar2(200)改为varchar2
sqlstring里那个加号去掉
open cursor 时,cursor名应该是定义的过程参数cur
8. Oracle创建包含动态sql的存储过程
只能使用动态游标了。
给你个简单例子:
declare
num#number;
recsys_refcursor;
begin
openrecfor'selectcount(*)fromempwhereempno=7788';
fetchrecintonum#;
closerec;
dbms_output.put_line(num#);
end;
/
9. 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
10. oracle存储过程中如何执行动态SQL语句 详细�0�3
有时需要在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