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

Oracle 如何强制用户输入替换变量的值?,oracle,sqlplus,substitution,sql-scripts,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 en

我有一个脚本,它是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 ...

有没有可能这很疯狂但是。。。基于,您可以创建一个名为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.
insert into mytable (a, b, c) values ('&&x.', '&&y.', '&&z.');
然后创建另一个名为do_insert.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.
insert into mytable (a, b, c) values ('&&x.', '&&y.', '&&z.');
main.sql脚本将继续自行重新运行,直到所有X、Y和Z都不为null,从而使用户每次都重新输入它们。一旦所有值都不为null,它将运行使用这些值的do_insert.sql

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

SP2-0309:SQLcl命令程序只能嵌套到 二十,


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

我认为您不能。您可以指定一个数据类型,但我认为您无法阻止它为null。如果没有提供值,强制脚本终止是否是合适的替代方法?尽管插入可能会失败…递归调用,我喜欢跳出框框思考,这个创造性的疯狂答案肯定回答了我疯狂的问题;谢谢。