集合和成員函數(shù)
2024-07-21 02:33:21
供稿:網(wǎng)友
有時(shí)也被稱為索引表(index-by tables),可以在PL/SQL中使用,能夠模擬數(shù)組的非永久表。
用法:
1、 定義一個(gè)PL/SQL表類型
2、 聲明這種類型的變量。
3、 將記錄添加到PL/SQL表中,并采用與引用數(shù)組元素大體相同的方式引用他們
語(yǔ)法:p233
特點(diǎn):只能有一列和一個(gè)主健。但是可以有無數(shù)的行
舉例:
set serveroutput on
declare --定義PL/SQL表
type my_text_table_type is table of varchar2(200)
index by binary_integer;
type my_emp_table_type is table of employees%rowtype
index by binary_integer;
l_text_table my_text_table_type;
l_emp_table my_emp_table_type;
begin
l_text_table(1) :=’donny’;
l_text_table(2) :=’Chen’;
l_emp_table(10).employee_id :=10;
l_emp_table(10).first_name :=’Sean’;
l_emp_table(10).last_name :=’Dillon’;
l_emp_table(10).email :=’donny@hotmail’;
l_emp_table(10).hire_date :=sysdate;
l_emp_table(10).job_id :=’HR’;
l_emp_table(20).employee_id :=20;
l_emp_table(20).first_name :=’Chris’;
l_emp_table(20).last_name :=’Doo’;
l_emp_table(20).email :=’donny@sina’;
l_emp_table(20).hire_date :=sysdate-5;
l_emp_table(20).job_id :=’IT’;
dbms_output.put_line(l_text_table.count);
dbms_output.put_line(l_emp_table.count);
dbms_output.put_line(l_text_table(1));
dbms_output.put_line(l_text_table(2));
dbms_output.put_line(l_emp_table(1).first_name);
dbms_output.put_line(l_emp_table(2).first_name);
end;
/
關(guān)于索引算子:
必須是合法的BINARY_INTEGER,介于--2的31次冪~2的31次冪
從PL/SQL表中刪除記錄:
declare --定義PL/SQL表
type my_text_table_type is table of varchar2(200)
index by binary_integer;
l_text_table my_text_table_type;
l_empty_table my_text_table_type;
begin
l_text_table(10):=’A value’;
l_text_table(20):=’Another value’;
l_text_table(30):=’third value’;
dbms_output.put_line(l_text_table.count);
l_text_table.DELETE(20);
dbms_output.put_line(l_text_table.count);
l_text_table.DELETE;
dbms_output.put_line(l_text_table.count);
l_text_table(15):=’some text’;
l_text_table(25):=’ some more text’;
dbms_output.put_line(l_text_table.count);
l_text_table:=l_empty_table;
dbms_output.put_line(l_text_table.count);
end;
/
FIRST / NEXT / LAST:
我們知道count返回表中行的數(shù)量。
FIRST: 返回PL/SQL表中“第一個(gè)”或者最小的索引。LAST則是最后一個(gè)。
NEXT返回PL/SQL表中當(dāng)前索引的下一個(gè)索引。NEXT有一個(gè)參數(shù),即當(dāng)前的索引。
Conn scott/tiger
Set serveroutput on
Declare
type my_text_table_type is table of varchar2(200)
index by binary_integer;
l_text_table my_text_table_type;
l_index number;
begin
for emp_rec in (select * from emp) loop
l_text_table(emp_rec.empno):=emp_rec.ename;
end loop;
l_index:= l_text_table.first;
loop
exit when l_index is null;
dbms_output.put_line(l_index ’:’ l_text_table(l_index));
l_index :=l_text_table.next(l_index);
end loop;
end;
/
記錄:
TYPE <記錄名稱> IS RECORD(
字段名1 類型;
字段名2 類型;
。。。。。。
);
記錄可以擁有任意數(shù)目的不同數(shù)據(jù)類型的列,而PL/SQL表卻不是這樣的,只能有一列和一個(gè)主健。
declare
type location_record_type is record(
street_address varchar2(40),
postal_code varchar2(40),
city varchar2(30),
state_PRovince varchar2(25),
contry_id char(2) not null :=’US’
);
l_my_loc location_record_type;
begin
l_my_loc.street_address:=’
Oracle street
’;
l_my_loc.postal_code:=’10010’;
l_my_loc.city:=’Reston’;
l_my_loc.state_province:=’CA’;
dbms_output.put_line(l_my_loc.street_address);
dbms_output.put_line(l_my_loc.postal_code);
dbms_output.put_line(l_my_loc.city);
dbms_output.put_line(l_my_loc.state_province);
end;
/
綁定變量:
declare
type Numtab is table of char(15) index by binary_integer;
type Nametab is table of char(25) index by binary_integer;
vnums Numtab;
vname Nametab;
t1 char(5);
t2 char(5);
t3 char(5);
procedure get_time( t out number) is
begin
select to_char(sysdate,’sssss’) into t from dual;
end;
begin
for j in 1.. 15000 loop
vnums(j) :=j;
vname(j) :=’vendor nmane ‘ to_char(j);
end loop;
get_time(t1);
forall i in 1.. 15000
insert into vender values(vnums(i), vname(i));
get_time(t2);
for i in 1.. 15000 loop
insert into vender values(vnums(i), vname(i));
end loop;
get_time(t3);
dbms_output.put_line(‘Forall loop ’ to_char(t2-t1));
dbms_output.put_line(‘For loop ’ to_char(t3-t2));
end;
/
declare
type Numtab is table of char(15) index by binary_integer;
type Nametab is table of char(25) index by binary_integer;
vnums Numtab;
vname Nametab;
cursor c1 is select * from vender;
begin
open c1;
fetch c1 bulk collect into vnums, vname;
dbms_output.put_line(vnums.count);
close c1;
end;
/
create or replace type add_ty as object(
h_no number(3),
h_street varchar2(20),