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