0

callable ステートメントを使用して JDBC を介してネストされたプロシージャを呼び出す方法を教えてください。実行時に作成されるテーブルに (1 つの文字列と 1 つの整数) を格納したいと考えています。

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;
4

1 に答える 1

0

作業デモ:

SQL> 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;
/  

Procedure created.

SQL> select table_name from user_tables
where table_name = 'PTABLE';   

no rows selected

Java プログラム

    Connection con;
    OracleDataSource ods = new OracleDataSource();
    ods.setURL("jdbc:oracle:thin:c##test/test@192.168.1.200:1521:orcl");
    con=ods.getConnection(); 
    CallableStatement cs =con.prepareCall("begin mytable( ?, ?, ? ); end;");
    cs.setString(1, "ptable");
    cs.setString(2, "pname");
    cs.setInt(3, 1);
    cs.executeUpdate();
    cs.close();
    con.close();

と結果:

SQL> select table_name from user_tables
where table_name = 'PTABLE';   

TABLE_NAME
-------------
PTABLE

SQL> insert into ptable values( 'a', 22 );

1 row created.
SQL> select * from ptable;

SNAME                SAGE
-------------------- ----------
a                    22
pname                 1
于 2013-07-25T22:59:38.740 に答える