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;
轉自:https://www.cnblogs.com/zmlctt/p/3750198.html
