我试图从我的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的首选方法 –