国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

在Oracle9i Release 2中使用PL/SQL的集合增強

2024-08-29 13:37:49
字體:
來源:轉載
供稿:網友

  Oracle Release 2提供對PL/SQL集合的增強,它可以通過以前的發布版本進行代碼維護。例如,你可以在Release 2中將PL/SQL集合用作一個單一的參數,從而避免了使用一長串的域作為參數。
  
  另外一個優點是記錄的集合現在可以是BULK COLLECTION INTO子句的目標。在Release 2以前,我們必須為返回的每個列創建一個集合。例如:
  
  Declare
    type deptno_coll is table of dept.deptno%type;
    type dname_coll is table of dept.dname%type;
    type loc_coll is table of dept.loc%type;
    deptno_listdeptno_coll;
    dname_listdname_coll;
    loc_listloc_coll;
  begin
    select * bulk collect into deptno_list,dname_list,loc_list from dept;
  end;
  
  在Release 2中,可以用下面的代碼實現同樣的功能:
  
  Declare
    type dept_coll is table of dept%rowtype;
    dept_listdept_coll;
  begin
    select * bulk collect into dept_list from dept;
  end;
  
  注重這里不再有對列名的引用。假如DEPT表的列的個數或者名字被修改,你也不需要對第二段示例代碼進行改動。這段代碼還比舊版本易于維護。然而,應用程序需要一個Release 2數據庫來編譯。
  
  現在你可以使用記錄以集合方式將一行數據插入到一個表中。在Release 2之前,你必須插入到表中一個PL/SQL記錄然而再單獨地確定每一列,作法如下:
  
  Declare
    dept_rowdept%rowtype;
  begin
    /* populate dept_row . . . */
    insert into dept values (dept_row.deptno,dept_row.dname,dept_row.loc);
  end;
  
  而在Release 2中你可以將插入語句簡化為如下的語句:
  
    insert into dept values dept_row;
  
  記錄可以以集合方式更新一個表中的數據。像插入語句一樣,你以前必須單獨地更新每一列:
    update dept
      set deptno = dept_row.deptno,
        dname = dept_row.dname,
         loc = dept_row.loc
     where deptno = dept_row.deptno;
  
  而在Release 2中,你可以根據在記錄中的位置來更新整條數據:
  
    update dept set row = dept_row where deptno = dept_row.deptno;
  
 ?。ㄗ⒅亍癝ET ROW”是一個新子句。)
  
  你可以使用記錄從DML語句的RETURNING子句中提取信息。通常在更新數據的時候保持一個本地副本以備后面的PL/SQL操作會比較有用。在Release 2以前,我們可以在計算和調用完成之后使用RETURNING子句將數據存儲到某個地方。而在Release 2中,你可以把數據存儲到一條記錄中。例如,下面是Release 2之前的作法:
  
  Declare
    foorowfootab%rowtype;
  begin
    insert into footab (foono,fooname) values (fooseq.nextval,'Foo')
     returning foono,fooname into foorow.foono,foorow.fooname;
  end;
  
  而現在你可以把插入語句簡化為:
  
    insert into footab (foono,fooname) values (fooseq.nextval,'Foo')
      returning foono,fooname into foorow;
  
  這些增強使得語法更加易讀,并能幫助我們避免由于在返回語句中將表匹配錯誤所引起的程序錯誤。但是要記住這些增強要依靠于表和記錄中第一列的物理位置。假如一個表的列的位置發生改變,那么列的順序也會改變。因此,在一個數據庫表中使用ROWTYPE匹配列比顯式地列出列名要好。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 枞阳县| 紫阳县| 遵化市| 荆州市| 诏安县| 都昌县| 大埔县| 广东省| 秦皇岛市| 台南县| 烟台市| 张家川| 永新县| 建宁县| 合山市| 定南县| 重庆市| 格尔木市| 凤台县| 花莲市| 五大连池市| 吉木萨尔县| 许昌县| 扶沟县| 曲麻莱县| 宝兴县| 西青区| 当涂县| 长岭县| 内乡县| 怀柔区| 邯郸县| 宜黄县| 安吉县| 巩义市| 渑池县| 定襄县| 福泉市| 洞口县| 河曲县| 神农架林区|