2009-02-18 57 views
0

我正在写一个函数,它最终会使用几个可能的游标之一,为了简单起见,我将在这里使用两个。在函数的主体中,我希望能够使用单个变量来描述使用哪个游标。我是否为这个或其他东西使用了一个参考光标?我应该在这里使用参考光标吗?

在下面的示例中,我希望FOR LOOP根据myChar的值使用C1或C2。因此,我不想在整个FOR LOOP中放置一个IF(或CASE语句),而想将当前C1变成一个变量。这是可行的吗?

CREATE OR REPLACE FUNCTION创建my_function(myChar IN CHAR)RETURN INTEGER AS

光标C1 IS SELECT FIRST_NAME FROM EMPLOYEES;

CURSO C2 IS SELECT LAST_NAMES FROM EMPLOYEES;

BEGIN

FOR X IN C1 LOOP - DO STUFF END LOOP; RETURN 1;

END MY_FUNCION;

回答

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; 
+0

有道理。我明天会试试。谢谢。 – user39653 2009-02-19 20:49:01