2017-08-12 69 views
2

我已經制作了這個程序,我想知道爲什麼oracle會提示輸入,即使它沒有運行'D'的情況下(例如'A'被推定時)。Oracle案例運行所有提示

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; 

從現在看來似乎錯誤消息宣告運行,這迫使所有未初始化的提示有值的新老版本,但我不能確定,無法找出原因聯機。

Both new and old running

回答

2

('&userEntered');是一個substitution variable
替換變量不是SQL的一部分,這是SQL-Plus客戶端的一個特性,它也受SQL-Developer支持。

當您點擊Enter(或SQL-Developer中的Run圖標)時,SQL-Plus會首先分析您的腳本。
在腳本中找到&xxx字符串時,會提示用戶輸入值。
當用戶輸入值時,SQL-Plus 用用戶輸入的值替換(替換)&xxx
當SQL-Plus替換所有替換變量時,它將開始執行此腳本 - 也就是說,它將腳本中的SQL命令發送到Oracle數據庫以供執行。

您可以將SQL-Plus中的變量替換視爲一種宏預處理。