使用DBMS_SQL包实现动态SQL的步骤如下:A、先将要执行的SQL语句或一个语句块放到一个字符串变量中。B、使用DBMS_SQL包的parse过程来分析该字符串。C、使用DBMS_SQL包的bind_variable过程来绑定变量。D、使用DBMS_SQL包的execute函数来执行语句。
1 创建过程
create or replace procedure p_dbms_sql(table_name in varchar2, --表名
field_name1 in varchar2, --字段名
datatype1 in varchar2, --字段类型
field_name2 in varchar2, --字段名
datatype2 in varchar2 --字段类型
) as
v_cursor number; --定义光标
v_string varchar2(200); --定义字符串变量
v_row number; --行数
begin
v_cursor := dbms_sql.open_cursor; --为处理打开光标
v_string := 'create table ' || table_name || '(' || field_name1 || ' ' ||
datatype1 || ',' || field_name2 || ' ' || datatype2 || ')';
dbms_sql.parse(v_cursor, v_string, dbms_sql.native); --分析语句
v_row := dbms_sql.execute(v_cursor); --执行语句
dbms_sql.close_cursor(v_cursor); --关闭光标
exception
when others then
dbms_sql.close_cursor(v_cursor); --关闭光标
raise;
end;
2 执行过程
SQL> execute p_dbms_sql('dinya_test2','id','number(8) not null','name','varchar2(100)');
PL/SQL procedure successfully completed
SQL> desc dinya_test2
Name Type Nullable Default Comments
---- ------------- -------- ------- --------
ID NUMBER(8)
NAME VARCHAR2(100) Y
SQL>