淺談oracle複合資料型別 (1)

jss001發表於2009-02-27

--本文件可以直接複製執行。

/*
oracle複合資料型別
PL/SQL有兩種複合資料結構:記錄和集合。記錄由不同的域組成,集合由不同的元素組成。
*/

/*
一、記錄型別

類似C語言中的結構,有兩種定義方式:顯式定義和隱式定義。
*/

create table test
(
id varchar2(20),
mc varchar2(60)
);

insert into test values('111','11111');
insert into test values('222','22222');
insert into test values('333','33333');
insert into test values('444','44444');
insert into test values('555','55555');
insert into test values('666','66666');

commit;

/*

1.1、顯示定義記錄

*/

set serverout on
declare
type t_record is record
(
id test.id%type,
mc test.mc%type
);
var_record t_record;
counter number default 0;
begin
for row_test in (select id,mc from test) loop
counter := counter + 1;
var_record.id := row_test.id;
var_record.mc := row_test.mc;
dbms_output.put_line('var_record:'||var_record.id||'---'||var_record.mc);
dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc);
dbms_output.put_line('================loop '||counter||' times.');
end loop;
exception when others then
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

/*有一些PL/SQL指令在使用隱式定義記錄時沒有使用%ROWTYPE屬性,比如遊標FOR迴圈或觸發器中的:old和:new記錄。*/

/*

1.2、隱式定義記錄

*/

隱式定義記錄中,我們不用描述記錄的每一個域,在宣告記錄變數時使用%ROWTYPE命令定義與資料庫表,檢視,遊標有相同結構的記錄。

declare
t_record1 test%rowtype;
cursor cur_test(v_id in varchar2) is
select id,mc from test
where id <= v_id;
t_record2 cur_test%rowtype;
begin
for row_test in cur_test('333') loop
t_record1.id := row_test.id;
t_record1.mc := row_test.mc;
t_record2.id := row_test.id;
t_record2.mc := row_test.id;
dbms_output.put_line('t_record1:'||t_record1.id||'---'||t_record1.mc);
dbms_output.put_line('t_record2:'||t_record2.id||'---'||t_record2.mc);
dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc);
dbms_output.put_line('================loop '||cur_test%rowcount||' times.');
end loop;
exception when others then
dbms_output.put_line(sqlcode||sqlerrm);
end;
/

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017064/,如需轉載,請註明出處,否則將追究法律責任。

相關文章