1

我修改了过程以使其更小,但我真的只想运行一次选择查询。这将降低运行程序的成本。如何在不运行两次查询的情况下获得prevContectIDand 。nextContentID这是替换以前的过程,所以我不想更改INOUT所以我不必找到它被调用的每个地方。

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。对于您的方法,当 myTable 中不存在时,您需要进行适当的异常处理,theContentID因为这会给您带来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 回答