Oracle存储过程使用动态SQL 有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。
DDL和DML (注意DDL中可以用拼接字符串的方法用来create table或drop table,在DML中,类似于insert则不可以直接用execute immediate中直接拼接的方法,必须用using传递参数)
/*** DDL ***/
create or replace procedure CREATE_TABLE(CREATE_SQL VARCHAR2) is
begin
EXECUTE IMMEDIATE CREATE_SQL; -- 'create table temp_table(table_name varchar2(50))'
end CREATE_TABLE;
/*** DML ***/
declare
v_1 varchar2(8);
v_2 varchar2(10);
str varchar2(50);
begin
v_1:='测试'; --这里的v_1,v_2可以是直接存储过程中传过来的参数
v_2:='北京';
str := 'INSERT INTO test (name ,address) VALUES (:1, :2)';
EXECUTE IMMEDIATE str USING v_1, v_2;
commit;
end;
转载请注明:IT运维空间 » 运维工具 » oracle 存储过程使用动态sql
发表评论