匿名块的四个类型(type rowtype record table)


Oracle PL/SQL块 匿名块的四个类型 type rowtype record table


---- type (列类型)  %type类型是指声明变量的时候,参考某个表的某个列的类型
---- rowtype (行类型) %rowtype参数某个表的类型,%rowtype中可以存储多个数据,具体可存多少个和表的字段数一样。
---- record类型(记录类型) record可以理解为可以自定义的行类型,record类型在使用之前必须声明该类型。
---- table类型 (表类型) 无论是行类型还是记录类型只能存储一行数据,如果要存储多行数据,需要用到table类型。table类型也需要先声明类型,再声明该类型的变量。


declare
-- 变量声明部分 v_ename 类型参考表emp表的ename类型 v_ename emp.ename%type; v_sal emp.sal%type; begin -- 业务逻辑执行部分 select ename,sal into v_ename,v_sal from emp where empno=&请输入员工编号; -- 把员工姓名打印到控制台 dbms_output.put_line('员工姓名:'||v_ename||',基本工资:'||v_sal); exception -- 异常处理部分 when no_data_found then dbms_output.put_line('你输入的员工编号不存在'); end;
declare
-- 变量声明部分   v_ename  类型参考表emp表的ename类型
   v_emp emp%rowtype;
begin
-- 业务逻辑执行部分
   select * into v_emp from emp where empno=&请输入员工编号;
-- 把员工姓名打印到控制台
   dbms_output.put_line('员工编号:'||v_emp.empno||',员工姓名:'||v_emp.ename||',基本工资:'||v_emp.sal||',奖金:'||v_emp.comm||',雇用日期:'||v_emp.hiredate);
exception
-- 异常处理部分
   when no_data_found then
   dbms_output.put_line('你输入的员工编号不存在');
end;
declare
  type emp_record_type is record(
     ename  emp.ename%type,
     sal emp.sal%type,
     comm emp.comm%type,
     total emp.sal%type
  );
  
  v_emp emp_record_type;
begin 
  select ename,sal,comm,sal+nvl(comm,0) into v_emp from emp where empno=&no;
  
  dbms_output.put_line('员工姓名:'||v_emp.ename||',基本工资:'||v_emp.sal||
            ',奖金:'||v_emp.comm||',总工资:'||v_emp.total);
end;
declare
-- 声明table类型  is table of 后可以跟行类型,也可以是记录类型
  type emp_table_type is table of emp%rowtype
  index by binary_integer;
  
  v_emp emp_table_type;
begin 
  select * into v_emp(1) from emp where empno=7369;
  
  select * into v_emp(2) from emp where empno=7499;
  
  dbms_output.put_line('员工姓名:'||v_emp(1).ename||',基本工资:'||v_emp(1).sal||';');
  
  dbms_output.put_line('员工姓名:'||v_emp(2).ename||',基本工资:'||v_emp(2).sal||';');
end;

 

posted @ 2019-05-07 23:24  Java练习生  阅读(648)  评论(0编辑  收藏  举报