程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 記錄類型(學習筆記),記錄類型學習筆記

記錄類型(學習筆記),記錄類型學習筆記

編輯:Oracle教程

記錄類型(學習筆記),記錄類型學習筆記


定義記錄類型

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;

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved