引用类型、复合类型

版权声明:原创内容是本人学习总结,仅限学习使用,禁止用于其他用途。如有错误和不足,欢迎评论指正补充。 https://blog.csdn.net/qian_qian_123/article/details/82941953
--引用类型
--%type
    --定义某个变量的数据类型与已存在的变量数据类型,某个列的数据类型相同。
--注意:%type前面必须加表名.字段名
 declare 
    v_empno  emp.empno%type; --定义v_empno的类型跟emp表中的empno字段类型一致
    v_ename  emp.ename%type;
 begin
    select empno,ename into v_empno,v_ename from emp where empno = '&id';
    dbms_output.put_line('empno:'||v_empno);
    dbms_output.put_line('ename:'||v_ename);
 
 end;
 
 select * from emp;
 
 --%rowtype
 --用于定义不确定的类型的变量,%rowtype可以理解成对数据库记录一行提取出来的一个副本。
    --注意:%rowtype之前必须有前缀(表名)
  
declare
  v_emp emp%rowtype;  --v_emp表示的是保存emp表中的一行的记录
  --%rowtype里面的值不能一次性提取出来,只能一个一个提取
begin
  select * into v_emp from emp where empno ='&id';
  --打印员工信息
  dbms_output.put_line('empno:'||v_emp.empno);
  dbms_output.put_line('ename:'||v_emp.ename);
   dbms_output.put_line('sal:'||v_emp.sal);
end;


--复合数据类型
--可变数组 :一旦确定长度,则下标也确定
   --可变数组的元素下标从1开始
    --定义可变数组类型的语法:
     --    type 可变数组名  is varray(数组的长度) of 元素类型
   
 declare
   --定义一个可变数组类型
   --定义一个元素是varchar2(10)的长度为5的可变数组 strings
   type strings is varray(5) of varchar2(10);
   --如果要使用可变数组,那就必须再定义一个变量指向这个可变数组
   v_list strings := strings('scott','suke','lily','kobe','allen');
 begin
   --打印可变数组中的值
   dbms_output.put_line(v_list(1));
   dbms_output.put_line(v_list(2));
   dbms_output.put_line(v_list(3)); 
   dbms_output.put_line(v_list(4));
   dbms_output.put_line(v_list(5));
   --dbms_output.put_line(v_list(6));--下标越界
 end;


--table 
 --是可以在PL/SQL程序中引用,能够模仿数组的非永久表。
    --语法:type 名称  is table of 元素类型
        --  [index by binary_integer] --下标是无限的,按照二进制进行索引
declare
     type strs is table of varchar2(10)
      index by binary_integer;
      --定义的table不能直接使用,必须用另外一个变量引用
      v_list strs;
begin
      v_list(1):='hello';
      v_list(999999) :='world';
      v_list(2) := 'Oracle';
      dbms_output.put_line(v_list(1)||v_list(999999)||v_list(2));

end;

--注意:table与可变数组的区别:
    --1.table和可变数组的结构是非常相似的
    --2.可变数组变量的长度一旦确定下来,以后就无法增加。table变量的长度将一直可变,而且下标可以不连续。

--record类型
    --包含一个或者几个组件,每个组件称为一个filed(域),
  --域的数据类型可以任意变量或者数据类型
    --我们可以把record理解成Java中的集合对象
    --语法: type record名 is record
    --    (
        --    变量1 数据类型,
        --    变量2 数据类型,
        --    ......
    --    )
  
declare
      --声明一个对象,类型是record
      type v_record is record(
           id number,
           name emp.ename%type
      );
      v_emp v_record;
begin
      select empno,ename
      into v_emp.id,v_emp.name
      from emp
      where empno=7369;
      
      dbms_output.put_line(v_emp.id||v_emp.name);
end;

猜你喜欢

转载自blog.csdn.net/qian_qian_123/article/details/82941953