Plsql 打开、取出、放入多个变量

Plsql 打开、取出、放入多个变量,plsql,Plsql,我试图在不使用循环的情况下从游标中获取2个变量 CREATE OR REPLACE PROCEDURE NAK.SET_ORDERS(P_ORDER_ID NAK.ORDER_ID%TYPE) CURSOR C_GET_ORDER_NO IS SELECT O.ORDER_ID, O.ORDER_MAL FROM NAK.ORDERS O WHERE O.ORDER_ID = P_ORDER_ID; BEGIN V_ORDER_SEQ := NULL; V_ORDER_MAL

我试图在不使用循环的情况下从游标中获取2个变量

CREATE OR REPLACE PROCEDURE NAK.SET_ORDERS(P_ORDER_ID NAK.ORDER_ID%TYPE)

CURSOR C_GET_ORDER_NO IS
  SELECT O.ORDER_ID, O.ORDER_MAL FROM NAK.ORDERS O WHERE O.ORDER_ID = P_ORDER_ID;

BEGIN

  V_ORDER_SEQ := NULL;
  V_ORDER_MAL := NULL;

  OPEN C_GET_ORDER_NO;
  FETCH C_GET_ORDER_NO VALUES(O.ORDER_ID, O.ORDER_MAL)
    INTO (V_ORDER_ID, V_ORDER_MAL);
  CLOSE C_GET_ORDER_NO;

END;

您真的需要显式游标吗?您可以简单地执行以下操作:

    CREATE OR REPLACE PROCEDURE NAK.SET_ORDERS(P_ORDER_ID IN NAK.ORDER_ID%TYPE)

      V_ORDER_SEQ := NULL;
      V_ORDER_MAL := NULL;

    BEGIN

      SELECT O.ORDER_ID, 
             O.ORDER_MAL 
        INTO V_ORDER_SEQ,
             V_ORDER_MAL  
        FROM NAK.ORDERS O 
       WHERE O.ORDER_ID = P_ORDER_ID;

   EXCEPTION
       WHEN NO_DATA_FOUND THEN
            dbms_output.put_line("No record found");
       WHEN TOO_MANY_ROWS THEN
            dbms_output.put_line("More than one record found");
       WHEN OTHER THEN
            dbms_output.put_line("Other problem happend");
    END;
重要信息:如果查询没有准确返回一条记录,此过程将返回异常。(ORA-01403:未找到数据或ORA-00913:值过多)

或者,您应该能够制作如下内容:

CREATE OR REPLACE PROCEDURE NAK.SET_ORDERS(P_ORDER_ID NAK.ORDER_ID%TYPE)

CURSOR C_GET_ORDER_NO IS
  SELECT O.ORDER_ID, 
         O.ORDER_MAL 
    FROM NAK.ORDERS O 
   WHERE O.ORDER_ID = P_ORDER_ID;

BEGIN
  V_ORDER_SEQ := NULL;
  V_ORDER_MAL := NULL;

  OPEN C_GET_ORDER_NO;
  FETCH C_GET_ORDER_NO INTO V_ORDER_ID, V_ORDER_MAL;
  CLOSE C_GET_ORDER_NO;

END;

更具体地说:你知道如何得到2个变量吗?我在网上找到的原始代码只有一个变量(v_order_id),我试图再添加一个变量(v_order_mal))。是的,谢谢,这很好,但是我真的很想使用光标。我将在这段代码中添加更多内容,我希望通过使用游标将其分解成若干部分。如果查询返回多条记录或根本不返回记录,您可以添加一种捕获异常的方法吗。。。顺便说一句如果你没有数据,你无论如何都会有问题。如果你有多个记录限制,我是你的朋友。谢谢,这是我想要的答案。