这是我的计划:
SET VERIFY OFF
SET FEED OFF
SET SERVEROUTPUT ON
PROMPT 'Vehicle Inventory Record'
ACCEPT p_Options;
ACCEPT myVariable PROMPT 'Input value: ';
DECLARE
n_numb number := 1;
BEGIN
IF '&p_Options' = 'YES' THEN
dbms_output.put_line('input YES');
ELSIF '&p_Options' = 'NO' THEN
dbms_output.put_line('input NO');
ELSE
dbms_output.put_line('&myVariable');
END IF;
END;
/
现在,每当我运行程序时,我输入p_Options的值,但无论我输入什么,它都会要求我输入myVariable。
我想仅在其他情况下输入myVariable的值,当p_Options既不是YES也不是NO时。
为什么即使在其他情况下也要求myVariable?
答案 0 :(得分:0)
因为在解释过程之前必须用实际值替换替换变量(& ...),"在"之前很久它被发送执行。
解释器(与运行时相对)不会评估" if"陈述,看它是否导致真或假;这将在运行时发生。
你想做什么 - 有一个程序提示用户myVariable DURING EXECUTION,并且只有在需要的时候?你不能用替换变量做到这一点。
答案 1 :(得分:0)
SET VERIFY OFF
SET FEED OFF
SET SERVEROUTPUT ON
PROMPT 'Vehicle Inventory Record'
ACCEPT condition;
ACCEPT myVariable PROMPT 'Input value: ';
DECLARE
n_numb varchar2(20) := '&condition';
BEGIN
IF n_numb = 'Y' THEN
dbms_output.put_line('input YES');
ELSIF n_numb = 'N' THEN
dbms_output.put_line('input NO');
ELSE
dbms_output.put_line('NO DATA FOUND:');
END IF;
END;
答案 2 :(得分:0)
时间有点晚(略有不同),但认为它对像我这样的人可能有用:)
声明变量。
一个用于显示提示的条件。
如果提示出现,则用于存储结果的一个。
VARIABLE show_alert varchar2(10);
VARIABLE confirm varchar2(10);`
现在在PLSQL块中,根据需要设置show_alert值。
我将“ Y”设置为显示警报并要求用户输入值
“ N”表示不显示警报(并且不会要求输入值)。
DECLARE
r_ver varchar2(50);
BEGIN
SELECT zbc
INTO r_ver
FROM bla_bla_table;
IF r_ver like '12.2%' THEN
:show_alert := 'Y';
ELSE
:show_alert := 'N';
END IF;
END;
/
然后,我在cont.sql中假脱机接受命令。仅当满足上述条件中的where条件即show_alert ='Y'时,此sql文件才会存储accept命令。
然后,它使用@ cont.sql执行sql文件。
SPOOL cont.sql
SELECT
'ACCEPT confirm prompt "Continue installation (Y/N):";'
FROM
dual
WHERE
upper(substr(:show_alert, 1, 1)) = 'Y';
spool off
@cont.sql