【发布时间】:2015-09-16 17:25:35
【问题描述】:
我有一个这样的 PL/SQL 块:
BEGIN
FOR i IN 1..100
LOOP
UPDATE rptbody
SET comments = 'abcs';
WHERE (rptno> 100 and rptno < 200) and ROWNUM<2;
COMMIT;
END LOOP;
END;
此块需要使用 Oracle JDBC 执行。我尝试了以下方法:
尝试使用 Statement 对象执行此操作。由于这是一个块,因此引发了一个异常,说这不是一个 sql 语句
这可以拆分为 sql 语句,但我有 100 多个这样的块,这对于代码来说会很麻烦,并考虑将其留给 sqlplus。
尝试使用 CallableStatement,但效果不佳。
任何解决方案都会有所帮助。
【问题讨论】:
-
你说得对,这是一个匿名的 PL/SQL 块而不是 SQL
-
您能否发布您正在使用的 Java 代码(尤其是
CallableStatement版本)?并发布你得到的确切错误堆栈。 -
结合 Justin 提到的内容,您可能会发现这有助于修复错误:stackoverflow.com/a/10465239/350136
-
你可以通过
Statement对象运行它,但是你必须使用Statement.execute()。如果 oyu 需要将参数传递给 PL/SQL 块,您只需要CallableStatement。您需要发布您的 Java 代码。 “不起作用”既不是可接受的错误描述,也不是有效的 Java 或 Oracle 异常 -
顺便说一句:我只是希望您的示例不是您正在运行的真实代码,因为在没有 PL/SQL 块的情况下使用单个语句可以更有效地实现很多 -而不是通过光标慢慢来的方法。
标签: java sql oracle jdbc plsql