pl/sql table和record类型

      table相当于数组,下面是一个table的实例:

    

declare
  /*自定义数组,类型为emp.empno%type,根据Binary_integer索引*/
  type mytable is table of emp.empno%type index by Binary_integer;
  v_empnos mytable;
begin
  /*下标可以为负数*/
  v_empnos(-1):=1000;
  v_empnos(234):=999;
  v_empnos(156):=123;
  
  dbms_output.put_line(v_empnos(156));
end;

  

    %type的意思:比如v_num emp.empno%type; 表示v_num的类型和emp表中的字段empno的字段类型一致。

   

declare
  /*emp.empno%type 表示v_num的类型和emp.empno的类型一致*/
  v_num emp.empno%type;
begin
  v_num:='234';
  dbms_output.put_line(v_num);
end;
  

   Record,相当于一个结构体。

   

declare
  /*自定义类型,相当于结构体*/
  type myrecord  is  Record
  (
     v_num  dept.deptno%type,
     v_name dept.dname%type,
     v_loc  dept.loc%type
  );
  v_record  myrecord;
begin
  /*给 v_record变量的每个字段赋值*/
  v_record.v_num:=10;
  v_record.v_name:='小卖部';
  v_record.v_loc:='泉州';
  dbms_output.put_line( v_record.v_num ||' '|| v_record.v_name ||' '|| v_record.v_loc );
end;
   

使用record变量类型时,如果表的结构发生改变(字段增删),这样需要从新定义
record类型,比较麻烦,解决方案可以用rowtype声明record变量类型

   

declare
	v_temp dept%rowtype;
begin
	v_temp.deptno:=50;
	v_temp.dname:='aaaa';
	v_temp.loc:='bj';
	dbms_output.put_line(v_temp.deptno||'  '||v_temp.dname);
end;

你可能感兴趣的:(table,Integer)