作者:阿里西西  文章来源:http://www.alixixi.com/  更新时间:2005-12-13
集合和成员函数

PL/SQL:

有时也被称为索引表(index-by tables),可以在PL/SQL中使用,能够模仿数组的非永久表。

用法:

1、 定义一个PL/SQL表类型

2、 声明这种类型的变量。

3、 将记录添加到PL/SQL表中,并采用与引用数组元素大体相同的方式引用他们

 

语法:p233

 

特点:只能有一列和一个主健。但是可以有无数的行

 

举例:

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;

/

 

关于索引算子:

必须是合法的BINARY_INTEGER,介于­-231次幂~231次幂

 

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返回表中行的数量。

FIRST: 返回PL/SQL表中“第一个”或者最小的索引。LAST则是最后一个。

NEXT返回PL/SQL表中当前索引的下一个索引。NEXT有一个参数,即当前的索引。

 

 

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 类型;

。。。。。。

);

 

记录可以拥有任意数目的不同数据类型的列,而PL/SQL表却不是这样的,只能有一列和一个主健。

 

 

 

 

 

 

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),

  • 上一篇:
  • 下一篇:
网友评论
相关搜索
阿里西西Baidu.com搜索