请假设你有一个如此定义的Oracle TYPE:
TYPE rec_customized
IS
RECORD (
SECRET_CODE VARCHAR2 (16),
PUBLIC_CODE VARCHAR2 (6),
COMMON VARCHAR2 (40),
EMAIL VARCHAR2 (241),
CITY VARCHAR2 (40),
NATION VARCHAR2 (2),
SURNAME VARCHAR2 (40),
NAME VARCHAR2 (40),
POLICY_NUMBER VARCHAR2 (10),
OLD_CODE VARCHAR2 (11),
NEARBY VARCHAR2 (40),
PROVINCE VARCHAR2 (2),
MARITAL_STATUS VARCHAR2 (80),
TELEPHONE VARCHAR2 (30),
LITTLE_MOUSE VARCHAR2 (30),
STREET VARCHAR2 (60),
GRAPE_CODE VARCHAR2 (1)
);
假设您有一个名为 var01
的变量
rec_customized
。实例化所有组件后,如果我想"DBMS_OUTPUT。PUT_LINE"他们,我将不得不写:
dbms_output.put_line (var01.secret_code);
dbms_output.put_line (var01.public_code);
dbms_output.put_line (var01.common);
dbms_output.put_line (var01.email);
.........
dbms_output.put_line (var01.grape_code);
有没有办法编写一个 LOOP 以便按顺序打印类型 rec_customized 的变量 var01 的所有组件?
例如:
FOR MY_INDEX IN 1..WhateverCouldBeHelpful
LOOP
dbms_output.put_line (var01. .....??);
END LOOP;
我使用的是 Oracle 11G Release 2。
提前感谢您的帮助。
记录是一种复合数据类型,不允许循环访问记录的字段。如果您必须在 PL/SQL 块中多次引用该记录 - 要使用dbms_output.put_line()
来输出该记录的各个字段的值,您可以定义一个嵌套子程序,列出记录的所有字段一次,并在外部 PL/SQL 块的范围内根据需要多次使用该子程序。
例:
declare
type t_rec is record(
field1 varchar2(11)
);
l_rec t_rec;
procedure print_record(p_val in t_rec) is
begin
-- Here you list all p_val record's fields
-- once and use this procedure as many times
-- in scope of PL/SQL block this
-- nested sub-program belongs to as needed
dbms_output.put_line(p_val.field1);
end;
begin
-- [1] --
select dummy
into l_rec
from dual;
print_record(l_rec);
-- [2] --
l_rec.field1 := 'Other value';
print_record(l_rec);
end;
/
结果:
X
Other value
PL/SQL procedure successfully completed