如何强制用户输入替换变量的值?
Posted
技术标签:
【中文标题】如何强制用户输入替换变量的值?【英文标题】:how to force user to enter value for substitution variable? 【发布时间】:2017-08-14 18:27:34 【问题描述】:我有一个 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 ...
可以吗
【问题讨论】:
我不认为你可以。您可以指定数据类型,但我认为您不能阻止它为空。如果没有提供合适的替代值,是否强制脚本终止? (尽管可能无论如何插入都会失败......) 【参考方案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 不为空 - 使用户每次都重新输入它们。一旦全部不为空,它将运行使用这些值的 do_insert.sql。
请注意,每次重新运行 main.sql 时,它都是一个嵌套调用;如果用户一直省略值,SQL Developer(例如)最终会失败并出现错误:
SP2-0309:SQLcl 命令过程只能嵌套到 20.
但实际上,如果您想要一个体面的用户界面,SQL Plus 脚本并不是构建用户界面的方法。
【讨论】:
递归调用,我喜欢开箱即用,这个创造性的疯狂答案肯定回答了我的疯狂问题。 ;) 非常感谢。以上是关于如何强制用户输入替换变量的值?的主要内容,如果未能解决你的问题,请参考以下文章