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 關注
- 146 瀏覽
添加回答
舉報
0/150
提交
取消