有没有办法确定 sqlplus 缓冲区是否已发送到服务器?
Is there a way to determine if the sqlplus buffer has been sent to the server?
我正在编写 运行s sql 使用 SqlPlus 编写脚本的代码。大多数脚本中都有 DDL,这需要一个 /(正斜杠)到 运行 缓冲区。一些脚本缺少斜杠。我试过 运行 像 @script.sql 这样的脚本,然后是 /,但它有时会尝试创建两次。我也想 运行 最后的 show errors 命令,有时如果缺少 / 会给我带来麻烦。
所以,我改成了@script。 (句点)显示错误。这在文件中存在 / 时有效,但现在如果文件中缺少 /,如果由于未创建对象而造成混乱。
我们试图用一些逻辑来检查文件中以 / 结尾的内容,但我认为这是一个混乱的选择。我有误报,这不是一个完美的解决方案。
我曾考虑尝试 运行 使用其他工具,但由于我工作的公司已经发布了此工具,并且客户希望它 运行 带有 sqlplus,并且可能包含仅适用于 sqlplus 的命令;不符合 JDBC 标准,我认为这不是一个合适的解决方案。
我现在在想,如果我可以检查 / 是否已经 运行 在当前缓冲区上并且仅当它没有时才执行,那将是一个很好的解决方案,也许是完美的,但我不能'找不到任何文档表明存在这样的命令。还有另一种方法可以解决这个问题吗?有这样的命令吗?
谢谢!
SQLPlus 非常有限。即使您确定缓冲区是否已发送,也没有执行 IF/THEN 的控制机制。
你可以做的一件事是,在脚本 运行 之前,你调用
exec begin raise login_denied; end;
脚本后调用
#show sqlcode
如果仍然显示 1017(login_denied 的错误代码),那么您可以确定脚本没有执行任何 SQL 语句。如果您愿意,可以使用用户定义的错误代码,例如 raise_application_error(-20123,'dummy');
请注意,我在 show 语句中包含了一个 # 前缀。该 运行 命令不会影响缓冲区的内容,因此如果您发现未执行任何操作,您可以尝试 运行 使用斜线对缓冲区内容进行设置。
如果您有一个包含多个 DDL 的脚本(例如 table 加上 indexes/grants/constraints...),那么您仍然 运行 没有 运行 的风险如果没有斜杠,则执行最终命令。
我正在编写 运行s sql 使用 SqlPlus 编写脚本的代码。大多数脚本中都有 DDL,这需要一个 /(正斜杠)到 运行 缓冲区。一些脚本缺少斜杠。我试过 运行 像 @script.sql 这样的脚本,然后是 /,但它有时会尝试创建两次。我也想 运行 最后的 show errors 命令,有时如果缺少 / 会给我带来麻烦。
所以,我改成了@script。 (句点)显示错误。这在文件中存在 / 时有效,但现在如果文件中缺少 /,如果由于未创建对象而造成混乱。
我们试图用一些逻辑来检查文件中以 / 结尾的内容,但我认为这是一个混乱的选择。我有误报,这不是一个完美的解决方案。
我曾考虑尝试 运行 使用其他工具,但由于我工作的公司已经发布了此工具,并且客户希望它 运行 带有 sqlplus,并且可能包含仅适用于 sqlplus 的命令;不符合 JDBC 标准,我认为这不是一个合适的解决方案。
我现在在想,如果我可以检查 / 是否已经 运行 在当前缓冲区上并且仅当它没有时才执行,那将是一个很好的解决方案,也许是完美的,但我不能'找不到任何文档表明存在这样的命令。还有另一种方法可以解决这个问题吗?有这样的命令吗? 谢谢!
SQLPlus 非常有限。即使您确定缓冲区是否已发送,也没有执行 IF/THEN 的控制机制。
你可以做的一件事是,在脚本 运行 之前,你调用
exec begin raise login_denied; end;
脚本后调用
#show sqlcode
如果仍然显示 1017(login_denied 的错误代码),那么您可以确定脚本没有执行任何 SQL 语句。如果您愿意,可以使用用户定义的错误代码,例如 raise_application_error(-20123,'dummy');
请注意,我在 show 语句中包含了一个 # 前缀。该 运行 命令不会影响缓冲区的内容,因此如果您发现未执行任何操作,您可以尝试 运行 使用斜线对缓冲区内容进行设置。
如果您有一个包含多个 DDL 的脚本(例如 table 加上 indexes/grants/constraints...),那么您仍然 运行 没有 运行 的风险如果没有斜杠,则执行最终命令。