我試圖從我的Java應用程序運行以下PL SQL。使用Java執行PL SQL
SET SERVEROUTPUT ON
DECLARE
XMLVal CLOB := '<some xml here>';
Msg Varchar2(100);
BEGIN
mands.Lib_Interface.LoadData(Msg, XMLVal);
DBMS_OUTPUT.PUT_LINE(Msg);
END;
我的Java代碼---- ----- EDITED更新的prepareCall從
CallableStatement vStatement = vDatabaseConnection.prepareCall("begin ? := mands.Lib_Interface.LoadData(?, ?); end;");
到
CallableStatement vStatement = vDatabaseConnection.prepareCall("begin mands.Lib_Interface.LoadData(?, ?); end;");
Connection vDatabaseConnection = DriverManager.getConnection(dbAddress, dbSchema,dbScemaPassword);
CallableStatement vStatement = vDatabaseConnection.prepareCall("begin mands.Lib_Interface.LoadData(?, ?); end;");
vStatement.setString(3, xml);
vStatement.registerOutParameter(1, Types.VARCHAR);
vStatement.registerOutParameter(2, Types.VARCHAR);
vStatement.executeUpdate();
然而,當我運行代碼我得到以下SQLException
java.sql.SQLException: ORA-06550: line 1, column 14:
PLS-00222: no function with name 'LOADDATA' exists in this scope
ORA-06550: line 1, column 7:
在SQL Developer中使用該命令時,我沒有任何問題。
我已經搜索了這個問題,但不知所措。任何幫助,將不勝感激。
問候
音
----------------------------- EDIT ------ -------------------
所以我也嘗試
vStatement.setClob(3, new StringReader(xml));
vStatement.registerOutParameter(1, Types.VARCHAR);
vStatement.registerOutParameter(2, Types.VARCHAR);
vStatement.execute();
和
Clob clob = vDatabaseConnection.createClob();
clob.setString(1, xml);
vStatement.setClob(3, clob);
vStatement.registerOutParameter(1, Types.VARCHAR);
vStatement.registerOutParameter(2, Types.VARCHAR);
但我仍然得到相同的錯誤。
-----------------編輯-----------------------
這裏是工作代碼
Connection vDatabaseConnection = DriverManager.getConnection("dbAddress","dbSchema","dbPassword");
CallableStatement vStatement = vDatabaseConnection.prepareCall("begin mands.Lib_Interface.LoadData(?, ?); end;");
vStatement.setClob(2, new StringReader(xml));
vStatement.registerOutParameter(1, Types.VARCHAR);
vStatement.executeUpdate();
https://www.tutorialspoint.com/jdbc/callablestatement-object-example.htm – OldProgrammer
最好是你創建一個存儲過程,並從Java中調用它...我不確定你可以嵌入在Java中的pl/sql匿名塊 – Dazak
@Dazak - 我會研究如何做到這一點,如果這是執行PLSQL的首選方法 –