在使用PeopleCode調用存儲過程之前,我們首先需要確認SYSADM有這個存儲過程的執行權限,並且這個存儲過程的同義詞存在,如果不存在建議對這個存儲過程創建一個PUBLIC的公共同義詞,以方便調用,如下爲PKG的代碼示例
CREATE OR REPLACE PACKAGE PT_PRC_TEST AS
PROCEDURE PRC1(
IN1 IN VARCHAR2,
INOUT1 IN OUT VARCHAR2);
END PT_PRC_TEST;
/
CREATE OR REPLACE PACKAGE BODY PT_PRC_TEST AS
PROCEDURE PRC1(
IN1 IN VARCHAR2,
INOUT1 IN OUT VARCHAR2) IS
BEGIN
INOUT1 := 'Hello World';
END P;
END PT_PRC_TEST;
/
CREATE PUBLIC SYNONYM PT_PRC_TEST FOR XXXXX.PT_PRC_TEST;
GRANT EXECUTE ON PT_PRC_TEST TO SYSADM;
如下代碼展示了使用IScript 來調用數據庫存儲過程
Function IScript_OraclePrc()
Local JavaObject &driver = CreateJavaObject("oracle.jdbc.OracleDriver");;
Local JavaObject &info = CreateJavaObject("java.util.Properties");
&info.put("UserName", "dbuser");
&info.put("password", "secret");
Local JavaObject &conn = &driver.connect("jdbc:oracle:thin:@server:1521:SID", &info);
Local JavaObject &stmt = &conn.prepareCall("{call PT_PRC_TEST.PRC1 (?,?)}");
Local JavaObject &types = GetJavaClass("java.sql.Types");
&stmt.setString(1, "aa");
&stmt.setString(2, "bb");
&stmt.registerOutParameter(2, &types.VARCHAR);
&stmt.execute();
%Response.SetContentType("text/plain");
%Response.WriteLine("PT_PRC_TEST.PRC1 output: " | &stmt.getString(2));
&conn.close();
End-Function;