我想创建一个从employee表返回MAX Date的过程,然后允许我在select语句中再次调用max date。
谢谢。
注意:我将在许多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 :(得分: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 :(得分:3)
您应该使用函数而不是过程。 http://psoug.org/reference/functions.html
答案 2 :(得分: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;
当然,如果您只使用一次结果,那么将这个函数或过程作为一个函数或过程并没有什么意义,但我假设您希望多次重复使用相同的值,而不是每次重新计算它。 / p>
另一种选择,使用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;