久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Oracle系列:記錄Record

     aaie_ 2014-07-19

    Oracle系列:記錄(Record)

    一,什么是記錄(Record)?
     由單行多列的標量構成的復合結構。可以看做是一種用戶自定義數(shù)據(jù)類型。組成類似于多維數(shù)組。
    將一個或多個標量封裝成一個對象進行操作。是一種臨時復合對象類型。
     
     記錄可以直接賦值。RECORD1 :=RECORD2;
     記錄不可以整體比較.
     記錄不可以整體判斷為空。
     
    二,%ROWTYPE和記錄(Record)?
     請區(qū)別%ROWTYPE和記錄(Record)類型。%ROWTYPE可以說是Record的升級簡化版。
     區(qū)別在與前者結構為表結構,后者為自定義結構。二者在使用上沒有很大區(qū)別。前者方便,后者靈活。在實際中根據(jù)情況來具體決定使用。
     Record + PL/SQL表可以進行數(shù)據(jù)的多行多列存儲。
     
    三,如何創(chuàng)建和使用記錄?
     
      ①創(chuàng)建記錄類型
      語法:
      TYPE  記錄名  IS RECORD
      (
       filed1 type1 [NOT NULL] [:=eXPr1],
           ....... ,
        filedN typen [NOT NULL] [:=exprn]
      )
      其中,filed1是標量的名字。
      
      ②聲明記錄類型變量:
       記錄類型變量名 記錄類型
       
      ③填充記錄。
       
      ④訪問記錄成員
       記錄類型變量名.filed1
       .........
       記錄類型變量名.filedN
       
       
      注意:
      表字段類型修改后,還需要修改記錄字段類型,有時候可能會忘記,從而出現(xiàn)錯誤。
      對于記錄內(nèi)每個字段(filed1.。。。),可以指定也可以使用%TYPE和%ROWTYPE動態(tài)指定記錄字段類型。 

      好處是表字段發(fā)生變化,記錄字段自動改變。但是,由于每次執(zhí)行前,遇到%TYPR或%ROWTYPE,
      數(shù)據(jù)庫系統(tǒng)都會去查看對應表字段類型,會造成一定的數(shù)據(jù)庫開銷,如果系統(tǒng)中大量使用記錄類型,則對性能會有一定影響。
      另外如果刪除了某一字段,而自定義記錄中使用了該字段,也會有可能忘記刪除該字段。
           對數(shù)據(jù)庫負荷偏低的系統(tǒng),性能問題一般可以不重點關注,但是對于高負荷數(shù)據(jù)庫服務器,
           各個環(huán)節(jié)都要考慮性能問題,每處節(jié)省一點出來,性能整體就有很大提高。
      
      語法:
      TYPE  記錄名  IS RECORD
      (
       filed1 table.Filed%Type [NOT NULL] [:=eXPr1] ,
       filed2 table.Filed%Type [NOT NULL] [:=eXPr1] ,
           ....... ,
        filedn table.Filed%Type [NOT NULL] [:=exprn]
      );
     
     例子:記錄可以整體賦值
     /*conn scott/tiger
     Create Table  empa  As  Select * From emp;
     */
     Declare
         Type EmpType is Record(
            EMPNO number(4),
            ENAME  varchar2(10),
            JOB varchar2(15),
            SAL number(7,2),
            DEPTNO number(2)
         );
       EmpRec1  EmpType;
       EmpRec2  EmpType;
     Begin
       EmpRec1.Empno:=7369;
       EmpRec1.Ename:='SMITH';
       EmpRec1.Job:='CLERK';
       EmpRec1.Sal:=800;
       EmpRec1.Deptno:=10;
       EmpRec2 := EmpRec1;
       DBMS_output.put_line(EmpRec2.empno);
     End;
     例子:記錄不可以整體比較,只可以比較記錄字段
     Declare
         Type EmpType is Record(
            EMPNO number(4),
            ENAME  varchar2(10),
            JOB varchar2(15),
            SAL number(7,2),
            DEPTNO number(2)
         );
       EmpRec1  EmpType;
       EmpRec2  EmpType;
     Begin
       EmpRec1.Empno:=7369;
       EmpRec1.Ename:='SMITH';
       EmpRec1.Job:='CLERK';
       EmpRec1.Sal:=800;
       EmpRec1.Deptno:=10;
       if EmpRec1.sal < EmpRec2.sal then
         DBMS_output.put_line('Xiao Xiao Xiao');
       end if;
     End;
     
     例子:記錄不可以整體判斷為空,只可以判斷記錄字段。
     Declare
         Type EmpType is Record(
            EMPNO number(4),
            ENAME  varchar2(10),
            JOB varchar2(15),
            SAL number(7,2),
            DEPTNO number(2)
         );
       EmpRec  EmpType;
     Begin
       if EmpRec.ename is null then
         DBMS_output.put_line('Kong Kong Kong'); 
       end if;
     End;
     
     例子:使用%TYPE和%ROWTYPE動態(tài)指定記錄字段。
     /*conn scott/tiger
     Create Table  empa  As  Select * From emp;
     */
     DECLARE
      Type MyRecType Is  Record
      (
       RENO  EMPA.EMPNO%Type,
       RENAME   EMPA.ENAME%Type,
       RJOB   EMPA.JOB%Type
      );
      EmpRec  MyRecType;
     Begin
      Select   EMPNO, ENAME, JOB  InTo  EmpRec  From empa Where empa.EMPNO = '7369';
      If  EmpRec.RJOB  = 'CLERK'  Then
       DBMS_OUTPUT.PUT_LINE('Name: '||EmpRec.RENAME);
      End If;
     End;
     
     例子:數(shù)據(jù)集中的記錄和記錄類型中的數(shù)據(jù)關系。
     DECLARE
      Type MyRecType Is  Record
      (
       RENO  EMPA.EMPNO%Type,
       RENAME   EMPA.ENAME%Type,
       RJOB   EMPA.JOB%Type
      );
      EmpRec  MyRecType;
      vJob  EMPA.JOB%Type;
     Begin
      Select   EMPNO, ENAME, JOB  InTo  EmpRec  From empa Where empa.EMPNO = '7369';
      DBMS_OUTPUT.PUT_LINE('MyRecType.RJOB: '||EmpRec.RJOB);
      EmpRec.RJOB  := '修改值后'  ;
      DBMS_OUTPUT.PUT_LINE('MyRecType.RJOB: '||EmpRec.RJOB);
      Select JOB  InTo vJob  from empa  Where empa.EMPNO = EmpRec.RENO;
      DBMS_OUTPUT.PUT_LINE('EMPA.JOB: '||vJob);
     End;
     /
     
     
    四,使用記錄向表中插入數(shù)據(jù)?
     根據(jù)表結構合理安排記錄字段。比如主外鍵。
     如果用記錄(RECORD)插入數(shù)據(jù),那么只能使用記錄成員;
     如果用%ROWTYPE插入數(shù)據(jù),可以直接使用%ROWTYPE。
     
     例子:使用記錄成員向表中插入數(shù)據(jù)
     DECLARE
      Type MyRecType Is  Record
      (
       RENO  EMPA.EMPNO%Type,
       RENAME   VARCHAR2(10),
       RJOB   EMPA.JOB%Type
      );
      EmpRec MyRecType; 
     Begin
      Select   EMPNO, ENAME, JOB  InTo  EmpRec  From empa Where empa.EMPNO = '7369';
      DBMS_OUTPUT.PUT_LINE(EmpRec.RENO||'  '||EmpRec.RENAME||'  '||EmpRec.RJOB);
      
      EmpRec.RENO  := 1001;
      EmpRec.RENAME := '杰克';
      EmpRec.RJOB  := '辦事員';

      Insert InTo  empa(EMPNO,ENAME,JOB)  Values(EmpRec.RENO, EmpRec.RENAME,EmpRec.RJOB);
      Insert InTo empa values EmpRec;  --實現(xiàn)記錄插入 


      Select  EMPNO, ENAME, JOB  InTo  EmpRec  From empa Where empa.EMPNO = '1001';
      DBMS_OUTPUT.PUT_LINE(EmpRec.RENO||'  '||EmpRec.RENAME||'  '||EmpRec.RJOB);
     End;
     
    五,使用記錄更新數(shù)據(jù)?
     如果用記錄(RECORD)更新數(shù)據(jù),那么只能使用記錄成員;
     如果用%ROWTYPE更新數(shù)據(jù),可以直接使用%ROWTYPE。
     
     例子:使用%ROWTYPE向表中插入數(shù)據(jù)
     DECLARE
      vEmp empa%RowType;
     Begin
      Select  *  InTo  vEmp  From empa Where empa.EMPNO = '7369';
      UpDate empa Set ROW = vEmp Where EMPNO = 1001;
     End;

    六,使用記錄刪除數(shù)據(jù)?
     刪除記錄時,只能在delete語句的where子句中使用記錄成員。

      本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 一本色道久久东京热| 亚洲AV日韩AV永久无码电影| 疯狂做受XXXX高潮国产| 无码人妻丰满熟妇区五十路在线| 成年福利片在线观看| 国产精品久久久久免费观看 | 在厨房被C到高潮A毛片奶水| 国产精品黑色丝袜在线观看| 亚洲成人av在线资源| 成年福利片在线观看| 亚洲熟妇无码乱子AV电影| 国产999精品2卡3卡4卡| 国产中文三级全黄| 久久99热只有频精品6狠狠| 欧洲精品一卡2卡三卡4卡影视| 国产一区二区不卡91| 午夜福利片1000无码免费| 国产卡一卡二卡三精品| 少妇办公室好紧好爽再浪一点 | 高清无码一区二区在线观看| 人人妻人人狠人人爽| 毛片无遮挡高清免费| 福利一区二区在线观看| 欧美日韩精品一区二区三区不卡 | 亚洲欧美日韩成人综合一区 | 成人3D动漫一区二区三区| 久久综合色之久久综合| 无码人妻斩一区二区三区| 国产一区二区精品久久| A级孕妇高清免费毛片| 日韩有码国产精品一区| 亚洲精品国产精品乱码视色| 色欲国产精品一区成人精品| 国产福利酱国产一区二区| 手机看片AV永久免费| 人人人澡人人肉久久精品| 亚洲色成人一区二区三区人人澡人人妻人人爽人人蜜桃麻豆 | 少妇人妻无码专区视频| 日韩AV高清在线看片| 国产999久久高清免费观看| 中文字幕亚洲无线码在线一区|