3、MS_SQL包来执行。下面就这两种情况分别进行说明: 一、本地动态SQL 本地动态SQL是使用EXECUTEIMMEDIATE语句来实现的。 1、本地动态SQL执行DDL语句: 需求:根据用户输入的表名及字段名等参数动态建表。create or replace procedure proc_test( table_name in varchar2, --表名 field1 in varchar2, --字段名 datatype1 in varchar2, --字段类型 field2 in varchar2, --字段名
4、 datatype2 in varchar2 --字段类型) as str_sql varchar2(500);begin str_sql:=’createtable’
5、
6、table_name
7、
8、’(’
9、
10、field1
11、
12、’’
13、
14、datatype1
15、
16、’,’
17、
18、field2
19、
20、’’
21、
22、datatype2
23、
24、’)’; execute immediate str_sql; --动态执行DDL语句 exception when others then null;end ; 以上是编译通过的存储过程代码。下面执行存
25、储过程动态建表。 SQL> execute proc_test(’dinya_test’,’id’,’number(8)notnull’,’name’,’varchar2(100)’);PL/SQL procedure successfullycompletedSQL> desc dinya_test;Name Type Nullable Default Comments ---------------------------------------- ID NUMBER(8)NAME VARCHAR2(100)YSQL> 到这里,就实现了我们的需求,使用本地动态S
26、QL根据用户输入的表名及字段名、字段类型等参数来实现动态执行DDL语句。 2、本地动态SQL执行DML语句。 需求:将用户输入的值插入到上例中建好的dinya_test表中。create or replace procedure proc_insert( id in number, --输入序号 name in varchar2 --输入姓名) as str_sql varchar2(500);begin str_sql:=’insertint
27、odinya_testvalues(:1,:2)’; execute immediate str_sql using id,name;--动态执行插入操作 exception when others then null;end ; 执行存储过程,插入数据到测试表中。 SQL> execute proc_insert(1,’dinya’);PL/SQL procedur