Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL*Plus禁用或跳过接受提示 问题_Oracle_Maven_Plsql_Maven Plugin_Sqlplus - Fatal编程技术网

Oracle SQL*Plus禁用或跳过接受提示 问题

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

我们有一个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
${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>