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然后再试试。
- 2 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消