集合是用來處理多行單列的資料,記錄是用來處理單行多列,變數處理單行單列資料,pl/sql記錄表處理多行多列資料
1.索引表
下標可以為負數,並且元素的個數沒有限制,只能作為pl/sql復合資料型別使用.
type type_name is table of element_type
[not null] index by key_type;
identifier type_name;
type_name用於指定使用者自定義資料型別的名稱(is table .. index表示索引表),element_type用於指定索引表元素的資料型別.not null表示不能引用null元素.
key_type用於指定索引表下標的資料型別(binary_integer, pls_integer, varchar2),identifier定義索引表變數
declare
type ename_table_type is table of emp.ename%type
index by binary_integer;
ename_table ename_table_type;
begin
select ename into ename_table(-1) from emp
where empno=&no;
dbms_output.put_line('雇員名:'||ename_table(-1));
end;
其中ename_table(-1)表示下標是-1的元素.
declare
type ename_table_type is table of number
index by varchar2(10);
ename_table ename_table_type;
begin
ename_table('北京') := 1;
end;
2.巢狀表
元素下標從1開始,元素個數沒有限制,值可以是稀疏的.可以作為表列的資料型別使用.
type type_name is table of element_type
identifier type_name;
type_name用於指定巢狀表的名字,element_type指定巢狀表元素的資料型別.在使用時,必須先使用構造方法先初始化構造表
(1)在pl/sql塊中使用巢狀表
declare
type ename_table_type is table of emp.ename%type;
ename_table ename_table_type
begin
ename_table:=ename_table_type('mary','mary','mary');
select enmae into ename_table(2) from emp
where emp_no=&no;
dbms_output.put_line('雇員名:'||ename_table(2));
end;
(2)在表列中使用巢狀表
必須先使用create type命令來建立巢狀表型別,當使用巢狀表型別作為表列的資料型別時,必須為巢狀表指定專門的儲存表
create type phone_type is table of varchar2(20);
create table employee(
id number(4), name varchar2(10),sal number(6,2),
phone phone_type)nested table phone store as phone_type;
經過上面的定義後,就可以在建立employee的時間使用這個巢狀型別了.
begin
insert into employee values(1, 'scott', 800, phone_type('123456','13245641234'));
end;
3.變長陣列(varray)
下標從1開始,元素的最大個數是有限制的.
type type_name, is varray(size_limit) of element_type[not null];
identifier type_name;
使用的時間必須要用構造方法進行初始化,例如:
declare
type ename_table_type is varray(20) of emp.ename%type;
ename_table ename_table_type:=ename_table_type('a','a');
begin
select ename into ename_table(1) from emp
where empno=&no;
dbms_output.put_line('雇員姓名:'||ename_table(1));
end;
varray也可以作為列的資料型別使用,在表中引用此資料型別必須先create type
create type phone_type is varray(20) of varchar2(20);
create table employee(
id number(4),
name varchar2(20),
sal number(6,2),
phone phone_type);
Oracle 複雜資料型別
1 記錄型別變數定義 set serveroutput on declare type stuinfo record is record 用 type定義與stuinfo表字段相匹配的變數型別 temp stuname stuinfo.stuname type,temp stuno stuinfo....
複雜資料型別
1 在c語言中,除了之前學到的基本資料型別 整型,浮點型,字元型 外,還有指標型別和構造型別 結構型,聯合型,列舉型 2 結構體型別,用於把不同型別的資料組合成乙個集合體,宣告格式 struct 結構名 例如 includestruct students void main 結構體的特點是 表示更豐...
複雜資料型別
1結構體 相當於是高階語言裡的類,但是他沒有方法,也就是行為,只有屬性,也就是成員,結構體相當於是自定義類 宣告struct students 當我們需要使用結要用結構體裡的類的屬性時,我們需要通過 運算子來進行呼叫,比如 students.age 2列舉它被用來存放固定的不可改變的型別,比如說,四...