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

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,您可以创建一个名为 ma​​in.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.');

ma​​in.sql 脚本将不断重新运行,直到所有 X、Y 和 Z 不为空 - 使用户每次都重新输入它们。一旦全部不为空,它将运行使用这些值的 do_insert.sql

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

SP2-0309:SQLcl 命令过程只能嵌套到 20.

但实际上,如果您想要一个体面的用户界面,SQL Plus 脚本并不是构建用户界面的方法。

【讨论】:

递归调用,我喜欢开箱即用,这个创造性的疯狂答案肯定回答了我的疯狂问题。 ;) 非常感谢。

以上是关于如何强制用户输入替换变量的值?的主要内容,如果未能解决你的问题,请参考以下文章

将用户输入的值替换为 React 中分配有状态的值

如何在隐藏输入字段中保存数组的值,然后再将其替换为新数组

jquery 用它的值替换每个输入。然后切换/切换回有输入

如何使用Python替换Get请求中的用户输入值

如何在html页面中使用js变量

#Oracle#PL/SQL:多个输入的替换变量