(メモ)基本複合型データタイプの声明
--(1)%typeで変数を定義する--
--(3)%rowtypeで変数を定義する――
--(4)一次元表型変数を定義する(高度な言語の一次元配列に相当する)
--(5)多次元表型変数の定義(多次元配列に相当)
--(6)多次元表タイプ変数を定義する。
declare
n_name users.usedname%type;
begin
commit;
end;
--(2)記録タイプ変数を定義する。declare
-- myrecord , myrecordnumber mycurrentdate
type myrecord is record(
myrecordnumber int,
mycurrentdate date);
-- myrecord ;
srecord myrecord;
begin
select * into srecord from testtable where recordnumber=68;
dbms_output.put_line(srecord.mycurrentdate);
end;
--PL/SQLプログラムでは、select文はいつもintoと協力して使用されます。into子文の後には「割り当てられた変数」があります。--(3)%rowtypeで変数を定義する――
declare
--
mytable testtable%rowtype;
begin
select * into mytable
from testtable
where recordnumber=88;
dbms_output.put_line(mytable.currentdate);
end;
--両者の定義の違いを比較します。変数名データテーブル。列名%type //通常の変数を定義します。タイプと列が一致します。変数名データテーブル%rowtype //複合型変数を定義します。タイプはテーブル構造と同じです。--(4)一次元表型変数を定義する(高度な言語の一次元配列に相当する)
declare
type tabletype1 is table of varchar2(4) index by binary_integer;
type tabletype2 is table of testtable.recordnumber%type index by binary_integer;
table1 tabletype1;
table2 tabletype2;
begin
table1(1):=' ';
table1(2):=' ';
table2(1):=88;
table2(2):=55;
dbms_output.put_line(table1(1)||table2(1));
dbms_output.put_line(table1(2)||table2(2));
end;
--(5)多次元表型変数の定義(多次元配列に相当)
declare
type tabletype1 is table of users%rowtype index by binary_integer;
table1 tabletype1;
begin
select * into table1(20) from users where user_id=29;
dbms_output.put_line(table1(20).usedname||table1(20).real_name);
end;
--(6)多次元表タイプ変数を定義する。
declare
type tabletype1 is table of varchar2(20) index by binary_integer;
table1 tabletype1;
begin
table1(1):=' ';
table1(2):=' ';
table1(3):=' ';
dbms_output.put_line(' '||to_char(table1.count));
dbms_output.put_line(' '||table1.first);
dbms_output.put_line(' '||table1.last);
dbms_output.put_line(' '||table1.prior(2));
dbms_output.put_line(' '||table1.next(2));
if (table1.exists(2)) then dbms_output.put_line(' ');
else dbms_output.put_line(' ');
end if;
table1.delete(2);
dbms_output.put_line('==================');
dbms_output.put_line(' '||to_char(table1.count));
dbms_output.put_line(' '||table1.first);
dbms_output.put_line(' '||table1.last);
dbms_output.put_line(' '||table1.prior(2));
dbms_output.put_line(' '||table1.next(2));
if (table1.exists(2)) then dbms_output.put_line(' ');
else dbms_output.put_line(' ');
end if;
end;