<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kxbin
    成功留給有準(zhǔn)備的人
    posts - 10,  comments - 35,  trackbacks - 0
    pl/sql表和記錄一樣,都是用戶自定義的數(shù)據(jù)結(jié)構(gòu)。record類似于c語(yǔ)言中結(jié)構(gòu)(struct)而pl/sql表類似于c語(yǔ)言的數(shù)組或集合,只是這個(gè)數(shù)據(jù)的元素可以是用戶自定義的類型。record可以存儲(chǔ)一條記錄,而pl/sql表可以存儲(chǔ)多條record記錄。
    一,什么是記錄(Record)?
     由單行多列的標(biāo)量構(gòu)成的復(fù)合結(jié)構(gòu)。可以看做是一種用戶自定義數(shù)據(jù)類型。組成類似于多維數(shù)組。
    將一個(gè)或多個(gè)標(biāo)量封裝成一個(gè)對(duì)象進(jìn)行操作。是一種臨時(shí)復(fù)合對(duì)象類型。
     
     記錄可以直接賦值。RECORD1 :=RECORD2;
     記錄不可以整體比較.
     記錄不可以整體判斷為空。
     
    二,%ROWTYPE和記錄(Record)?
     請(qǐng)區(qū)別%ROWTYPE和記錄(Record)類型。%ROWTYPE可以說(shuō)是Record的升級(jí)簡(jiǎn)化版。
     區(qū)別在與前者結(jié)構(gòu)為表結(jié)構(gòu),后者為自定義結(jié)構(gòu)。二者在使用上沒(méi)有很大區(qū)別。前者方便,后者靈活。在實(shí)際中根據(jù)情況來(lái)具體決定使用。
     Record + PL/SQL表可以進(jìn)行數(shù)據(jù)的多行多列存儲(chǔ)。
     
    三,如何創(chuàng)建和使用記錄?
     
      ①創(chuàng)建記錄類型
      語(yǔ)法:
      TYPE  記錄名  IS RECORD 
      ( 
       filed1 type1 [NOT NULL] [:=eXPr1],
           ....... ,
        filedN typen [NOT NULL] [:=exprn] 
      )
      其中,filed1是標(biāo)量的名字。
      
      ②聲明記錄類型變量:
       記錄類型變量名 記錄類型
       
      ③填充記錄。
       
      ④訪問(wèn)記錄成員
       記錄類型變量名.filed1
       .........
       記錄類型變量名.filedN
       
       
      注意:
      表字段類型修改后,還需要修改記錄字段類型,有時(shí)候可能會(huì)忘記,從而出現(xiàn)錯(cuò)誤。
      對(duì)于記錄內(nèi)每個(gè)字段(filed1.。。。),可以指定也可以使用%TYPE和%ROWTYPE動(dòng)態(tài)指定記錄字段類型。 
      好處是表字段發(fā)生變化,記錄字段自動(dòng)改變。但是,由于每次執(zhí)行前,遇到%TYPR或%ROWTYPE,
      數(shù)據(jù)庫(kù)系統(tǒng)都會(huì)去查看對(duì)應(yīng)表字段類型,會(huì)造成一定的數(shù)據(jù)庫(kù)開(kāi)銷,如果系統(tǒng)中大量使用記錄類型,則對(duì)性能會(huì)有一定影響。
      另外如果刪除了某一字段,而自定義記錄中使用了該字段,也會(huì)有可能忘記刪除該字段。
           對(duì)數(shù)據(jù)庫(kù)負(fù)荷偏低的系統(tǒng),性能問(wèn)題一般可以不重點(diǎn)關(guān)注,但是對(duì)于高負(fù)荷數(shù)據(jù)庫(kù)服務(wù)器,
           各個(gè)環(huán)節(jié)都要考慮性能問(wèn)題,每處節(jié)省一點(diǎn)出來(lái),性能整體就有很大提高。
      
      語(yǔ)法:
      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動(dòng)態(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ù)關(guān)系。
     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ù)表結(jié)構(gòu)合理安排記錄字段。比如主外鍵。
     如果用記錄(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);
     
      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ù)?
     刪除記錄時(shí),只能在delete語(yǔ)句的where子句中使用記錄成員。 
    posted on 2012-09-05 21:52 kxbin 閱讀(357) 評(píng)論(0)  編輯  收藏 所屬分類: ORACLE轉(zhuǎn)發(fā)
    你恨一個(gè)人是因?yàn)槟銗?ài)他;你喜歡一個(gè)人,是因?yàn)樗砩嫌心銢](méi)有的;你討厭一個(gè)人是因?yàn)樗砩嫌心阌械臇|西;你經(jīng)常在別人面前批評(píng)某人,其實(shí)潛意識(shí)中是想接近他。

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(5)

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    收藏夾

    J2EE

    java技術(shù)網(wǎng)站

    Linux

    平時(shí)常去的網(wǎng)站

    數(shù)據(jù)庫(kù)

    電影網(wǎng)站

    網(wǎng)站設(shè)計(jì)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 久久精品国产亚洲av品善| 日韩精品视频免费观看| 成人福利在线观看免费视频| 亚洲免费一级视频| 久久久青草青青亚洲国产免观| 日美韩电影免费看| 日本免费xxxx色视频| 成全视频在线观看免费| 免费人成网上在线观看| 亚洲一区二区三区在线观看蜜桃| 亚洲国产精品国自产拍AV| 免费国产一级特黄久久| 成年女人18级毛片毛片免费| 最近2019中文字幕免费大全5| 国产日韩久久免费影院| 男人j进女人p免费视频| 亚洲av无码片vr一区二区三区 | 亚洲午夜久久久精品电影院| 亚洲国产精品无码久久久秋霞2 | 亚洲av日韩综合一区久热| 亚洲乱码一二三四区麻豆| 婷婷亚洲综合五月天小说| 久久91亚洲人成电影网站| 亚洲人JIZZ日本人| 亚洲一区AV无码少妇电影☆| 狠狠色婷婷狠狠狠亚洲综合 | 亚洲国产一区二区三区在线观看| 亚洲一区中文字幕在线观看| 亚洲精品乱码久久久久久下载| 精品久久久久久亚洲综合网| 亚洲一卡二卡三卡| 激情内射亚洲一区二区三区爱妻 | 18级成人毛片免费观看| 91在线手机精品免费观看| 久久99国产综合精品免费| 99久久精品国产免费| 99re免费视频| 2021久久精品免费观看| 妞干网手机免费视频| 热99re久久精品精品免费| 国产一级理论免费版|