我的脚本是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 ...
是否可能
答案 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脚本不是构建它的方法。