Oracle .SQL脚本中的SQL plus循环

Oracle .SQL脚本中的SQL plus循环,oracle,sqlplus,Oracle,Sqlplus,我刚开始编写SQL plus脚本,我遇到了一个问题。我想为我的PL/SQL实用程序编写安装脚本,它向用户询问一些问题(通过ACCEPT命令),然后列出将要做的事情(通过提示符)并请求确认(再次通过ACCEPT)。这部分还可以,但我有问题,如果他接受,我需要运行一些PL/SQL脚本,如果他拒绝,我需要再次询问他所有的问题。在SQL plus中,是否有任何选项可以执行交互式循环,该循环根据变量内容决定是继续运行PL/SQL脚本还是循环回循环的开头 在伪代码中,我需要如下内容: while ('&a

我刚开始编写SQL plus脚本,我遇到了一个问题。我想为我的PL/SQL实用程序编写安装脚本,它向用户询问一些问题(通过ACCEPT命令),然后列出将要做的事情(通过提示符)并请求确认(再次通过ACCEPT)。这部分还可以,但我有问题,如果他接受,我需要运行一些PL/SQL脚本,如果他拒绝,我需要再次询问他所有的问题。在SQL plus中,是否有任何选项可以执行交互式循环,该循环根据变量内容决定是继续运行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

谢谢输入。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
prompt run my tasks with &username and &password in place
task.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
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...

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
prompt run my tasks with &username and &password in place
task.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
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...

谢谢,这很好,但如果我在“循环”之后有更多的任务(例如创建日志文件或执行另一个提示),如果我这样做,不意味着如果用户在第一次尝试时没有确认,最后一部分将执行更多的任务吗?谢谢,这很好,但是如果我在“循环”之后有更多的任务怎么办(例如,创建日志文件或执行另一个提示),如果我这样做,是否意味着如果用户在第一次尝试时未确认,最后一部分将执行多次?