我的一个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
提前致谢..
答案 0 :(得分:1)
确实没有必要使用记录ADT。你可以只有一个项目
声明msg_tab
类型如下:
type msg_tab is table of xx_fs_mob_log.message_text%type;
在这种特殊情况下也无需使用光标。
话虽如此,您的包装可能如下所示:
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;