我正在尝试删除一个表,创建它,然后在对 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/