java - 如何在 Java 调用 Oracle DB 中运行多个顺序语句?

标签 java oracle plsql

我正在尝试删除一个表,创建它,然后在对 Oracle DB 的单个 Java 语句调用中填充它。

我尝试在调用之间的新行上用“/”分隔语句。这在 SQL Developer 中有效,但通过 Java 运行它会出现错误。

BEGIN
  EXECUTE IMMEDIATE 'DROP TABLE FOO';
EXCEPTION
  WHEN OTHERS THEN
IF sqlcode != -0942 THEN RAISE; 
END IF;
END;
/

CREATE TABLE FOO ( 
  PREFIX_SIZE number(2) NOT NULL,
  MASK number(10) NOT NULL  );
/  

BEGIN
FOR i IN 0..32 LOOP
    INSERT INTO FOO
    SELECT i, i*640 FROM DUAL;
END LOOP;
END;

这在 SQL Developer 中有效,但通过 Java 运行它会出现错误:

ORA-06550: 第 1 行,第 126 列: PLS-00103:遇到符号“/”

Java 代码:

try { 
    query = null; 
    loadSqlScript("create_table_foo.sql"); 
    preparedStatement = connection.prepareStatement(query);    
    preparedStatement.execute(); } 
catch......

loadSqlScript 只是将上述代码分配给查询字符串。

最佳答案

一次运行一个语句。

由于您似乎是从文本文件中读取整个脚本,因此仅使用 / 将字符串分割成行,然后执行每个段。

String fullSql = loadSqlScript("create_table_foo.sql"); 

conn.setAutoCommit(false);
try (Statement stmt = conn.createStatement()) {
    for (String sql : fullSql.split("(?m)^/\\s*\\R")) {
        stmt.execute(sql);
    }
}
conn.commit();

关于java - 如何在 Java 调用 Oracle DB 中运行多个顺序语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580772/

相关文章:

java - 正则表达式在java中查找URL中的编码字符串

oracle - 使用 Oracle 表作为输入参数编写 Oracle 存储过程

Java 用样式创建 Excel

java - 在 xsd 上使用 xjc 时缺少包装类

java - 如何从 HttpURLConnection 的响应 header 获取文件名?

java - Oracle pl/SQL 数字或值错误

sql - 计算 Oracle 中每个文档的给定搜索查询/术语的命中数

ruby - 在 ruby​​ 中使用 sql loader

sql - 我的 Oracle View 使用了一个不存在的表,但我仍然可以查询它

database - 在存储过程中动态填充 Oracle 游标