如何强制用户输入替代变量的值?
how to force user to enter value for substitution variable?
我有 SQLPLUS 形式的脚本。
我要求用户输入替换变量的值以执行插入语句。
一些替代变量用于必填列,因此
如果替换变量值为空,如何让用户重新填写?
如何通过强制用户输入来根据变量本身的值将值分配给相同的替换变量?
或者如何强制用户输入替换变量的值?
类似
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 ...
可以吗
这太疯狂了,但是...基于 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 都不为空 - 让用户重新每次都输入所有这些。一旦都不为空,它将 运行 do_insert.sql 使用这些值。
注意每次main.sql重新运行都是嵌套调用; SQL 如果用户不断省略值,开发人员(例如)最终会失败并出现错误:
SP2-0309: SQLcl command procedures may only be nested to a depth of
20.
但实际上,如果您想要一个体面的用户界面,SQLPlus 脚本不是构建界面的好方法。
我有 SQLPLUS 形式的脚本。 我要求用户输入替换变量的值以执行插入语句。
一些替代变量用于必填列,因此
如果替换变量值为空,如何让用户重新填写?
如何通过强制用户输入来根据变量本身的值将值分配给相同的替换变量?
或者如何强制用户输入替换变量的值?
类似
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 ...
可以吗
这太疯狂了,但是...基于 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 都不为空 - 让用户重新每次都输入所有这些。一旦都不为空,它将 运行 do_insert.sql 使用这些值。
注意每次main.sql重新运行都是嵌套调用; SQL 如果用户不断省略值,开发人员(例如)最终会失败并出现错误:
SP2-0309: SQLcl command procedures may only be nested to a depth of 20.
但实际上,如果您想要一个体面的用户界面,SQLPlus 脚本不是构建界面的好方法。