将参数传递给 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 脚本