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

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 A
WHERE A.TIME BETWEEN SYSDATE AND SYSDATE - 1 AND A.UNITID = i_UnitId
AND 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;‍



墨色风雨
浏览 105回答 2
2回答

BIG阳

首先你要明白TYPE v_TagCursor IS REF CURSOR; 这句话的意思。定义了一个v_TagCursor动态游标变量类型。动态游标:语法:Type REF游标名 IS Ref Cursor;弱类型REF游标:不指定return type,能和任何类型的CURSOR变量匹配,用于获取任何结果集。用法如:例子:弱类型REF游标 /*conn scott/tiger*/DeclareType 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; ElseOpen vRefCur For Select eno, ename from emp Where JOB = 'CLERK';End Case;Close vRefCur;End;你自己定义一下存储过程中的v_TagCursor然后再试试。

holdtom

给函数名插入数据之后要给一个变量赋值,然后创建游标,不然你后面的游标哪来的?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Oracle