2009-11-19 69 views
1

我有一個相當複雜的查詢,它將多次引用單個日期作爲開始或停止日期。我將不得不在3個不同會計年度運行此查詢,並且不希望爲了在查詢中更改它而不得不追查17次日期。帶變量的PL/SQL查詢

有沒有辦法在我的查詢開始處設置一個變量並將其引用到整個過程?我不想寫一個完整的函數,只是在我的查詢中引用一個變量。

回答

2

你不是真的說你如何引用這個,所以我只是從SQL * Plus的角度展示。

兩種方式

有它提示您輸入值。由於您多次使用相同的變量,因此您需要使用運算符。


    SQL> SELECT &&var, &&var FROM Dual; 
    Enter value for var: 'PUMPKIN' 
    old 1: SELECT &&var, &&var FROM Dual 
    new 1: SELECT 'PUMPKIN', 'PUMPKIN' FROM Dual 

    'PUMPKI 'PUMPKI 
    ------- ------- 
    PUMPKIN PUMPKIN 

或者,您可以在運行SQL之前設置它。


    SQL> VARIABLE new_var VARCHAR2(20); 
    SQL> EXECUTE :new_var := 'PUMPKIN PIE'; 

    PL/SQL procedure successfully completed. 

    SQL> SELECT :new_var, :new_var FROM DUAL; 

    :NEW_VAR       :NEW_VAR 
    -------------------------------- -------------------------------- 
    PUMPKIN PIE      PUMPKIN PIE 
3

是的,取決於你想怎麼做。

你可以使用匿名程序IE:

BEGIN 

    v_date DATE := TO_DATE(your_date, your_date_mask); 

    [your query referencing v_date where ever you need]; 

END; 

或者,如果你運行在sqlplus查詢,您使用&注意變量(IE:& your_date),並會提示輸入值,當您運行腳本。

3

由於OMG Ponies說,在PL/SQL中,只要是靜態SQL,您就可以在SQL中直接引用任何PL/SQL變量(包括參數)。在PL/SQL之外,或者如果您的SQL是動態的(因爲本機動態SQL不支持至少從10g開始的可重用命名參數),您可以使用以下技巧。添加WHERE子句之前,按照您的查詢:

CROSS JOIN (SELECT :dateparam Mydate FROM dual) Dateview 

而且無處不在,你想引用該值在主查詢,調用它Dateview.Mydate然後,當你執行查詢,你只需要通過在一個綁定參數。

0

如果使用蟾蜍與第二鼠標鍵 - >執行作爲腳本,所以不提示輸入值:

變種myVar的VARCHAR2(20);

exec:req:='x';

從MYTable中刪除where Field = :myVar;