PL/SQLの記録表データタイプ
2803 ワード
レコードテーブル(またはインデックステーブル)のデータタイプは、記録タイプに似ています。記録タイプに対する拡張です。記録タイプは単一データしか処理できないので、拡張テーブルタイプの処理が可能です。
複数の記録は、二次元配列と類似しており、データベース内の表を模倣することができる。
レコードテーブルの種類の定義文法:
氏名:one年齢:18------------------氏名:two年齢:20------------------------------氏名:three年齢:24-----------------------
一次元配列形式は記録タイプを使用します。
one two three four
二次元配列形式は記録タイプを使用します。
one 18 two 20 th ree 24
複数の記録は、二次元配列と類似しており、データベース内の表を模倣することができる。
レコードテーブルの種類の定義文法:
--
TYPE table_name IS TABLE OF element_type [not null]
INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2];
-- INDEX BY , 。
テーブルを作成し、データを挿入します。create table mytest(
id number(3),
name varchar2(20),
age number(3)
);
insert into mytest values(1,'one',18);
insert into mytest values(2,'two',20);
insert into mytest values(3,'three',24);
commit;
インスタンスの使用:DECLARE
--
TYPE mytest_table_type IS TABLE OF mytest%ROWTYPE
INDEX BY BINARY_INTEGER;
--
v_table_type mytest_table_type;
--
v_count number(2) := 3;
BEGIN
-- id , int ,
FOR int IN 1..v_count LOOP
SELECT * INTO v_table_type(int) FROM mytest WHERE id = int;
END LOOP;
-- , id ,
FOR int IN v_table_type.FIRST .. v_table_type.LAST LOOP
DBMS_OUTPUT.PUT_LINE(' :'||v_table_type(int).name);
DBMS_OUTPUT.PUT_LINE(' :'|| v_table_type(int).age);
DBMS_OUTPUT.PUT_LINE('-------------------------------');
END LOOP;
END;
出力結果:氏名:one年齢:18------------------氏名:two年齢:20------------------------------氏名:three年齢:24-----------------------
一次元配列形式は記録タイプを使用します。
DECLARE
--
TYPE my_table_type IS TABLE OF varchar2(50)
INDEX BY BINARY_INTEGER;
--
v_my_table my_table_type;
BEGIN
--
v_my_table(1) := 'one';
v_my_table(2) := 'two';
v_my_table(3) := 'three';
v_my_table(4) := 'four';
--
DBMS_OUTPUT.PUT_LINE(v_my_table(1));
DBMS_OUTPUT.PUT_LINE(v_my_table(2));
DBMS_OUTPUT.PUT_LINE(v_my_table(3));
DBMS_OUTPUT.PUT_LINE(v_my_table(4));
END;
出力結果:one two three four
二次元配列形式は記録タイプを使用します。
DECLARE
--
TYPE my_table_type IS TABLE OF mytest%ROWTYPE
INDEX BY BINARY_INTEGER;
--
v_my_table my_table_type;
BEGIN
--
SELECT name,age INTO v_my_table(1).name,v_my_table(1).age FROM mytest WHERE id = 1;
SELECT name,age INTO v_my_table(2).name,v_my_table(2).age FROM mytest WHERE id = 2;
SELECT name,age INTO v_my_table(3).name,v_my_table(3).age FROM mytest WHERE id = 3;
--
DBMS_OUTPUT.PUT_LINE(v_my_table(1).name||' '||v_my_table(1).age);
DBMS_OUTPUT.PUT_LINE(v_my_table(2).name||' '||v_my_table(2).age);
DBMS_OUTPUT.PUT_LINE(v_my_table(3).name||' '||v_my_table(3).age);
END;
出力結果:one 18 two 20 th ree 24