oracle 復合資料型別(批量繫結)2

2021-08-30 14:37:41 字數 4756 閱讀 4954

一、pl/sql集合

為了處理單列多行,可以使用pl/sql集合進行處理。pl/sql集合類似於高階語言陣列的一種復合資料型別、集合型別包括索引表(pl/sql表)、巢狀表(netsed table)、變長陣列(varray)等三種型別。

1、索引表

索引表也成為pl/sql表,它是oracle早期用來處理pl/sql陣列的資料型別,注意,高階語言陣列的元素個數是有限制的,並且下標不能為負數,而索引表的元素個數沒有限制,並且下標可以為負數,注意索引表只能作為pl/sql復合資料型別使用,而不能作為表列的資料型別使用,定義索引表的語法如下:

type type_name is table of element_name

[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用於定義索引表變數,注意oracle9i之前,索引表下標只允許用的資料型別binary_integer和pls_integer;而從oracle9i開始不僅可以為binary_integer和pls_integer,而且還可以為varchar2型別,

示例

一、在索引表中使用binary_integer和pls_integer

declare

type temp_table_type is table of cip_temps.name%type

index by binary_integer;

temp_table temp_table_type;

begin

select name into temp_table(-1) from cip_temps where id=6;

dbms_output.put_line(temp_table(-1));

end;

示例

二、在索引中使用varchar2

declare

type temp_table_type is table of number

index by varchar2(10);

temp_table temp_table_type;

begin

temp_table('北京'):=1;

temp_table('上海'):=2;

temp_table('河北'):=3;

dbms_output.put_line(temp_table.first);

dbms_output.put_line(temp_table.last);

end;

2、巢狀表

巢狀表也是一種用來處理pl/sql陣列的資料型別,高階語言陣列元素下標是用0或1開始,並且元素個數有界限,而巢狀表下標是從1開始的,並且元素個數沒有界限,另外高階語言陣列元素值是順序的,而巢狀表的陣列元素值是可以稀疏的,注意索引表型別不能做為表列的資料型別使用,但巢狀表型別可以做為表列的資料型別使用, 語法如下:

type type_name is table of element_type;

identifier type_name;如上所示,type_name用於指定巢狀表名稱,element_type用於指定巢狀表元素的資料型別,identifier用於定義巢狀表變數,注意:當使用巢狀表時,必須首先使用構造方法初始化巢狀表,示例如下:

delcare

type temp_table_type is table of emp.name%type;

temp_table temp_table_type:=temp_table_type('a','a');

使用巢狀表的說明方法

(1)在pl/sql快中使用巢狀表

必須要初始化巢狀表變數,然後才能在pl/sql塊中引用巢狀表,示例如下:

declare

type temp_table_type is table of cip_temps.name%type;

temp_table temp_table_type;

begin

temp_table:=temp_table_type('mary','123','123');

select name into temp_table(3) from cip_temps where id=6;

dbms_output.put_line(temp_table(3));

end;

(2)、在表列中使用巢狀表

巢狀表型別不僅可以再pl/sql塊中直接引用,也可以作為表列的資料型別使用,但如果在表列中使用巢狀表型別,必須首先使用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_table;

示例

一、在pl/sql塊中巢狀表列插入資料

當定義巢狀表型別時,oracle自動為該型別生成相應的構造方法,當為巢狀表列插入資料時,需要使用巢狀表的構造方法,示例如下:

declare

begin

insert into employee values(1,'1111',5,phone_type('aaaa','3333333'));

end;

示例

二、在pl/sql塊中檢索巢狀表列的資料

當在在pl/sql塊中檢索巢狀表列的資料時,需要定義巢狀表型別的變數接收其資料,示例如下:

declare

temp_phone phone_type;

begin

select phone into temp_phone from employee where id=1;

for i in 1..temp_phone.count loop

dbms_output.put_line(temp_phone(i));

end loop;

end;

示例

三、在pl/sql塊中更新巢狀表列的資料

當在pl/sql塊中更新巢狀表列的資料時,首先需要定義巢狀表變數,並使用構造方法初始化該變數,然後才能執行部門使用update語句更新,示例如下:

declare

temp_phone phone_type:=phone_type('aa','bb');

begin

update employee set phone=temp_phone where id=1;

end;

3、變長陣列

其元素下標以1開始,並且元素下標最大是有限制的,定義array語法如下:

type  type_name is vrray(limit_size) of element_type[not null];

identifier type_name;

如上所示:type_name型別名稱,limit_size用於指定下標最大值,element_type用於指定元素資料型別,identifer用於定義vrray變數,當使用vrray元素時,必須使用構造方法初始化array元素,示例如下:

declare

type temp_varray_type is vrray(20) of temp.name%type;

temp_varray temp_varray_type:=temp_varray_type('a');關於用法同巢狀表

二、pl/sql記錄表

pl/sql變數用於處理單行單列資料,pl/sql記錄用於處理單行多列資料,pl/sql集合用於處理多列單行資料,為了在pl/sql快中處理多行多列資料,開發人員可以使用pl/sql記錄表處理多行多列資料,示例如下:

declare   

type temp_table_type is table of cip_temps%rowtype

index by binary_integer;

temp_table temp_table_type;

begin

select * into temp_table(1) from cip_temps where id=6;

for i in 1..temp_table.count loop

dbms_output.put_line(temp_table(i).name||':'||temp_table(i).address);

end loop;

end;

oracle復合資料型別

type用於定於不確定的資料型別 declare v fd change left ekp change.fd change left type v id是表name的id的資料型別 v fd change total ekp change.fd change total type begin se...

復合資料型別

復合資料型別 作用 封裝資料 多種不同型別資料存放在一起 應存放在全域性,在訪問結構體中的變數時,應用stu.id stu.name 初始化的方式 在對陣列進行初始化時 strcpy stu.name,zhangsan 在對指標進行初始化時 char name 對name進行初始化 stu.name...

復合資料型別

一 struct結構體 封裝資料 存放多種不同的資料型別 struct的宣告放在全域性區 1.宣告和定義 宣告 struct student struct student stu array 3 int i for i 0 i 3 i for i 0 i 3 i include struct stu...