1

我的 pl/sql 包之一。我需要打印记录集中的特定字段。

CREATE OR REPLACE PACKAGE logDetailsPack AS
   TYPE MSG_TXT IS RECORD(LOC_MSG XX_FS_MOB_LOG.MESSAGE_TEXT%TYPE);
   TYPE MSG_TAB IS TABLE OF MSG_TXT;
   C_MSG MSG_TAB;
   PROCEDURE getLog;
END logDetailsPack; 

我的包裹体是

CREATE OR REPLACE PACKAGE BODY logDetailsPack AS
  PROCEDURE getLog IS
  CURSOR C1 IS SELECT MESSAGE_TEXT FROM XX_FS_MOB_LOG;
  BEGIN
    OPEN C1;
    FETCH C1 BULK COLLECT INTO C_MSG; 
    FOR COUNTER IN 1..500 LOOP
      dbms_output.put_line('Message : '|| C_MSG.LOC_MSG(COUNTER));
    END LOOP;
  END getLog;
END  logDetailsPack;

C_MSG是我的记录集的名称,是记录集中LOC_MSG的字段。我如何循环并打印LOC_MSG

提前致谢..

4

1 回答 1

1
  1. 真的没有必要使用记录 ADT。您只有一项,您可以声明msg_tab类型如下:

    type msg_tab is table of xx_fs_mob_log.message_text%type;
    
  2. 在这种特殊情况下也不需要使用游标。

话虽如此,您的包裹可能如下所示:

create or replace package logdetailspack as
  type msg_tab is table of xx_fs_mob_log.message_text%type;
  c_msg msg_tab;
  procedure getlog;
end logdetailspack;

create or replace package body logdetailspack as
   procedure getlog is
   begin
     select message_text 
       bulk collect into c_msg
       from xx_fs_mob_log;
     for counter c_msg.first..c_msg.last
     loop
       dbms_output.put_line('message : '|| c_msg(counter));
     end loop;
   exception
     when no_data_found
     then dbms_output('Select returns no rows') 
   end getlog;
 end  logdetailspack;
于 2013-09-18T07:17:30.223 回答