甲骨文案例运行所有提示



我已经制作了这个程序,我想知道为什么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 中的变量替换视为一种宏预处理。

最新更新