2

従業員テーブルから最大日付を返し、選択ステートメントで最大日付を再度呼び出すことができるプロシージャを作成したいと思います。

ありがとうございました。

:max_date_PARAMレポートには多くの select ステートメントを使用します。

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

関数を作成した場合

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)
于 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;

もちろん、結果を 1 回しか使用しない場合は、これを関数またはプロシージャにする意味はあまりありませんが、同じ値を複数回再利用し、毎回再計算したくないと想定しています。

さらに別のオプションとして、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 に答える