匿名块的四个类型(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;
乐观的心态会让你更加完美