oracleストレージ・プロシージャでは、戻り値のある別のストレージ・プロシージャを簡単に呼び出す
まず、テストテーブルを作成します.
呼び出されたストアド・プロシージャを作成します.
呼び出されたストアド・プロシージャを呼び出すストアド・プロシージャを作成します.
作成後、コマンドウィンドウ:call wwt_test1();実行後、表wwt_table_testには記録があります.
Javaクラスで呼び出すこともできます.たとえば、次のようにします.
create table WWT_TABLE_TEST
(
NAME VARCHAR2(2000),
AGE NUMBER,
SEX VARCHAR2(20),
BIRTHDAY DATE
)
呼び出されたストアド・プロシージャを作成します.
create or replace procedure wwt_test2(inchar in varchar2,outchar out varchar2) is
begin
outchar:=inchar||'hello procedure';
end;
呼び出されたストアド・プロシージャを呼び出すストアド・プロシージャを作成します.
create or replace procedure wwt_test1 is
myString varchar(1000);
tempString varchar(1000);
sqlText varchar(1000);
record_number number;
logId NUMBER;-- log_pro id
begin
--select cooper.SEQ_LOG_PRO.NEXTVAL into logId from dual;
begin
tempString:='already';
wwt_test2('wwt',tempString);
myString:=tempString;
sqlText:='insert into wwt_table_test values('''||myString||''')';
dbms_output.put_line('==>'||sqlText);
execute immediate 'insert into wwt_table_test(name) values('''||myString||''')';
execute immediate 'update wwt_table_test set name = name||''hello''';
commit;
end;
-- ,
select count(*) into record_number from
tbl_importdata_log t where t.STATE=1 and t.begintime like to_char(sysdate-2,'yyyy-mm-dd')||'%';
Dbms_Output.put_line('==>'||record_number);
if record_number<67 then
update wwt_table_test set name =' ',age=23;
end if;
if record_number = 67 then
update wwt_table_test set name =' ',age=24,birthday=sysdate;
end if;
commit;
end;
作成後、コマンドウィンドウ:call wwt_test1();実行後、表wwt_table_testには記録があります.
Javaクラスで呼び出すこともできます.たとえば、次のようにします.
package procudure;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ProcedureTest {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:JULY", "scott","snaillocke");
CallableStatement cs = conn.prepareCall("{call wwt_test1()}");
/*
*
*/
//cs.setString(1, "SCOTT");
//cs.setDouble(2, 666.66);// :call.registerOutParameter(2, java.sql.Types.VARCHAR);call.execute();
//String testPrint = call.getString(2);
cs.execute();
cs.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}