SQL 在 .sql 脚本中加上循环
SQL plus loop in .sql script
我是编写 SQL 加脚本的新手,我有一个问题。我想为我的 PL/SQL 实用程序编写安装脚本,它会询问用户一些问题(通过 ACCEPT 命令),然后列出将要完成的操作(通过 PROMPT)并要求确认(再次通过 ACCEPT)。这部分没问题,但我有问题,如果他接受,我需要 运行 一些 PL/SQL 脚本,如果他拒绝,我需要再次问他所有问题。在 SQL 加上任何选项如何做一个交互式循环,它根据变量内容决定是否继续和 运行 PL/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
谢谢
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
测试
me@XE> @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
me@XE> @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...
我是编写 SQL 加脚本的新手,我有一个问题。我想为我的 PL/SQL 实用程序编写安装脚本,它会询问用户一些问题(通过 ACCEPT 命令),然后列出将要完成的操作(通过 PROMPT)并要求确认(再次通过 ACCEPT)。这部分没问题,但我有问题,如果他接受,我需要 运行 一些 PL/SQL 脚本,如果他拒绝,我需要再次问他所有问题。在 SQL 加上任何选项如何做一个交互式循环,它根据变量内容决定是否继续和 运行 PL/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
谢谢
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
测试
me@XE> @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
me@XE> @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...