我已经制作了这个程序,我想知道为什么oracle即使不运行"D"情况(例如,当"A"补时(也会提示输入。
SET SERVEROUTPUT ON;
ACCEPT p_user_letter PROMPT 'Enter an option';
DECLARE
v_user_letter VARCHAR2(200) := UPPER('&p_user_letter');
BEGIN
CASE v_user_letter
when 'A' then dbms_output.put_line('A pressed');
when 'D' then new_customer('&userEntered');
else dbms_output.put_line('Other');
END CASE;
END;
/
CREATE OR REPLACE PROCEDURE new_customer
(ccName IN Varchar2)
IS
BEGIN
dbms_output.put_line('Ran procedure');
END new_customer;
从错误消息来看,它似乎运行了新版本和旧版本的 declare 强制所有未初始化的提示具有值,但我不确定,也无法在线找到原因。
新旧运行
('&userEntered');
是一个替换变量。
替换变量不是SQL的一部分,这是SQL-Plus客户端的一个功能,SQL-Developer也支持它。
当您点击Enter
(或 SQL-Developer 中的Run
图标(时,SQL-Plus 首先分析您的脚本。
当它在脚本中找到&xxx
字符串时,会提示用户输入值。
当用户输入值时,SQL-Plus 会将&xxx
替换为用户输入的值。
当 SQL-Plus 替换所有替换变量时,它开始执行此脚本 - 也就是说,它将 SQL 命令从脚本发送到 Oracle 数据库执行。
您可以将 SQL-Plus 中的变量替换视为一种宏预处理。