将值从过程传递到选择语句

时间:2011-04-07 18:28:05

标签: oracle parameters plsql procedure

我想创建一个从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;

3 个答案:

答案 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;