1

プロシージャを変更して小さくしましたが、実際にはselectクエリを1回だけ実行したいと思います。これにより、手順の実行コストが削減されます。クエリを2回実行せずにprevContectIDとを取得するにはどうすればよいですか。nextContentIDこれは前の手順を置き換えるため、を変更したくないINのでOUT、呼び出されているすべての場所を見つける必要はありません。

procedure getSeq(theContentID IN table.contentID%type,
                 prevContentID OUT table.contentID%type, 
                 nextContentID OUT table.contentID%type)
BEGIN

  SELECT myPrev into prevContentID, myNext into nextContentID
    from myTable
   where contentID=theContentID;
  RETURN;
END getSeq;
4

2 に答える 2

5

示されているプロシージャは、おそらくコンパイルされません。複数の変数を使用する SELECT ... INTO の正しい構文は次のとおりです。

SELECT myPrev, myNext INTO prevContentID, nextContentID
from myTable
where contentID = theContentID;
于 2012-12-31T14:55:45.977 に答える
1

カーソルを使用して から値を取得することもできますmyTable。あなたのアプローチでは、例外が発生theContentIDするため、 myTable に存在しない場合、適切な例外処理を行う必要がありNO_DATA_FOUNDます。

PROCEDURE getSeq (theContentID    IN     table.contentID%TYPE,
                  prevContentID      OUT table.contentID%TYPE,
                  nextContentID      OUT table.contentID%TYPE)
IS
   CURSOR getcontentID_cur
   IS
      SELECT myPrev, myNext
        FROM myTable
       WHERE contentID = theContentID;
BEGIN
   OPEN getcontentID_cur;

   FETCH getcontentID_cur
   INTO prevContentID, nextContentID;

   CLOSE getcontentID_cur;
END getSeq;
于 2012-12-31T14:55:57.253 に答える