Oracle 返回结果集

PROCEDURE Get_Remain_Info(
   remain_cursor_ OUT sys_refcursor )
IS
BEGIN
   OPEN remain_cursor_ FOR select month,maintain_id,count(1) from C_REMNANT_WO_NO_TAB group by month,maintain_id order by month,maintain_id;
END Get_Remain_Info;

  

在PL/SQL运行后,点击

 可以查看结果集。未解决问题:游标关闭。据说在java调用的时候,可以关闭,未做验证。

--------------------------------------------------------------------------------------------------------------------------------

转载:https://www.cnblogs.com/JourneyOfFlower/p/10876575.html

--Oracle使用游标查询结果集所有数据

DECLARE 
      myTabelName NVARCHAR2(200):=''; --表名
      myTableRowComment NVARCHAR2(200):=''; --行内容
      result VARCHAR2(2000):=''; --结果
      CURSOR myCursor IS SELECT * FROM 结果集(表名/视图名/查询结果) ORDER BY (结果集中的列名);--定义游标  
      myRecord myCursor%ROWTYPE;  --定义游标记录类型   
BEGIN   
    OPEN myCursor;  --打开游标   
    IF myCursor %ISOPEN  THEN  --判断打开成功
       ---------------------游标打开成功 BEGIN   
       LOOP --循环获取记录集  BEGIN 
           
            FETCH myCursor into myRecord;
            
            IF myCursor%FOUND THEN  --游标的FOUND属性判断是否有记录  
               BEGIN  
                    myTabelName:='TEC_PARTTEC';
                    myTableRowComment:=myRecord.ID||'    '||myRecord.CREATEDATE||'    '                       ||myRecord.CREATEUSER||'    '||myRecord.ORGANIZATIONID||'    '                        ||myRecord.PARTID||'    '||myRecord.PROCESSTYPE||'    '                         ||myRecord.VERSION||'    '||myRecord.REMARK||'    '                       ||myRecord.STATE;    
                    
                    result:='表名    '||myTabelName||'    列值    '||myTableRowComment;
                    
                    result:=myTabelName||'    '||myTableRowComment;
                    
                    DBMS_OUTPUT.PUT_LINE(result);     
    
               END;
            ELSE
               EXIT; --游标中的记录为空 退出
            END IF; --结束IF语句
               
       END LOOP; --循环获取记录集  END  
    ELSE     
        DBMS_OUTPUT.PUT_LINE('游标没有打开');   
    END IF; 


CLOSE myCursor;
END;

 --------------------------------------------------------------

改成下面的方法了:

包头:

CREATE OR REPLACE TYPE OrderRowType AS OBJECT (columns1 VARCHAR2(10),columns2 VARCHAR2(20),columns3 VARCHAR2(100),columns4 VARCHAR2(5),
columns5 NUMBER,columns6 NUMBER );
CREATE OR REPLACE TYPE OrderTableType AS TABLE OF OrderRowType;

FUNCTION Get_Test RETURN OrderTable1 pipelined;

包体:

FUNCTION Get_Test RETURN OrderTableType pipelined
IS
   rowInfo_ OrderRowType;
   CURSOR get_info IS
      SELECT * FROM tableA ;

BEGIN FOR rec_data_ IN get_info LOOP rowInfo_ := OrderRowType(rec_data_.columns1,rec_data_.columns2,rec_data_.columns3,rec_data_.columns4,rec_data_.columns5,rec_data_.columns6); pipe ROW(rowInfo_); END LOOP; RETURN; END Get_Test;
原文地址:https://www.cnblogs.com/sunice/p/13850499.html