如何强制用户输入替换变量的值?

时间:2017-08-14 18:27:35

标签: oracle sqlplus substitution sql-scripts

我的脚本是SQLPLUS表单。 我要求用户输入替换变量的值来执行insert语句。

某些替换变量用于必填列,所以

如果替换变量值为null,我该如何要求用户再次填充?

如何通过强制用户输入值来为同一个替换变量赋值,具体取决于它的值?

或如何强制用户输入替换变量的值?

类似

psedu code:

accept x prompt please enter value for x
 while (&x is null) loop
       accept x prompt please enter value for x
 end loop
insert into ...

是否可能

1 个答案:

答案 0 :(得分:1)

这很疯狂,但......基于this answer I gave to another question你可以创建一个名为 main.sql 的脚本:

accept x prompt please enter value for x
accept y prompt please enter value for y
accept z prompt please enter value for z

set term off verify off

column script new_value v_script

select case when '&&x.' is null or '&&y.' is null or '&&z.' is null
         then 'main'
         else 'do_insert' 
         end script
  from dual;

set term on verify on

@@&v_script.

然后创建另一个名为 do_insert.sql 的脚本,如下所示:

insert into mytable (a, b, c) values ('&&x.', '&&y.', '&&z.');

main.sql 脚本将继续重新运行,直到所有X,Y和Z都不为空 - 使用户每次都重新输入所有这些内容。一旦所有都不为null,它将运行使用值的 do_insert.sql

请注意,每次重新运行main.sql时,它都是嵌套调用;如果用户不断省略值,SQL Developer(例如)最终会失败并出现错误:

  

SP2-0309:SQLcl命令过程只能嵌套到深度   20。

但实际上,如果你想要一个像样的用户界面,SQL Plus脚本不是构建它的方法。