prepareCall 后遇到符号 \"CLOSE\"
Encountered the symbol \"CLOSE\" after prepareCall
这是我的 pl/sql 代码,我试图通过 prepareCall
执行
String sql = String.format(FunctionCalls.TRIGGER1);
CallableStatement callableStatement = null;
Integer result = null;
String err = null;
try {
callableStatement = connection.prepareCall(sql);
callableStatement.execute();
result = callableStatement.getInt("RES_CODE");
err = callableStatement.getString("RES_DESC" );
执行后,我想得到两个声明的参数,RES_CODE
和RES_DESC
,但我却得到这个错误:
java.sql.SQLException: ORA-06550: line 2, column 1274:\nPLS-00103: Encountered the symbol \"CLOSE\" \n
google了一下,很多人认为问题出在cursor,需要在declaration section中声明cursors,在BEGIN之后process cursor,但是我是照着说的去做。在 PL/SQL Developer 中,它工作正常,您可以在图像中看到。
是否可以在 java 执行后获取声明的参数?
是否可以执行TRIGER1 pl/sql代码,得到RES_CODE
和RES_DESC
两个参数?
正如 CallableStatement
的 javadoc 所说:"The interface used to execute SQL stored procedures."
javadoc 甚至显示了您必须使用的语法,它以 {
大括号开头。
你的SQL是不是一个存储过程,它是一个PL/SQL区块.
另外,RES_CODE
和RES_DESC
是不是参数。
您尝试做的事情是完全错误的,如果某些网站向您展示了这样做,请立即停止使用该网站。
实际尝试创建 带有问题代码的存储过程,并为该存储过程定义实际参数。
Syntax 即:
CREATE PROCEDURE xxx ( RES_CODE OUT number, RES_DESC OUT varchar2 ) AS
variable declarations here
BEGIN
code here
END;
/
然后调用该过程使用:
String sql = "{call xxx(?,?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
stmt.registerOutParameter(1, TYPES.INTEGER);
stmt.registerOutParameter(2, TYPES.VARCHAR);
stmt.execute();
result = stmt.getInt(1);
err = stmt.getString(2);
}
这是我的 pl/sql 代码,我试图通过 prepareCall
String sql = String.format(FunctionCalls.TRIGGER1);
CallableStatement callableStatement = null;
Integer result = null;
String err = null;
try {
callableStatement = connection.prepareCall(sql);
callableStatement.execute();
result = callableStatement.getInt("RES_CODE");
err = callableStatement.getString("RES_DESC" );
执行后,我想得到两个声明的参数,RES_CODE
和RES_DESC
,但我却得到这个错误:
java.sql.SQLException: ORA-06550: line 2, column 1274:\nPLS-00103: Encountered the symbol \"CLOSE\" \n
google了一下,很多人认为问题出在cursor,需要在declaration section中声明cursors,在BEGIN之后process cursor,但是我是照着说的去做。在 PL/SQL Developer 中,它工作正常,您可以在图像中看到。
是否可以在 java 执行后获取声明的参数?
是否可以执行TRIGER1 pl/sql代码,得到RES_CODE
和RES_DESC
两个参数?
正如 CallableStatement
的 javadoc 所说:"The interface used to execute SQL stored procedures."
javadoc 甚至显示了您必须使用的语法,它以 {
大括号开头。
你的SQL是不是一个存储过程,它是一个PL/SQL区块.
另外,RES_CODE
和RES_DESC
是不是参数。
您尝试做的事情是完全错误的,如果某些网站向您展示了这样做,请立即停止使用该网站。
实际尝试创建 带有问题代码的存储过程,并为该存储过程定义实际参数。
Syntax 即:
CREATE PROCEDURE xxx ( RES_CODE OUT number, RES_DESC OUT varchar2 ) AS
variable declarations here
BEGIN
code here
END;
/
然后调用该过程使用:
String sql = "{call xxx(?,?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
stmt.registerOutParameter(1, TYPES.INTEGER);
stmt.registerOutParameter(2, TYPES.VARCHAR);
stmt.execute();
result = stmt.getInt(1);
err = stmt.getString(2);
}