将参数传递给 oracle 脚本

Posted

技术标签:

【中文标题】将参数传递给 oracle 脚本【英文标题】:Passing parameters to oracle script 【发布时间】:2013-10-01 20:43:57 【问题描述】:

这是我的场景。

我有带有创建、删除、插入等语句的 Test1.sql、Test2.sql 和 Test3.sql 文件。未来文件数量可能会增加。

我想在一个脚本中运行所有这些,所以我创建了一个主脚本 Master.sql,它具有以下内容

    @@Test1.sql
    @@Test2.sql
    @@Test3.sql

我在 Windows 上使用 SQL plus 命令提示符将它作为@"Path to the script\master.sql" 运行,如果我想通过 SQL 开发人员运行它,我只需打开 master.sql 文件并运行它。到目前为止一切顺利……

现在,我必须在具有不同用户和架构名称的各种环境中运行 master.sql,但用户和架构名称在脚本中是硬编码的。我希望能够用参数替换所有出现的硬编码名称,并在主脚本执行时只传递一次。无论是从命令提示符还是使用 SQL 开发人员。我该怎么做?请指教。

【问题讨论】:

从子脚本中删除硬编码依赖项怎么样?只需使用选定的凭据连接一次并调用所有子脚本 ... @ThinkJet - 有效,直到您有 2 个模式,它们在所有环境中可能不具有相同的名称。这就是为什么我的搜索带来了这个页面:-) 【参考方案1】:

查看SQL*PLUS User Guide and Reference 的文档。

来自手册:

您可以绕过与替换相关的值的提示 变量通过将值传递给脚本中的参数 开始命令。您可以通过放置一个与号 (&) 后跟一个 脚本中的数字代替替换变量。每一次 您运行此脚本,START 将文件中的每个 &1 替换为第一个 START 文件名之后的值(称为参数),然后替换每个 &2 与第二个值,依此类推。例如,您可以包括 在名为 MYFILE 的脚本中执行以下命令:

SELECT * FROM EMP_DETAILS_VIEW
WHERE JOB_ID='&1'
AND SALARY='&2';

在下面的 START 命令中,SQL*Plus 会用 PU_CLERK 代替 &1 和 3100 用于脚本 MYFILE 中的 &2:

 START MYFILE PU_CLERK 3100

当您在 START 命令中使用参数时,SQL*Plus 定义每个 脚本中的参数与相应参数的值。

【讨论】:

以上是关于将参数传递给 oracle 脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用 argparser 将参数传递给入口点 python 脚本

psql 将参数传递给 sql 脚本

如何将 :new 作为参数传递给 oracle 客户函数?

将 Access 表单上命令按钮的参数传递给 python 脚本

如何将数组参数传递给 Bash 脚本

将参数传递给输入文件的 shell 脚本