plsql使用Java执行plsql
我尝试从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代码是-----编辑-----从
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中使用该命令时没有问题
我已经在谷歌上搜索了这个问题,但不知所措。任何帮助都将不胜感激
问候
语气
------------------------------编辑-------------------------
所以我也试过了
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();
# 1 楼答案
在PL/SQL代码中,您使用两个变量来调用一个过程:
在JDBC代码中,您将过程作为函数调用(请注意赋值运算符)。因此,名为“LOADDATA”的错误函数no:
应将其作为过程调用,参数1为out参数,参数2为in参数:
此外,代码中还有其他一些小错误:
在Java代码中,您正在为CLOB参数设置一个
String
。尝试使用StringReader
和setClob
-方法来分配in参数。另外,我不确定vStatement.executeUpdate()
是否有效,试着只使用execute
或者,您可以尝试ANSI 92语法
{ call schema.package.procedure(?, ?) }
:如果这仍然不起作用,请确保您在JDBC中使用的用户与在SQL Developer中使用的用户相同