Using JDBC to Execute Stored Procedures



      在使用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;



發佈了13 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章