这里没有必要创建一个嵌套的过程。你可以在一个过程中做所有事情。
注意我在execute immediate
statement
create or replace procedure mytable (
Ptable_name in varchar2
, Pemp_name in varchar2
, Pemp_age in number
) is
begin
execute immediate 'create table ' || Ptable_name
|| ' (sname varchar2(20), sage number (4))';
execute immediate 'insert into ' || Ptable_name
|| ' values (:emp_name, :emp_age)'
using Pemp_name, Pemp_age;
end;
使用绑定变量的更普遍,没有必要使用execute immediate
可言;动态创建表格表示设计不良的数据库。如果可能的话不要这样做;提前创建表,并有一个简单的程序中插入数据,如果你需要它:
create or replace procedure mytable (
, Pemp_name in varchar2
, Pemp_age in number
) is
begin
insert into my_table
values (Pemp_name, Pemp_age);
end;
我会强烈建议阅读Guarding Against SQL Injection Oracle的篇章。
如果你真的觉得你有做到这一点作为一个嵌套的过程就应该是这样的;不要忘记调用主程序中的嵌套过程,因为嵌套过程在第一个范围之外是不可见的。
create or replace procedure mytable (
Ptable_name in varchar2
, Pemp_name in varchar2
, Pemp_age in number
) is
procedure myvalues (
Pemp_name in varchar2
, Pemp_age in number
) is
begin
execute immediate 'insert into ' || Ptable_name
|| ' values (:emp_name, :emp_age)'
using Pemp_name, Pemp_age;
end;
begin
execute immediate 'create table ' || Ptable_name
|| ' (sname varchar2(20), sage number (4))';
myvalues (Pemp_name, Pemp_age);
end;
请参阅PL/SQL subprograms
来源
2013-07-23 07:19:39
Ben
甲骨文的文档可你也告诉我如何同时呼吁从JDBC代码上面的程序输入值。 \t public String name; public String username public Integer age; \t公共字符串执行() \t \t {\t \t \t \t 连接CON; \t Statement stmt; \t ResultSet rs; \t Class.forName(“oracle.jdbc.driver.OracleDriver”); (“jdbc:oracle:thin:@localhost:1521:XE”,“Gaurav”,“oracle”); stmt = con.createStatement(); CallableStatement cs = con.prepareCall(begin mytable(....); end;); } – user2549572
我很抱歉,自从我使用JDBC以来,我已经有一段时间了,现在我没有什么可以测试它的了......但有关于解析[so]语句中参数的其他问题。 – Ben