2011-04-07 88 views
2

我想創建一個過程,它從employee表中返回MAX日期,然後允許我在select語句中再次調用max日期。將過程的值傳遞給Select語句

謝謝。

備註:我將在許多select語句中使用max_date_PARAM進行報告。

CREATE OR REPLACE PROCEDURE max_date_proc (max_date_PARAM out DATE) 
IS 
BEGIN 
    SELECT max(start_date) INTO max_date_PARAM 
    FROM employee 
    END max_date_proc; 
/
select * from benefits where claim > = max_date_PARAM; 
+0

數據庫是Oracle – Lynn 2011-04-07 18:32:08

+0

怎麼樣SELECT * FROM益處,其中根據權利要求> =(從選擇最大僱員(起始));哦,等等,賈斯汀把我打到了一拳;) – tbone 2011-04-07 19:27:26

回答

3

您應該使用函數而不是過程。 http://psoug.org/reference/functions.html

+0

謝謝,如果我用功能代替程序。我如何告訴Oracle保存該值,然後將其傳遞給SQL語句。泰克斯爲您的建議。 – Lynn 2011-04-07 19:01:51

4

如果你創建了一個功能

CREATE OR REPLACE FUNCTION get_max_start_date 
    RETURN DATE 
IS 
    l_max_date DATE; 
BEGIN 
    SELECT MAX(start_date) 
    INTO l_max_date 
    FROM employee; 
    RETURN l_max_date; 
END get_max_start_date; 

然後,你可以查詢

SELECT * 
    FROM benefits 
WHERE claim >= get_max_start_date(); 

當然,你可以做到這一點沒有一個功能以及

SELECT * 
    FROM benefits 
WHERE claim >= (SELECT MAX(start_date) 
        FROM employee) 
+1

兩者都很好!謝謝。我最初被告知要與我一起工作的人創建一個程序。感謝您指點我正確的方向! – Lynn 2011-04-07 19:45:54

1

如果」在SQL * Plus中重新運行您的語句(或SQL Developer,我認爲,不確定其他人)您可以使用綁定變量:

variable l_max_date date; 
exec max_date_proc(:l_max_date); 
select * from benefits where claim >= :l_max_date; 

相同的功能,這裏更適合;使用賈斯汀:

variable l_max_date date; 
exec :l_max_date := get_max_start_date(); 
select * from benefits where claim >= :l_max_date; 

當然,沒有太多的點,如果你只使用了一次,結果使這個函數或過程,但我假設你想重複使用相同的值多次,不要每次重新計算它。

又一選項,使用SQL * Plus' column handling定義一個變量:

column max_date new_value l_max_date noprint; 
select max(start_date) max_date from employee; 
select * from benefits where claim >= &l_max_date; 
相關問題