在prepareCall后遇到符号\"CLOSE\"
Posted
技术标签:
【中文标题】在prepareCall后遇到符号\\"CLOSE\\"【英文标题】:Encountered the symbol \"CLOSE\" after prepareCall在prepareCall后遇到符号\"CLOSE\" 【发布时间】:2018-08-25 22:18:50 【问题描述】:pl/sql code TRIGER1
这是我试图通过prepareCall
执行的 pl/sql 代码
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: 第 2 行,第 1274 列:\nPLS-00103: 遇到符号 \"CLOSE\" \n
谷歌搜索后,很多人认为问题出在游标上,您需要在声明部分声明游标和BEGIN之后的进程游标,但我正在按照它说的做。在 PL/SQL Developer 中它工作正常,您可以在图像中看到。
在java中是否可以在执行后获取声明的参数?
是否可以执行TRIGER1 pl/sql代码,得到RES_CODE
和RES_DESC
这两个参数?
【问题讨论】:
请发布您执行的实际代码(尽量减少以减少长度),问题不应依赖外部链接获取相关信息。 【参考方案1】:正如CallableStatement
的 javadoc 所说:“用于执行 SQL 存储过程的接口。”
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);
【讨论】:
感谢您的回答。我不能在这个数据库中创建任何过程。我只能调用函数、过程和运行选择。如果是这样,那么我如何从 java 运行它?以上是关于在prepareCall后遇到符号\"CLOSE\"的主要内容,如果未能解决你的问题,请参考以下文章
在oracle sql中,我在删除插入表后创建但收到此错误PLS-00103:遇到符号“DELETE”[重复]