2

問題

特定のソフトウェアリリースを構成する多数の基礎となるSQLスクリプトを実行するために使用されるDBA提供のラッパースクリプトがあります。

ラッパースクリプトは、実行される内容に関するデバッグ情報を出力し、次のsqlplusコマンドを使用して、続行するかどうかをユーザーに確認します。

ACCEPT DB_OK PROMPT "Do you wish to Continue Y/[N]? : " DEFAULT N

Mavenを使用してビルドでデータベースの作成を自動化しようとしています...ビルドはユーザー入力を待ってハングします:-(

<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>exec-maven-plugin</artifactId>
 <version>1.2.1</version>
 <executions>
  <execution>
   <phase>pre-integration-test</phase>
   <goals>
    <goal>exec</goal>
    </goals>
    <configuration>
     <executable>sqlplus</executable>
     <arguments>
      <argument>${db.user}/${db.password}@${db.service.name}</argument>
      <argument>@${project.build.directory}/test-resources/create-db.sql</argument>
      </arguments>
      <workingDirectory>${project.build.directory}/test-resources</workingDirectory>
     </configuration>                
    </execution>
   </executions>
  </plugin>

試みられた解決策

ACCEPT呼び出しをplsqlIF/ ELSEブロックでラップしようとしましたが、これにより「ACCEPT」に関するエラーが発生し、構文が正しくなくなります。これは、plsqlコマンドとsqlplusコマンドを混在させているためだと思います。

質問

それで、従来の置換変数のSET DEFINE OFFに似たsqlplusのACCEPTプロンプトを無効にする方法を知っている人はいますか?

ラッパースクリプトに小さな変更を加えることはできますが、一括リファクタリングを行うと、DBAはおそらく文句を言うでしょう。

ありがとう。

4

2 に答える 2

3

SQL * Plusは、位置表記を使用してパラメータを渡します。42したがって、これは、によって期待される最初の(そして唯一の)パラメータとして渡されますsome_script.sql

$ sqlplus scott/tiger@orcl @@$HOME/scripts/some_script.sql 42 

これにより、ACCEPT呼び出しが短絡します。

したがって、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>    

つまりY、sqlplusコマンド文字列の次の引数として渡します(DB_OK最初に期待されるパラメータであると仮定します。スクリプトは私よりもよく知っています)。

于 2012-05-21T13:29:12.220 に答える
2

PRODUCT_USER_PROFILEACCEPTを使用して、スクリプトを実行しているユーザーのコマンドを無効にすることができます

于 2012-05-21T11:18:41.300 に答える