2017-08-03 16 views
0

私はSQLプラススクリプトを書くことで新しく、問題があります。私は、PL/SQLユーティリティのインストールスクリプトを書いて、ユーザにいくつかの質問を(ACCEPTコマンドを介して)行い、何が行われるかを(PROMPTを介して)リストし、(ACCEPTを介して)確認を求めます。この部分は問題ありませんが、問題があるよりも、PL/SQLスクリプトを実行する必要があります。 SQLに加えて任意のオプションです。変数の内容に基づいて、PL/SQLスクリプトを実行するか、ループの先頭にループバックするかを決定するインタラクティブ・ループを実行する方法はありますか?擬似コードでSQL Plusのループ.sqlスクリプト

私はこのような何かしたい:

while ('&confirmation' != 'y'){ 
    /*ask some questions*/ 
    ACCEPT info_1 CHAR PROMPT 'text_1'; 
    ACCEPT info_2 CHAR PROMPT 'text_2'; 
    ... 
    /*write some summary*/ 
    PROMPT 'text_2'; 
    /*ask for confirmation */ 
    ACCEPT confirmation CHAR PROMPT 'are these information correct? (y/n)'; 
} 
@skript 

おかげ

答えて

2

input.sql

accept username char prompt "username: " 
accept password char prompt "password: " 

prompt 
prompt &username 
prompt &password 
prompt 
prompt 

accept confirm char prompt "correct? (y|n): " 

column col noprint new_value runscript 
select 
    decode(lower('&confirm'), 
    'y', 'task.sql', 
    'n', 'input.sql') col 
from dual; 

prompt &runscript 
@&runscript 

task.sql

prompt run my tasks with &username and &password in place 

テスト

[email protected]> @input 
username: a 
password: b 

a 
b 

correct? (y|n): y 
old 2: decode(lower('&confirm'), 
new 2: decode(lower('y'), 

task.sql 
run my tasks with a and b in place 
[email protected]> @input 
username: a 
password: b 

a 
b 


correct? (y|n): n 
old 2: decode(lower('&confirm'), 
new 2: decode(lower('n'), 

input.sql 
username: etc... 
+0

おかげで、これは良いですが、私は「ループ」の後に複数のタスクを持っている場合(例えば、ログファイルを作成するか、別のプロンプトを行う)私はそれを行う場合には、そのように何を、doesnの」ユーザーが最初の試行で確認しないと、最後の部分が1つ以上実行されないことを意味しますか? – Silverrook