2012-04-16 85 views
0

我有一个过程需要一个SYS_REFCURSOR并将其转换为JSON。PL/SQL静态游标变量作为参考游标

在一个调用上述过程中,我试图定义一个CURSOR,并将其作为REF CURSOR来提供。

我收到PLS-00361。

我明白我可以使用OPEN FOR构造,但是我需要在其他地方使用我的光标并且不喜欢重复。

有什么建议吗?

PROCEDURE LIST_EMPLOYEES 
    AS 

    l_ref_cursor SYS_REFCURSOR; 

    CURSOR c_emps 
    IS 
    SELECT email_address 
     FROM employees; 

    BEGIN 

    OPEN c_emps; 
    FETCH c_emps INTO l_ref_cursor; 

    json_utils.refcursor_to_json_via_http(l_ref_cursor, 
              'employees'); 

    CLOSE l_ref_cursor; 

    EXCEPTION 
    WHEN others 
    THEN 
    log_error; 
    END LIST_EMPLOYEES; 

Regards, Laurence。

回答

0

你不会取光标移动到REF CURSOR,你只需打开它:

PROCEDURE LIST_EMPLOYEES AS 

    l_ref_cursor SYS_REFCURSOR; 

BEGIN 

    OPEN l_ref_cursor FOR SELECT email_address FROM employees; 

    json_utils.refcursor_to_json_via_http(l_ref_cursor, 'employees'); 

    CLOSE l_ref_cursor; 

END LIST_EMPLOYEES; 
+0

感谢文森特,我知道我能做到这一点,但如果我想这个多次做什么?我将不得不一遍又一遍地重复我的光标。 – retrodev 2012-04-16 14:34:40

+0

如果您不止一次需要此游标,请创建一个返回SYS_REFCURSOR并调用该函数的函数:'json.refcursor_to_json_via_http(my_function,'employees');' – 2012-04-16 14:42:42