Oracle中複雜資料型別 集合

2021-06-06 13:00:38 字數 2669 閱讀 9799

集合是用來處理多行單列的資料,記錄是用來處理單行多列,變數處理單行單列資料,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列舉它被用來存放固定的不可改變的型別,比如說,四...