oracle执行一个动态的SQL如何执行
执行个动态的SQL如何执行,executeimmediateSqldt;我是在函数里怎么执行的,在编译函数没有报错,可是在运行的时候,他提示我缺少关键字,我的execut...
执行个动态的SQL如何执行, execute immediate Sqldt;我是在函数里怎么执行的,在编译函数没有报错,可是在运行的时候,他提示我缺少关键字,我的 execute immediate Sqldt;个语法有错误吗。错误在那请提出,谢谢。
展开
3个回答
2013-08-27
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-27
展开全部
declare sql_stmt varchar2(200);//用来存放SQL语句 emp_id number(4):=7566; //emp是Oracle中scott用户中的一个表 存放这个表中的一个id emp_rec emp%ROWTYPE //你查信息的时候可能不知道是什么数据类型 %ROWTYPE 提供表示表中一行 的记录类型;begin execute immediate 'create table bonus(id number,amt number)'; sql_stmt:='select * from emp where empno=:id';// id为一个变量,代表传入的是using后面变量里面的值 execute immediate sql_stmt into emp_rec using emp_id;//execute immediate 代表执行end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-27
展开全部
动态SQL是吗?没看到具体代码,也没法看出什么.试试DBMS_SQL
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询