但是 DDL 语句及系统控制语句却不能在 PL/SQL 中直接使用,要想实现在PL/SQL 中使用 DDL 语句及系统控制语句,可以通过使用动态 SQL 来实现。首先我们应该了解什么是动态 SQL,在 Oracle 数据库开发 PL/SQL 块中我们使用的 SQL 分为:静态 SQL语句和动态 SQL 语句。所谓静态 SQL 指在 PL/SQL 块中使用的 SQL 语句在编译时是明确的,执行的是确定对象。而动态 SQL 是指在 PL/SQL 块编译时 SQL 语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语 句、对语句进行语法分析并执行该语句。Oracle 中动态 SQL 可以通过本地动态 SQL 来执行,也可以通过 DBMS_SQL 包 来执行。下面就这两种情况分别进行说明:一、本地动态 SQL本地动态 SQL 是使用 EXECUTE IMMEDIATE 语句来实现的。1、本地动态 SQL 执行 DDL 语句:需求:根据用户输入的表名及字段名等参数动态建表。create or replace procedure proc_test(table_ name in varchar2 表名field1 in varchar 字段名datatype] in varchar2 字段类型field2 in varchar 字段名datatype2 in varchar2 字-段 类型asstr_sql varchar2 (5;begi nstr_sql:= createtable' ||table_name|' ( ||field¥||' ||datatype1'| , ' ||fieldZ||' ||dataexecute immediate str_sql 动态执行 DDL 语句excepti onwhen others the nnull;end ;以上是编译通过的存储过程代码。下面执行存储过程动态建表。SQ L> execute proc_test( dinya_test' , ' id' , ' number(8 notnull' , ' name , ' varchar2(1 ';PL/SQL procedure successfully completedSQL> desc diny a_test;Name Type Nullable Default Comme ntsID NUMBER(8NAME VARCHAR2(1 YSQL>至 U 这里,就实现了我们的需求,使用本地动态 SQL 根据用户输入的表名及字段名、字段类型等参数来实现动态执行 DDL 语句。2、本地动态 SQL 执行 DML 语句。需求:将用户输入的值插入到上例中建好的 diny a_tes 表中。create or replace procedure proc_i nsert(id in nu mber,输入序号n ame in varchar2 输入姓名asstr_sql varchar2 (5;begi nstr_sql:= ' insert into dinya_test values(:1,:2execute immediate str_sql using id,nan 动...