oracle 游标遍历问题
CREATEORREPLACEPROCEDUREP1(i_PhoneINVARCHAR2,--号码i_CodeINVARCHAR2,--编码i_CityIdINVARCH...
CREATE OR REPLACE PROCEDURE P1( i_Phone IN VARCHAR2, --号码 i_Code IN VARCHAR2, --编码 i_CityId IN VARCHAR2, --地市编号 o_Code OUT NUMBER, --1 成功 0 失败 o_Message OUT VARCHAR2 --返回发送短信内容) IS v_Code NUMBER(2); --1 成功 0 失败 v_Message VARCHAR2(2000); --异常描述 v_Result SYS_REFCURSOR; --返回一个数据列表 TYPE rec IS RECORD(UNITID VARCHAR2, ELEMENTID VARCHAR2, UNITNAME VARCHAR2, UNITCODE VARCHAR2, RUNTYPE VARCHAR2, CITYID VARCHAR2, BEANID VARCHAR2, DYNPARAMS VARCHAR2, PARAM01 VARCHAR2, PARAM02 VARCHAR2, PARAM03 VARCHAR2, PARAM04 VARCHAR2, PARAM05 VARCHAR2, PARAM06 VARCHAR2, PARAM07 VARCHAR2, PARAM08 VARCHAR2, PARAM09 VARCHAR2, PARAM10 VARCHAR2, TAGID VARCHAR2, TAGNAME VARCHAR2, GROUPID VARCHAR2, GROUPNAME VARCHAR2); RESULTROW rec; (提示39) BEGIN P2(i_Phone,i_Code,i_CityId,v_Code,v_Message,v_Result); IF v_Code <> 1 THEN o_Code := 0; o_Message:= v_Message; END IF; IF v_Result%ISOPEN THEN CLOSE v_Result; END IF; --遍历 OPEN v_Result; LOOP FETCH v_Result INTO rec; EXIT WHEN v_Result%NOTFOUND; SELECT T.VALUE (提示60) FROM T1 T WHERE T.ID = rec.UNITID AND T.ISVALID = '1' END LOOP; (提示64) CLOSE v_Result; END P1; (提示65)
图片中的问题该怎么改呢? 展开
图片中的问题该怎么改呢? 展开
1个回答
展开全部
应该是存储过程里有异常没处理
在END P1;的前面加上这一句
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE exception_name;
END P1;
在END P1;的前面加上这一句
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE exception_name;
END P1;
更多追问追答
追问
加了之后还是同样的异常
追答
1. EXIT WHEN v_Result%NOTFOUND;
SELECT T.VALUE (提示60)
FROM T1 T
WHERE T.ID = rec.UNITID
AND T.ISVALID = '1';--这里语句没结束,加个分号
END LOOP; (提示64)
2. -- RESULTROW rec; (提示39) --把这一行注释掉,没意义
3. TYPE rec IS RECORD(UNITID VARCHAR2(50), -- 给每个类型定义后边加个长度
ELEMENTID VARCHAR2(50),
UNITNAME VARCHAR2(50),
UNITCODE VARCHAR2(50),
RUNTYPE VARCHAR2(50),
CITYID VARCHAR2(50),
BEANID VARCHAR2(50),
DYNPARAMS VARCHAR2(50),
PARAM01 VARCHAR2(50),
PARAM02 VARCHAR2(50),
PARAM03 VARCHAR2(50),
PARAM04 VARCHAR2(50),
PARAM05 VARCHAR2(50),
PARAM06 VARCHAR2(50),
PARAM07 VARCHAR2(50),
PARAM08 VARCHAR2(50),
PARAM09 VARCHAR2(50),
PARAM10 VARCHAR2(50),
TAGID VARCHAR2(50),
TAGNAME VARCHAR2(50),
GROUPID VARCHAR2(50),
GROUPNAME VARCHAR2(50));
4. 剩下的就是你数据库中是否存在名为P2的函数或存储过程,名称为T1的表了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询