Oracle SQL*Plus禁用或跳过接受提示 问题
我们有一个DBA提供的包装器脚本,用于执行构成给定软件版本的许多底层sql脚本 包装器脚本输出一些关于将执行什么的调试信息,然后使用以下sqlplus命令询问用户是否希望继续Oracle SQL*Plus禁用或跳过接受提示 问题,oracle,maven,plsql,maven-plugin,sqlplus,Oracle,Maven,Plsql,Maven Plugin,Sqlplus,我们有一个DBA提供的包装器脚本,用于执行构成给定软件版本的许多底层sql脚本 包装器脚本输出一些关于将执行什么的调试信息,然后使用以下sqlplus命令询问用户是否希望继续 ACCEPT DB_OK PROMPT "Do you wish to Continue Y/[N]? : " DEFAULT N 我们正在尝试使用maven自动化构建中的数据库创建…构建挂起等待用户输入:-( org.codehaus.mojo execmaven插件 1.2.1 预集成测试 执行官 sqlplus
ACCEPT DB_OK PROMPT "Do you wish to Continue Y/[N]? : " DEFAULT N
我们正在尝试使用maven自动化构建中的数据库创建…构建挂起等待用户输入:-(
org.codehaus.mojo
execmaven插件
1.2.1
预集成测试
执行官
sqlplus
${db.user}/${db.password}@${db.service.name}
@${project.build.directory}/test resources/create-db.sql
${project.build.directory}/test资源
尝试的解决方案
我试图将ACCEPT调用包装在plsql IF/ELSE块中,但这会导致关于“ACCEPT”的错误和语法错误,我想这是因为我混合了plsql和sqlplus命令
问题:
那么,有人知道我如何禁用sqlplus中类似于为传统替换变量设置DEFINE OFF的ACCEPT提示符吗
我可以对包装器脚本进行一些小的修改,但是如果我进行批量重构,DBA可能会抱怨
谢谢。您可以使用为运行脚本的用户禁用
ACCEPT
命令SQL*Plus使用位置符号传递参数。因此这将传递42
作为某些脚本所需的第一个(也是唯一的)参数。SQL
$ sqlplus scott/tiger@orcl @@$HOME/scripts/some_script.sql 42
这会使任何接听电话短路
因此,如果我正确理解了Maven插件的工作原理,我认为您可以实现如下相同的目标:
<executable>sqlplus</executable>
<arguments>
<argument>${db.user}/${db.password}@${db.service.name</argument>
<argument>@${project.build.directory}/test-resources/create-db.sql</argument>
<argument>Y</argument>
</arguments>
sqlplus
${db.user}/${db.password}@${db.service.name
@${project.build.directory}/test resources/create-db.sql
Y
也就是说,将
Y
作为sqlplus命令字符串中的下一个参数传递(假设DB_OK
是第一个预期参数-您将比我更了解脚本).您可以发布用于执行其中一个脚本的Maven代码吗?我已经编辑了这个问题,将Maven sqlplus executionClose包括在内,但我只想在某些情况下禁用提示,当有人从命令行执行脚本时,应该提示,但当作为构建的一部分执行时,应该禁用提示。然后为什么不在这些场景中使用特定的用户呢?我喜欢这个建议,但我怀疑我们的DBA会同意,因为这意味着我们的开发环境与生产环境不同(有额外的用户)。环境的定义相当严格。我尝试了类似的方法,但未能使其正常工作,因为您建议我再尝试一次(我之前的尝试有点快速)
<executable>sqlplus</executable>
<arguments>
<argument>${db.user}/${db.password}@${db.service.name</argument>
<argument>@${project.build.directory}/test-resources/create-db.sql</argument>
<argument>Y</argument>
</arguments>