【问题标题】:SQL Plus - SET command not affecting the script being ranSQL Plus - SET 命令不影响正在运行的脚本
【发布时间】:2014-12-24 16:52:23
【问题描述】:

我正在尝试运行以下 SQLPlus* 命令集:

/usr/tmp/> sqlplus -s / @my_test_script param1 param2 <<-EOF
SET ECHO OFF
SET HEADING OFF
SET VERIFY OFF
SET TERMOUT OFF
SET FEEDBACK OFF
SET PAGES 0
SET LINESIZE 400
EXIT
EOF

SET 命令应该抑制我正在运行的脚本的输出 - 但它们没有效果,因为脚本本身可能对 ECHO、HEADING 等具有不同的“范围”。 仅当我将所有这些 SET 命令移动到脚本文件本身时,才会抑制输出。

由于这段代码最终会变成运行其他 SQL 脚本的通用脚本,因此将这些 SET 命令放在每个脚本中并不是一个好的解决方案。

有没有人知道强制 SET 命令值超过在同一个 SQLPlus*“会话”中运行的脚本的方法?

【问题讨论】:

  • 我认为您重定向到 sqlplus 的 set 命令正在运行 脚本。
  • 您在第一行定义的 here-document 字符串是“-EOF”,但您只用“EOF”关闭它(前面没有破折号)。删除第一行“E”之前的破折号。没关系,我刚刚读到破折号忽略了 here-doc 行中的前导 TAB。谢谢你今天让我学到东西!大声笑

标签: oracle sqlplus


【解决方案1】:

我同意香农的观点。您可以尝试以下代码(稍微改变了排序):

/usr/tmp/> sqlplus -s / <<-EOF
SET ECHO OFF
SET HEADING OFF
SET VERIFY OFF
SET TERMOUT OFF
SET FEEDBACK OFF
SET PAGES 0
SET LINESIZE 400
@my_test_script param1 param2
EXIT
EOF

【讨论】:

    【解决方案2】:

    如果我没记错的话,你可以使用@@ 命令从每个脚本中调用这个初始化脚本。例如:

    @@init.sql
    

    source

    编辑

    另外,来自 oracle documentation

    SQL*Plus 还支持在站点配置文件之后执行的用户配置文件。该文件通常命名为 login.sql。 SQL*Plus 在您的当前目录中搜索用户配置文件,然后搜索您使用 SQLPATH 环境变量指定的目录。 SQL*Plus 按其列出的顺序搜索此冒号分隔的目录列表。

    您可以将任何 SQL 命令、PL/SQL 块或 SQL*Plus 命令添加到您的用户配置文件中。当您启动 SQL*Plus 时,它会自动搜索您的用户配置文件并运行其中包含的命令。

    【讨论】:

      猜你喜欢
      • 2020-07-13
      • 2010-11-02
      • 2019-12-25
      • 2011-02-11
      • 1970-01-01
      • 2014-07-29
      • 2022-11-26
      • 2010-12-17
      • 2014-09-01
      相关资源
      最近更新 更多