Plsql 打开、取出、放入多个变量
我试图在不使用循环的情况下从游标中获取2个变量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
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))。是的,谢谢,这很好,但是我真的很想使用光标。我将在这段代码中添加更多内容,我希望通过使用游标将其分解成若干部分。如果查询返回多条记录或根本不返回记录,您可以添加一种捕获异常的方法吗。。。顺便说一句如果你没有数据,你无论如何都会有问题。如果你有多个记录限制,我是你的朋友。谢谢,这是我想要的答案。