为了账号安全,请及时绑定邮箱和手机立即绑定

如图,在判断并给游标赋值的时候报错了?为什么

如图,在判断并给游标赋值的时候报错了?为什么

墨色风雨 2022-10-20 15:15:39
CREATE OR REPLACE FUNCTION F1(i_UnitId VARCHAR,i_CityId VARCHAR)RETURN VARCHAR2 AS v_SendFlag VARCHAR2(2); -- 发送结果标识 ERR_INPUT_PARA EXCEPTION; -- 输入参数异常 TYPE v_TagCursor IS REF CURSOR; -- 查询结果集BEGIN v_SendFlag := '0'; IF i_CityId IS NULL THEN -- 如果城市为空 v_TagCursor IS (SELECT A.TAGID FROM T1 A WHERE A.TIME BETWEEN SYSDATE AND SYSDATE - 1 AND A.UNITID = i_UnitId); ELSE -- 城市非空 v_TagCursor IS (SELECT A.TAGID FROM T1 AWHERE A.TIME BETWEEN SYSDATE AND SYSDATE - 1 AND A.UNITID = i_UnitIdAND A.CITYID = i_CityId); END IF; IF v_TagCursor IS NULL THEN v_SendFlag := '0';ELSE v_SendFlag := '1';END IF; RETURN v_SendFlag;EXCEPTION WHEN ERR_INPUT_PARA THEN RETURN '1'; WHEN OTHERS THEN RETURN '1';END F1;‍
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

首先你要明白TYPE v_TagCursor IS REF CURSOR; 这句话的意思。定义了一个v_TagCursor动态游标变量类型。
动态游标:
语法:Type REF游标名 IS Ref Cursor;
弱类型REF游标:不指定return type,能和任何类型的CURSOR变量匹配,用于获取任何结果集。
用法如:
例子:弱类型REF游标 /*conn scott/tiger*/
Declare
Type MyRefCur IS Ref Cursor;
vRefCur MyRefCur;
vtemp vRefCur%RowType;
Begin Case(&n)
When 1 Then Open vRefCur For Select * from emp;
When 2 Then Open vRefCur For Select * from dept; Else
Open vRefCur For Select eno, ename from emp Where JOB = 'CLERK';
End Case;
Close vRefCur;
End;
你自己定义一下存储过程中的v_TagCursor然后再试试。


查看完整回答
反对 回复 2022-10-24
?
holdtom

TA贡献1805条经验 获得超10个赞

给函数名插入数据之后要给一个变量赋值,然后创建游标,不然你后面的游标哪来的?

查看完整回答
反对 回复 2022-10-24
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信