1. 程式人生 > >pl/sql 記錄型別

pl/sql 記錄型別

定義記錄型別

TYPE 型別名稱 IS RECORD(
	成員名稱 資料型別[[NOT NULL][:= 預設值] 表示式],
	....
);

使用記錄型別返回接受查詢結果

SQL> DECLARE
  2     v_emp_empno emp.empno%TYPE;
  3     v_emp_ename emp.ename%TYPE;
  4     v_emp_job emp.job%TYPE;
  5     v_emp_hiredate emp.hiredate%TYPE;
  6     v_emp_sal emp.sal%TYPE;
  7     v_emp_comm emp.comm%TYPE;
  8  BEGIN
  9     v_emp_empno:=&inputempno;
 10     SELECT ename,job,hiredate,sal,comm INTO
 11     v_emp_ename,v_emp_job,v_emp_hiredate,v_emp_sal,v_emp_comm
 12     FROM emp WHERE empno=v_emp_empno;
 13     DBMS_OUTPUT.put_line('僱員編號:'||v_emp_empno||',姓名:'||v_emp_ename||'.職業:'
 14     ||v_emp_job||',僱傭日期:'||TO_CHAR(v_emp_hiredate,'yyyy-mm-dd')||',基本工資:'
 15     ||v_emp_sal||',佣金:'||NVL(v_emp_comm,0));
 16  EXCEPTION
 17          WHEN OTHERS THEN
 18       RAISE_APPLICATION_ERROR(-20007,'此僱員不存在!');
 19  END;
 20  /
輸入 inputempno 的值:  7369
原值    9:      v_emp_empno:=&inputempno;
新值    9:      v_emp_empno:=7369;
僱員編號:7369,姓名:SMITH.職業:CLERK,僱傭日期:1980-12-17,基本工資:800,佣金:0

PL/SQL 過程已成功完成。

使用者自定義型別

SQL> DECLARE
  2     TYPE dept_type IS RECORD(
  3     deptno dept.deptno%TYPE:=80,
  4     dname  dept.dname%TYPE,
  5     loc   dept.loc%TYPE
  6     );
  7     v_dept dept_type;
  8  BEGIN
  9     v_dept.dname:='abx';
 10     v_dept.loc:='china';
 11     DBMS_OUTPUT.put_line('部門編號:'||v_dept.deptno||'名稱:'||v_dept.dname||'位置:'||v_dept.loc);
 12  END;
 13  /
部門編號:80名稱:abx位置:china

PL/SQL 過程已成功完成。

使用記錄型別儲存資料

原始資料

SQL> select *from dept;

    DEPTNO DNAME                        LOC
---------- ---------------------------- --------------------------
        80 chais                        sddsf
        10 ACCOUNTING                   NEW YORK
        20 RESEARCH                     DALLAS
        30 SALES                        CHICAGO
        40 OPERATIONS                   BOSTON
SQL> select *from dept;

    DEPTNO DNAME                        LOC
---------- ---------------------------- --------------------------
        80 hello,world                  china
        10 ACCOUNTING                   NEW YORK
        20 RESEARCH                     DALLAS
        30 SALES                        CHICAGO
        40 OPERATIONS                   BOSTON