TYPE 類型名稱 IS RECORD ( 成員名稱 數據類型 [[NOT NULL] [:= 默認值] 表達式] , ... 成員名稱 數據類型 [[NOT NULL] [:= 默認值] 表達式] ) ;
示例一、記錄類型接收查詢返回結果
--使用記錄類型接收查詢返回結果 DECLARE V_ENO EMP.EMPNO%TYPE; TYPE EMP_TYPE IS RECORD( --定義記錄類型 ENAME EMP.ENAME%TYPE, JOB EMP.JOB%TYPE, HIREDATE EMP.HIREDATE%TYPE, SAL EMP.SAL%TYPE, COMM EMP.COMM%TYPE ); V_EMP EMP_TYPE; --定義一個指定的復合類型變量 BEGIN V_ENO := &ENO; SELECT ENAME, JOB, HIREDATE, SAL, COMM INTO V_EMP FROM EMP WHERE EMPNO = V_ENO; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' 員工編號:' || V_ENO || ' 姓名:' || V_EMP.ENAME || ' 職位:' || V_EMP.JOB || ' 入職日期:' || TO_CHAR(V_EMP.HIREDATE, 'yyyy-mm-dd') || ' 基本工資:' || V_EMP.SAL || ' 傭金:' || NVL(V_EMP.COMM, 0)); EXCEPTION WHEN OTHERS THEN raise_application_error(-20009,'此員工信息不存在'); END;
示例二、
DECLARE TYPE dept_type IS RECORD( deptno dept.deptno%TYPE:=99,--定義默認值 dname dept.dname%TYPE, loc dept.loc%TYPE ); v_dept dept_type; BEGIN v_dept.dname:='TT'; --為記錄類型成員賦值 v_dept.loc:='上海'; dbms_output.put_line('部門編號:'||v_dept.deptno||' 部門名稱:'||v_dept.dname||' 部門位置:'||v_dept.loc); END;
示例三、定義嵌套的記錄類型
DECLARE TYPE DEPT_TYPE IS RECORD( DEPTNO DEPT.DEPTNO%TYPE := 99, --定義默認值 DNAME DEPT.DNAME%TYPE, LOC DEPT.LOC%TYPE); TYPE EMP_TYPE IS RECORD( --定義記錄類型 EMPNO EMP.EMPNO%TYPE, ENAME EMP.ENAME%TYPE, JOB EMP.JOB%TYPE, HIREDATE EMP.HIREDATE%TYPE, SAL EMP.SAL%TYPE, COMM EMP.COMM%TYPE, DEPT DEPT_TYPE); V_EMP EMP_TYPE; BEGIN SELECT E.EMPNO, E.ENAME, E.JOB, E.HIREDATE, E.SAL, E.EMPNO, D.DEPTNO, D.DNAME, D.LOC INTO V_EMP.EMPNO, V_EMP.ENAME, V_EMP.JOB, V_EMP.HIREDATE, V_EMP.SAL, V_EMP.COMM, V_EMP.DEPT.DEPTNO, V_EMP.DEPT.DNAME, V_EMP.DEPT.LOC FROM EMP E, DEPT D WHERE E.EMPNO = D.DEPTNO(+) AND EMPNO = &EMPNO; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' 員工編號:' || V_EMP.EMPNO || ' 姓名:' || V_EMP.ENAME || ' 職位:' || V_EMP.JOB || ' 入職日期:' || TO_CHAR(V_EMP.HIREDATE, 'yyyy-mm-dd') || ' 基本工資:' || V_EMP.SAL || ' 傭金:' || NVL(V_EMP.COMM, 0)); DBMS_OUTPUT.PUT_LINE('部門編號:' || V_EMP.DEPT.DEPTNO || ' 部門名稱:' || V_EMP.DEPT.DNAME || ' 部門位置:' || V_EMP.DEPT.LOC); END;
示例四、增加一條新的記錄
DECLARE TYPE DEPT_TYPE IS RECORD( DEPTNO DEPT.DEPTNO%TYPE, --定義默認值 DNAME DEPT.DNAME%TYPE, LOC DEPT.LOC%TYPE ); V_DEPT DEPT_TYPE; BEGIN V_DEPT.deptno:=&deptno; V_DEPT.DNAME:='&dname'; --為記錄類型成員賦值 V_DEPT.LOC:='&loc'; INSERT INTO dept VALUES v_dept; --直接插入記錄類型 END;
示例五、修改一條記錄
DECLARE TYPE DEPT_TYPE IS RECORD( DEPTNO DEPT.DEPTNO%TYPE, --定義默認值 DNAME DEPT.DNAME%TYPE, LOC DEPT.LOC%TYPE ); V_DEPT DEPT_TYPE; BEGIN V_DEPT.deptno:=&deptno; V_DEPT.DNAME:='&dname'; --為記錄類型成員賦值 V_DEPT.LOC:='&loc'; UPDATE dept SET ROW=v_dept WHERE deptno=v_dept.deptno; EXCEPTION WHEN OTHERS THEN dbms_output.put_line('沒有這個部門'); END;