2

我想创建一个从员工表中返回 MAX Date 的过程,然后允许我在 select 语句中再次调用 max date。

谢谢你。

注意:我将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;
4

3 回答 3

4

If you created a function

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;

Then you could query

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

Of course, you could do this without a function as well

SELECT * 
  FROM benefits
 WHERE claim >= (SELECT MAX(start_date)
                   FROM employee)
于 2011-04-07T19:17:00.097 回答
3

您应该使用函数而不是过程。http://psoug.org/reference/functions.html

于 2011-04-07T18:54:40.263 回答
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 max_date new_value l_max_date noprint;
select max(start_date) max_date from employee;
select * from benefits where claim >= &l_max_date;
于 2011-04-07T19:50:37.160 回答