[Oracle] 第17章 集合-记录类型


虽然PL/SQL提供了 ROWTYPE 的记录类型,但是 ROWTYPE 只能根据已有的表来决定复合类型,而记录类型可以由用户定义组成。

DECLARE
    V_EMP_EMPNO 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_EMP_EMPNO  := &inputEmpno;

    SELECT ENAME, JOB, HIREDATE, SAL, COMM
      INTO V_EMP
      FROM EMP
     WHERE EMPNO = V_EMP_EMPNO;

EXCEPTION
    WHEN OTHERS THEN 
        DBMS_OUTPUT.PUT_LINE('WRONG:' || SQLCODE || SQLERROR);
END;

直接声明的类型

DECLARE
    TYPE DEPT_TYPE IS RECORD(
        DEPTNO    DEPT.DEPTNO%TYPE := 80,
        DNAME     DEPT.DNAME%TYPE,
        LOC       DEPT.LOC%TYPE
    );

    V_DEPT   DEPT_TYPE;
BEGIN
    V_DEPT.DNAME := 'MLDN';
    V_DEPT.LOC   := 'peking';
EXCEPTION
    WHEN OTHERS THEN 
        DBMS_OUTPUT('WRONG:'|| SQLCODE || SQLERM);
END;

嵌套使用

DECLARE
    TYPE DEPT_TYPE IS RECORD(
        DEPTNO    DEPT.DEPTNO%TYPE,
        DNAME     DEPT.DNAME%TYPE,
        LOC       DEPT.LOC%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,
        DEPT      DEPT_TYPE
    );

    V_EMP EMP_TYPE;
BEGIN
    V_EMP_EMPNO  := &inputEmpno;

    SELECT E.ENAME,
           E.JOB,
           E.HIREDATE,
           E.SAL,
           E.COMM,
           D.DEPTNO,
           D.DNAME,
           D.LOC
           INTO 
           V_EMP.ENAME,
           V_EMP.JOB,
           V_EMP.HIREDATE,
           V_EMP.SAL,
           V_EMP.COMM,
           V_EMP.DEPTNO,
           V_EMP.DEPT.DEPTNO,
           V_EMP.DEPT.DNAME,
           V_EMP.DEPT.LOC      
      FROM EMP E, 
      LEFT JOIN DEPT D
        ON E.DEPTNO = D.DEPTNO
     WHERE E.EMPNO = V_EMP_EMPNO;
EXCEPTION
    WHEN OTHERS THEN 
        DBMS_OUTPUT('WRONG:'|| SQLCODE || SQLERM);
END;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值