在一个函数中我需要声明一个cursor,然后把select的内容存放到这个cursor中,最后把这个cursor传递给另一个函数,在另一个函数中去打开cursor并取出数据,请问能实现吗??可以的话希望高手给出能用的代码.THX.

解决方案 »

  1.   

    CREATE OR REPLACE FUNCTION fLl_02 RETURN sys_refcursor IS
     p_cursor  sys_refcursor;
    BEGIN
       OPEN p_cursor FOR
             SELECT * FROM B_AREAS;
       RETURN p_cursor;
    END fLl_02;
    CREATE OR REPLACE FUNCTION fLl_03(p_cursor  sys_refcursor) RETURN VARCHAR2
     IS
    v_row B_AREAS%ROWTYPE;
    v_str VARCHAR2(200);
    BEGIN
       
    LOOP
    FETCH p_cursor INTO v_row;
    EXIT WHEN p_cursor %NOTFOUND;
    --DBMS_OUTPUT.PUT_LINE(v_row.area_id);
    v_str:=v_str||v_row.area_id;
    END LOOP;
    RETURN v_str;
    END fLl_03
      

  2.   

    --调用例子DECLARE 
      RetVal VARCHAR2(200);
      P_CURSOR sys_refcursor;BEGIN 
      -- P_CURSOR := NULL;  Modify the code to initialize this parameter  RetVal := FLL_03 ( FLL_02 );
      DBMS_OUTPUT.PUT_LINE(RetVal);
      COMMIT; 
    END; 
      

  3.   

    lz测试时要相应的修改
    OPEN p_cursor FOR
             SELECT * FROM B_AREAS;  --改为你系统中的表名
    v_row B_AREAS%ROWTYPE;   --改为你系统中的表名
    v_str:=v_str||v_row.area_id; --改为你系统中的字段名
      

  4.   

    非常感谢你,请问不用pl/sql只用sql可不可以??
      

  5.   

    SELECT FLL_03(FLL_02) FROM dual  
    --测试了一下,如果直接这样用,报FLL_03中游标错误