2

PL/SQL プロシージャの宣言内に if ステートメントを含める方法があるかどうか疑問に思っています。例えば:

procedure testing (no IN NUMBER, name IN VARCHAR2) IS
    if no = 0 then 
      cursor c is 
          select * from table where name = name;
    else 
      cursor c is
          select * from table where name = name;
    end if;
BEGIN 
   --work with cursor c
END testing;

これは多かれ少なかれそれの意図です。

4

2 に答える 2

1

いいえ、宣言部分でのみ変数の宣言と初期化を行うことができます。

カーソル変数(REF CURSORタイプ)を使用して、実行可能ブロックからカーソルを開くことができます。

procedure testing (no IN NUMBER, name IN VARCHAR2) IS
    TYPE YOUR_CURSOR_TYPE IS REF CURSOR;
    c YOUR_CURSOR_TYPE;
BEGIN 
   --work with cursor c
   if no = 0 then 
      OPEN c FOR 
          select * from table where name = name;
    else 
      open c FOR
          select * from table where name = name;
    end if;

    ... do something with c 
END testing;

句の列に応じてselect、強い型のカーソル変数と弱い型のカーソル変数のどちらを使用するかを決定する必要があります。

カーソル変数

于 2012-08-27T14:12:34.740 に答える
0

申し訳ありませんが、質問を正しく読んでいません。BEGIN の前に IF を実行することはできません。

C が ref カーソルの場合、select * from table または select name from table のいずれかで開くことができますが、どちらの場合もフィールドリストを扱う可能性があるため、その意図は十分に明確ではありません。

Oracle の例: http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqloperations.htm#BABFEJED

于 2012-08-27T12:37:09.310 に答える