Oracle pl/sql编程 7---复合变量之记录类型

来源:转载

复合变量之记录类型
标量变量只可以保存单个数值,在pl/sql中的与标量变量相对应的是复合变量。复合变量可以将不同数据类型的多个值存储在一个单元中。由于复合数据类型可以由用户自己根据需要定义结构所以复合数据类型又被称为自定义数据类型。
pl/sql提供了量中复合数据类型记录类型:记录类型中可以存储多个标量值,它的结构通常与数据库中的行相识
    记录表类型:该类型的变量允许用户在程序代码中使用”表“,以便存储多个行数据。它只只程序运行期间有效,非常类似于其他语言中的数组

记录类型使用记录类型的变量时首先要使用type语句,在这个语句中指出将在记录中包含的字段及其数据类型。语法如下:type recodename is recode(field1_name  date_type  [not null] [:=default_value],field2_name  date_type  [not null] [:=default_value],......fieldn_name  date_type  [not null] [:=default_value],
);
定义一个名为emp_recode的记录数据类型,并从emp中查出工号为7839的员工的所有信息放到此记录中最后打印出来

 set serveroutput on; --定义一个名为emp_recode的记录数据类型,并从emp中查出工号为7839的员工的所有信息放到此记录中最后打印出来 declare type emp_recode is record( empno emp.empno%type, ename emp.ename%type, job emp.job%type, mgr emp.mgr%type, HIREDATE emp.hiredate%type, sal emp.sal%type, comm emp.comm%type, deptno emp.deptno%type ); recode_emp emp_recode; begin select * into recode_emp from emp where emp.empno=7839; dbms_output.put_line(recode_emp.empno); dbms_output.put_line(recode_emp.ename); dbms_output.put_line(recode_emp.job); dbms_output.put_line(recode_emp.mgr); dbms_output.put_line(recode_emp.HIREDATE); dbms_output.put_line(recode_emp.comm); dbms_output.put_line(recode_emp.deptno); end;

如果记录变量具有相同的记录类型,那么可以将记录变量的值赋给另一个记录变量中。如果记录类型不同,那么无论记录类型中的字段是否相同,都不可以将以个记录变量赋予另一个记录变量
declare type emp_recode is record( empno emp.empno%type, ename emp.ename%type, job emp.job%type, mgr emp.mgr%type, HIREDATE emp.hiredate%type, sal emp.sal%type, comm emp.comm%type, deptno emp.deptno%type ); type other_emp_recode is record( empno emp.empno%type, ename emp.ename%type, job emp.job%type, mgr emp.mgr%type, HIREDATE emp.hiredate%type, sal emp.sal%type, comm emp.comm%type, deptno emp.deptno%type ); recode_emp1 emp_recode; recode_emp2 emp_recode; other_recode other_emp_recode; begin select * into recode_emp1 from emp where emp.empno=7839; recode_emp2:=recode_emp1; other_recode:=recode_emp1; end;ORA-06550: 第 33 行, 第 19 列: PLS-00382: 表达式类型错误ORA-06550: 第 33 行, 第 5 列: PL/SQL: Statement ignored


上面的例子中 虽然emp_recode和other_emp_recode里面的字段虽然一样但终究不是同一个记录类型所以不能赋值。







分享给朋友:
您可能感兴趣的文章:
随机阅读: