這裏沒有必要創建一個嵌套的過程。你可以在一個過程中做所有事情。
注意我在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