gpt4 book ai didi

oracle - 使用 SQL*Plus 生成 SQL*Plus 脚本

转载 作者:行者123 更新时间:2023-12-04 19:52:17 24 4
gpt4 key购买 nike

我想通过查询数据字典生成大量 SQL*Plus 脚本,但我遇到了一些问题并怀疑我遗漏了一些明显的东西。

例如,当我在 SQL*Plus 中执行以下命令时,我得到 ORA-01756: quoted string not properly terminated:

SQL> SPOOL myscript.sql
SQL> SELECT q'[SPOOL log
2 SELECT COUNT(*) FROM DUAL;
ERROR:
ORA-01756: quoted string not properly terminated

我尝试使用行继续字符来避免此错误,但它会将继续字符放入输出中:

SQL> SELECT q'[SPOOL log
2 SELECT COUNT(*) FROM DUAL; -
3 PROMPT Done.
4 ]' FROM DUAL;
SPOOL log
SELECT COUNT(*) FROM DUAL; -
PROMPT Done.

请注意输出如何在 DUAL; 之后包含 -?我不想在生成的脚本中使用它。

我可以解决这个问题的一种方法是连接大量 CHR() 函数调用以生成分号和换行符;但我希望我不必这样做,因为生成的这些脚本非常长,并且像 ]'||CHR(59)||CHR(10)||q'[ 这样的位分散在各处代码使它看起来非常难看,并且很难进行故障排除。

(我正在使用 SQL*Plus Release 11.2.0.1.0 Production,连接到 11gR2 实例。)

最佳答案

问题是 SQL*Plus 将您的第一个 ; 解释为命令的终止符。您可能已经注意到,如果您将命令写入文本文件并执行(或使用 SQL*Plus 在文本编辑器中对其进行编辑),它会起作用。

要让它与实时打字一起工作,如果你真的想这样做(如果它们会很长,这似乎不太可能!),你可以使用 SET SQLTERMINATOR off 关闭终止符的自动检测。 .请注意,您必须告诉 SQL*Plus 您已经完成并且它应该使用 / 指令执行,因为第二个 ; 也会被忽略。

SQL> SPOOL myscript.sql
SQL> SET SQLTERMINATOR off
SQL> SELECT q'[SPOOL log
2 SELECT COUNT(*) FROM DUAL;
3 PROMPT Done.
4 ]' FROM DUAL
5 /
SPOOL log
SELECT COUNT(*) FROM DUAL;
PROMPT Done.

如果您从数据字典构建这些,另一种选择是使用 PL/SQL 进行查询和操作,并使用 dbms_output 生成您要假脱机的输出,只要因为最终文件大小不会超过缓冲区限制。

关于oracle - 使用 SQL*Plus 生成 SQL*Plus 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4141262/

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