java - 如何在 Java 中执行 Oracle PLSQL block

标签 java sql oracle jdbc plsql

我有一个这样的 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/

相关文章:

java - 从 oracle db 执行 java callout

java - 发送没有关键值的改造获取请求

sql - 如何在 SQL 中做百分比/总计?

sql-server - ora-00936 缺少表达式选择语句

MySQL - 如何列出具有引用我的表主键的外键的所有表?

java - SQL语句语法错误

sql - 多行sql查询出错

java - 使用 Java 与数据库进行数据更新

java - 替换 JSON 字符串响应中的图像源

java - upheap 方法的递归函数(我如何将这个非递归方法写成递归的)