2014-10-08 62 views
0

是否有可能打开游标的IF语句块中,像这样:甲骨文:打开内不同的相同光标IF语句

PROCEDURE CURSORIFSTATEMENT (param IN INT, iocursor IN OUT t_cursor) 
IS 
    v_cursor t_cursor; 
BEGIN 
    IF param = 1 THEN 
    OPEN v_cursor FOR 

    SELECT a.field 
    FROM table1 a 
    INNER JOIN table2 b ON b.fieldid = a fieldid; 

    io_cursor := v_cursor; 
    CLOSE v_cursor; 
    ELSIF param = 2 THEN 
    OPEN v_cursor FOR 

    SELECT a.field, c.field 
    FROM table1 a 
    INNER JOIN table2 b ON b.fieldid = a.fieldid 
    INNER JOIN table3 c ON c.fieldid = a.fieldid; 

    io_cursor := v_cursor; 
    CLOSE v_cursor; 
    END IF; 
END CURSORIFSTATEMENT; 

所以基本上,我们的目标将取决于哪个IF填补光标声明是真实的。

+4

是的,但只有当它是'REFCURSOR' .. – 2014-10-08 17:00:13

+2

'io_cursor:= v_cursor;关闭v_cursor;'也许这是一个愚蠢的问题,但你关闭你将返回的光标? – 2014-10-08 17:11:29

+0

+1 @MaheswaranRavisankar。只需声明一个'REF CURSOR'并在'IF-ELSE'构造中使用它。检查我的答案。 – 2014-10-08 17:46:05

回答

1

我没有看到您的要求和您的尝试任何问题。因为,IF-ELSE条件没有光标,但是允许在PL/SQL,使用REF CURSOR你可以这样做:

DECLARE 
    CUR REF CURSOR ; 
    BEGIN 
     IF (so and so) THEN 
     OPEN CUR IS 'SELECT * FROM table_1'; 
     ELSE (so and so) 
     OPEN CUR IS 'SELECT * FORM table_2'; 
    END IF ; 
END;