1

車で行われた最新の予約を見つけるために、車の登録を受け入れるパラメーターを指定して明示的なカーソルを使用する必要があります。MAX機能が使えません。最新の日付を見つけるには、関連するすべての日付を比較する必要があります。

これが私が今まで持っているものです」

Declare
  v_rec_date DATE; 
    Cursor date_cur (v_reg VARCHAR2) IS 
    SELECT * FROM i_booking
    WHERE registration = v_reg;
    v_date date_cur%ROWTYPE;
  Begin
   FOR v_date IN date_cur LOOP 
     DBMS_OUTPUT.PUT_LINE('Recent Rental Date:'|| ' '||v_rec_date); 
   END LOOP;
  End;

しかし、これは私にエラーを与えています:

FOR v_date IN date_cur LOOP
              *
ERROR at line 8: 
ORA-06550: line 8, column 15: 
PLS-00306: wrong number or types of arguments in call to 'DATE_CUR' 
ORA-06550: line 8, column 1: 
PL/SQL: Statement ignored 

ここでどこが間違っていますか?

4

1 に答える 1

1

パラメータ化されたカーソルを作成しましたが、パラメータを渡していません。

この行が実行されると: FOR v_date IN date_cur LOOP

v_reg の値を渡す必要があるのは、それがカーソルの設計方法だからです。

例については、こちらの Oracle ドキュメントを参照してください。

具体的には、「例 6-20 明示的なカーソルの FOR LOOP ステートメントにパラメーターを渡す」というタイトルのリンクのセクションを見てください。

ここにあるようにカーソルを宣言するとき: Cursor date_cur (v_reg VARCHAR2)このカーソルを開くと、v_reg として参照されるパラメーターをカーソルに渡し、v_reg は VARCHAR2 型になると言っています。

ここでカーソルを使用しようとすると: FOR v_date IN date_cur LOOP 基本的に、「カーソル date_cur を開いたときにパラメーターを含めることを約束しましたが、私に与えなかった」というエラーが表示されます。

これはあなたが持っていたものですが、パラメータがカーソルに渡されています。

   Declare
  v_rec_date DATE; 
    Cursor date_cur (v_reg VARCHAR2) IS 
    SELECT * FROM i_booking
    WHERE registration = v_reg;
    v_date date_cur%ROWTYPE;
  Begin
   FOR v_date IN date_cur("SOME VALUE HERE") LOOP 
     DBMS_OUTPUT.PUT_LINE('Recent Rental Date:'|| ' '||v_rec_date); 
   END LOOP;
  End;
于 2013-10-17T02:56:00.183 に答える