2017-08-03 35 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

謝謝,這是件好事,但如果我有「循環」經過的任務(例如創建日誌文件或另做提示),如果我這樣做的,沒有按」這是否意味着如果用戶在第一次嘗試時沒有確認,最後一部分將會被執行多於一個? – Silverrook