ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一些复合数据类型的用法

一些复合数据类型的用法

原创 Linux操作系统 作者:litongbing 时间:2009-09-08 13:33:46 0 删除 编辑

--使用PL/SQL中记录
declare
     type emp_type is record(
     name emp.ename%type,
     sal  emp.sal%type,
     dno  emp.deptno%type);
     v_emp  emp_type;
begin
    select ename, sal, deptno
      into v_emp
      from emp
     where empno = 7369;
    dbms_output.put_line(v_emp.name ||',' || v_emp.sal ||',' || v_emp.dno);
end;

--使用记录表
declare
    type emp_type is table of emp%rowtype index by binary_integer;
    v_emp   emp_type;
begin
    select *
      into v_emp(1)
      from emp
     where empno =7369;
    
     dbms_output.put_line(v_emp(1).ename ||','|| v_emp(1).sal);
end;    
--使用索引表    
declare
   type emp_type is table of emp.ename%type index by binary_integer;
   v_emp   emp_type;
begin
    select ename
      into v_emp(1)
      from emp
     where empno =7369;
    
     dbms_output.put_line(v_emp(1));
end;

--使用嵌套表
declare
    type names is table of emp.ename%type;
    v_name   names;
begin
    v_name := names('MA1', 'MA2', 'MA3');
    select ename
      into v_name(1)
      from emp
     where empno = &eno;
    dbms_output.put_line('雇员名:'|| v_name(1));
end;
--表列中使用嵌套表
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;

--嵌套表中插入数据
begin
    insert into employee values(1, 'scott', 800, phone_type('000000000', '111111111'));
    commit;
end;

--检索嵌套表中数据
declare
    v_phone  phone_type;
begin
    select phone
      into v_phone
      from employee
     where id = 1;
   
    for i in 1..v_phone.count loop
        dbms_output.put_line('电话号码:' || v_phone(i));
    end loop;
end;

--使用变长数组varray
declare
    type name_type is varray(20) of emp.ename%type;
    v_ename  name_type := name_type('may');
begin
    select ename
      into v_ename(1)
      from emp
     where empno = 7369;
   
    dbms_output.put_line('雇员名:' || v_ename(1));
end;

--索引表下标没有界限,且能为负数;嵌套表中下标也是没有界限,但下标不能为负数,从1开始
--变长数据varray下标是有界限的,下标从1,最大元素个数为9.

--使用多级varray
declare
    --定义一唯数组
    type var1 is varray(10) of int;
    --定义二唯数组
    type var2 is varray(10) of var1;
    --初始化二维数组
    v_arr  var2 := var2(var1(58,100, 102), var1(55,6,73),var1(2,4));
begin
    dbms_output.put_line('显示二维数组所有元素');
   
    for i in 1..v_arr.count loop
        for j in 1..v_arr(i).count loop
            dbms_output.put_line('v_arr(' || i || ',' || j || ')=' || v_arr(i)(j));
        end loop;
    end loop;
end;
   
--使用多级嵌套表
declare
    --定义一维嵌套表
    type var1 is table of int;
    --定义二维嵌套集合
    type var2 is table of var1;
    --初始化二维集合变量
    v_table  var2 := var2(var1(2,4),var1(5,8));
begin
    dbms_output.put_line('显示二维数组所有元素');
   
    for i in 1..v_table.count loop
        for j in 1..v_table(i).count loop
            dbms_output.put_line('v_table(' || i || ',' || j || ')=' || v_table(i)(j));
        end loop;
    end loop;
end;

--使用多级索引表
declare
    type var1 is table of int index by binary_integer;
    type var2 is table of var1 index by binary_integer;
    v_ind  var2;
begin
    v_ind(1)(1):= 10;
    v_ind(1)(2):= 5;
    v_ind(2)(1):= 100;
    v_ind(2)(2):= 50;
    dbms_output.put_line('显示二维数组所有元素');
    for i in 1..v_ind.count loop
       for j in 1..v_ind(i).count loop
           dbms_output.put_line('v_ind('|| i || ',' || j ||')=' || v_ind(i)(j));
       end loop;
    end loop;
end;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20948385/viewspace-614161/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-05-13

  • 博文量
    59
  • 访问量
    215322