我有一個相當複雜的查詢,它將多次引用單個日期作爲開始或停止日期。我將不得不在3個不同會計年度運行此查詢,並且不希望爲了在查詢中更改它而不得不追查17次日期。帶變量的PL/SQL查詢
有沒有辦法在我的查詢開始處設置一個變量並將其引用到整個過程?我不想寫一個完整的函數,只是在我的查詢中引用一個變量。
我有一個相當複雜的查詢,它將多次引用單個日期作爲開始或停止日期。我將不得不在3個不同會計年度運行此查詢,並且不希望爲了在查詢中更改它而不得不追查17次日期。帶變量的PL/SQL查詢
有沒有辦法在我的查詢開始處設置一個變量並將其引用到整個過程?我不想寫一個完整的函數,只是在我的查詢中引用一個變量。
你不是真的說你如何引用這個,所以我只是從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
是的,取決於你想怎麼做。
你可以使用匿名程序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),並會提示輸入值,當您運行腳本。
由於OMG Ponies說,在PL/SQL中,只要是靜態SQL,您就可以在SQL中直接引用任何PL/SQL變量(包括參數)。在PL/SQL之外,或者如果您的SQL是動態的(因爲本機動態SQL不支持至少從10g開始的可重用命名參數),您可以使用以下技巧。添加WHERE子句之前,按照您的查詢:
CROSS JOIN (SELECT :dateparam Mydate FROM dual) Dateview
而且無處不在,你想引用該值在主查詢,調用它Dateview.Mydate
然後,當你執行查詢,你只需要通過在一個綁定參數。
如果使用蟾蜍與第二鼠標鍵 - >執行作爲腳本,所以不提示輸入值:
變種myVar的VARCHAR2(20);
exec:req:='x';
從MYTable中刪除where Field = :myVar;