我正在编写一个函数,它最终将使用几个可能的游标之一,为简单起见,我将在这里使用两个。在函数体中,我希望能够使用单个变量来描述使用哪个光标。我是否对此使用了参考光标?
在下面的示例中,我希望FOR LOOP使用C1或C2,具体取决于myChar的值。因此,我不想在整个FOR LOOP周围放置IF(或CASE语句),而是希望将当前C1作为变量。这可行吗?
创建或替换功能MY_FUNCTION(myChar IN CHAR)返回INTEGER AS
CURSOR C1 IS 选择FIRST_NAME 来自员工;
CURSO C2 IS 选择LAST_NAMES 来自员工;
BEGIN
FOR X IN C1 LOOP - 做东西 结束循环; 返回1;
结束MY_FUNCION;
答案 0 :(得分:2)
是的,我没有对此进行测试,但可能会有效:
CREATE OR REPLACE FUNCTION MY_FUNCTION (myChar IN CHAR) RETURN INTEGER AS
type r_cursor is REF CURSOR;
c1 r_cursor;
begin
IF myChar = "1" THEN
open c1 for SELECT FIRST_NAME FROM EMPLOYEES;
ELSE
open c1 for SELECT LAST_NAMES FROM EMPLOYEES;
END IF;
loop
fetch c1 into c1recs;
-- DO STUFF
exit when c1%notfound;
end loop;
close c1;
RETURN 1;
end;