我有一个这样的 PL/SQL block :
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;
此 block 需要使用 Oracle JDBC 执行。我尝试了以下方法:
尝试使用 Statement 对象执行此操作。由于这是一个 block ,所以引发了一个异常,说这不是一条sql语句
这可以拆分成 sql 语句,但我有 100 多个这样的 block ,这对代码来说会很麻烦,所以考虑将其留给 sqlplus。
尝试使用 CallableStatement,但效果不佳。
任何解决方案都会有所帮助。
最佳答案
这与您如何运行它无关。 PL/SQL 语法无效。在 WHERE
子句之前的更新子句之后有一个 ;
:
BEGIN
FOR i IN 1..100
LOOP
UPDATE rptbody
SET comments = 'abcs' --<<< no semicolon here!!
WHERE (rptno> 100 and rptno < 200) and ROWNUM<2;
COMMIT;
END LOOP;
END;
上面的代码可以这样运行:
String sql = "... the PL/SQL block ...";
Statement stmt = connection.createStatement();
stmt.execute(sql);
关于java - 如何在 Java 中执行 Oracle PLSQL block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32614986/