gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:30:54 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com