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!