7.复合数据类型
7.1定义PL/SQL记录
自定义PL/SQL记录:需要定义PL/SQL记录类型和记录变量,identifier用于指定记录变量名
- type type_name is record(
- field_declaration[,
- field_declaration]...
- );
- identifier type_name;
- declare
- type emp_record_type is record(
- name emp.ename%type,
- salary em.sal%type,
- dno emp.deptno%type);
- emp_record emp_record_type;
使用%rowtype属性定义记录变量:可以基于表或视图定义记录变量
当使用%ROWTYPE属性定义记录变量时,记录成员个数,名称,类型与表或视图列的个数,名称,类型完全相同.
- dept_record dept%rowtype;
- emp_record emp%rowtype;
在select into 语句中使用PL/SQL 记录
在select into 语句中使用记录变量
- set serveroutput on
- declare
- type emp_record_type is record(
- name emp.ename%type,
- salary em.sal%type,
- dno emp.deptno%type);
- emp_record emp_record_type;
- begin
- select ename,sal,deptno into emp_record from emp where empno=&no;
- dbms_output.put_line(emp_record.name);
- end;
7.2在select into 语句中使用记录成员
- declare
- type emp_record_type is record(
- name emp.ename%type,
- salary emp.sal%type,
- dna emp.deptno%type);
- emp_record emp_record_type;
- begin
- select ename,sal into emp_record.name,emp_record.salary from emp where empno=&no;
- dbms_output.put_line(emp_record.name);
- end;
7.3在insert语句中使用PL/SQL记录
在VALUES子句中使用记录变量
- declare
- dept_record dept%rowtype;
- begin
- dept_record.deptno:=50;
- dept_record.dname:='administrator';
- dept_record.loc:='beijing';
- insert int dept values dept_record;
- end;
在VALUES子句中使用记录成员
- declare
- dept_record dept%rowtype;
- begin
- dept_record.deptno:=60;
- dept_record.dname:='sales';
- insert into dept (deptno,dname) values (dept_record.deptno,dept_record.dname);
- end;
7.4在UPDATE语句中使用PL/SQL记录
在SET子句中使用记录变量
- declare
- dept_record dept%rowtype;
- begin
- dept_record.deptno:=30;
- dept_record.dnama:='sales';
- dept_record.loc:='shanghai';
- update dept set row=dept_record where deptno=30;
- end;
在SET子句中使用记录成员
- declare
- dept_record dept%rowtype;
- begin
- dept_record.loc:='guangzhou';
- update dept set loc=dept_record.loc where deptno=10;
- end;
7.5在DELETE语句中使用PL/SQL记录:只能在DELETE语句中的WHERE子句中使用记录成员
- declare
- dept_record dept%rowtype;
- begin
- dept_record.deptno:=50;
- delete from dept where deptno=dept_record.deptno;
- end;
感谢April-MyHou!