一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

pl/sql記錄與indexby表.doc

 ctbtcol 2014-10-29

 

標(biāo)量數(shù)據(jù)類型

 

Number 系列及其子類型

Char 系列及其子類型

Date 等比列及其子類型

Interval 系列 (oracle 9i 特有 )

Timestamp 系列 (oracle 9i 特有 )

MSLABEL 系列

復(fù)合數(shù)據(jù)類型

記錄類型 (record) 、 Index-By

嵌套表、 Varray

對象數(shù)據(jù)類型

Object 類型、 OBLECT REF 、 LOB 類型、

Sys.AnyType 、 SYS.ADYDATA SYS.ANYDATASET(oracle 9i 特有 )

其它 pl/sql 特有的數(shù)據(jù)類型

BOOLEAN 、 BINARY_INTEGER 、 PLS_INTEGER 、 %TYPE REF CURSOR

SYS_REFCURSOR(oracle 9i 特有 )

用戶定義子類型

記錄

       pl/sql 中可以定義三種類型的記錄 : 顯式定義的記錄,面向數(shù)據(jù)庫表的記錄,面向游標(biāo)的記錄。

 

記錄的定義其語法如下:

Type record_type_name is record(

       Field_name1 datatype not null default

)

 

例子:

Type person_rec  is record (

       Name varchar2(100);

    Address varchar2(200);

);

記錄類型變量的聲名

  vperson person_rec;

 

type …record 只是一種操象的定義,因此,它不能由它自己使用, type.. record 不會占用任何資源,直到專名該類型的變量時才占用資源

 

記錄類型的使用

  記錄類型的變量定義以后,接下來就是使用記錄來處理數(shù)據(jù)。

  1 、訪問記錄中的遠素

  2 、測試記錄是否相等

      記錄比較應(yīng)比較完記錄的每個字段 , 看它們是否相等,把記錄看作整體來比較的做的作法是錯誤的。

記錄的使用就像一個對象??梢詫λM行賦值, oracle 9i 中有幾種賦值方法:

1)    對各個字段賦值

2)    使用 select into 語句填充一個記錄

3)    使用 fetch into 語句填充一個記錄

4)    使用一個記錄為另一個記錄賦值(聚集賦值)

 

其它記類型

1         面向表的記錄類型

  定義 :

   Record_var_name  table_name%rowtype;

                使用:

          Select * into record_var_name from hrc_tab where id=?

2         面向游標(biāo)的記錄類型

Declare

   Cursor csr_hrc is select * from hrc_tab order by 1;

   hrc_rec csr_hrc%rowtype;

begin

   …….loop

              Fetch csr_hrc into hrc_rec

        Exit when csr_hrc%not found

…..

   End loop;

end;

涉及整個 pl/sql 記錄的 DML 操作(特指 insert ,update select

 Insert into hrc_tab values record_var_name

 

 Update  hrc_tab set ROW=record_var_name where hrc_code=’99’

 

Index-by

  Index-by 表是一同一個與數(shù)組類似的同質(zhì)元素的集合組成的一種復(fù)合數(shù)據(jù)類型。集合中的元素稀   分布且沒有限定邊界,只是由一個整數(shù)索引將其連接在一起。

 

定義 Index-by 表的型

   Type table_name_type is table of type [not null] index by binary_integer

下面是一個聲明這種類型的示例

  Type num_tab is table of number index by binary_integer

聲明表類型的變量

  V_num_tab num_tab;

Index-by 表的使用

index-by 表是兩列的(一列索引,另一列是對應(yīng)的值)結(jié)構(gòu),

index-by pl/sql 特有,所以在 sql 中它們自然就不可用,另外,也不能存儲在數(shù)據(jù)庫中,這樣導(dǎo)致不能在 index-by 表中使用 select ,insert ,update delete SQL  DML 操作。對 index-by 表來說沒有 commit rollback ,一個例子:

 declare

    type num_tab is table of number index by binary_integer;

    v_example_tab num_tab;

  v_num number:=13;

begin

       v_example_tab(1):=1001;

    v_example_tab (0):=1002;

    v_example_Tab(-10):=1003

    v_example_tab(v_num):=1004p;

    dbms_output.put_line(to_char(v_example_tab(-10))|| …..)

end;

 

可以使用任何與 binary_integer 相兼容的文字,變量或表達式作為 index-by 表的索引

 

可樣也可以把一個 index-by 表賦值給另一個 index-by 表。

 declare

   type num_tab is table of number index by binary_integer;

   v_example_tab1  num_tab;

v_example_tab2 num_tab;

 begin

       v_example_tab1:= v_example_tab2;

end;

 

index-by 表中只有在賦值時才可以創(chuàng)建行,因些在賦值以前,行是一存在的,這是因為 index-by 表沒有上下界,訪問沒定義的行會出現(xiàn) N)_DATA_FOUND 行。

 

Index-by 表的填充有三種方法:

 1 通過賦值創(chuàng)建元素行,

 2 使用 loop index-by 表的行賦值

 3 用一個 index-by 表為另一個 index-by 表賦值

第一種方法前面用了,第二種方法就是一個循環(huán)了,如 :

Declare

   Type num_tab is table of number index by binary_integer;

   V_Example_tab num_tab;

Begin

       For idx in 1..10 loop

       V_example_tab(idx) :=(2*idx)+1

    End loop;

End;

 

刪除 Index-by

       有兩種方法:

1、  定義一下與已填充的 index-by 表類型相同的空的 index-by 表,然后用該表執(zhí)行聚集賦值

2、  使用 index-by 表的 delete 方法。

Index-by 表的方法:

 

方法

用途

語法

Exits

檢查某個元素是否存在,如果存在,返回值是 true ,反之面,返回 false

Table_name.exists(index)

Count

返加已確定的元素個數(shù)

Table_name.count

Delete

刪除一部墜毀(也包括沒定義的)或全部元素,如刪除開始索引與結(jié)束索引之間的表元素

Table_name.delete 刪全部

Table_name.delete(index) 刪除指定索引的

fIrst

返回 index-by 表中第一行的索引值,如果不存在就返回 null

Table_name.first

Last

返回 index-by 表中最后一行的,不存在返回 null

Table_name.last

Next

返回 index-by 表中由特定索引指定的下一行的索引,不存在返回 null

Table_name.next

 

Prior

返回 index-by 表中由特定索引指定的前一行索引,如果不存在返回 null

Table_name.prior

 

方法使用例子:

If  v_example.exists(100)  then

       dbms_output.put_line(to_char(v_example.exists(100)));

End if ;

 

For udx  in 1..v_example.count loop  // 用這種方法必須要確定行是連續(xù)填充的,下界是一個 // 定的值。

       Dbms_output.put_line(to_char(v_example_tab(idx)));

End loop;

 

V_example_tab.delete(1) ; // 刪除第一個索引的記錄

V_example_tab.delete(2,5);// 刪除第 2 至第 5 個索引記錄

V_example_tab.delete;// 刪除所有記錄

 

使用 first,last,next 方法的例子

Idx:=v_example_tab.first;

Loop

       Dbms_output.put_line();

Exit when  idx:=v_example_tab.last;

Idx:=v_example_tab.next();

End loop;

 

這樣遍歷一個 index-by 表是最好的,表的記錄可以不連續(xù)。

 

記錄的 Index-by

 

定義 index-by 表的幾個步驟

 

1、  定義記錄類型

2、  定義記錄類型的表類型

3、  定義表類型的變量

 

一個例子:

Declare

 Type hrc_org_Rdc is record(

              Hrc_org_id  number,

        Hrc_descr var_char2(200)

  )

Type hrc_org_tab is table of hrc_org_rec index by binary_integer;

Begin

   Null;

End;

 

聯(lián)合數(shù)組

 

oracle 9i release 2 中,可以使用 varchar2 類型的索引代規(guī) binary_integer 類型的索引來定義 index-by 表,用 varchar2 索引作為數(shù)據(jù)庫表的關(guān)鍵字,可以提高數(shù)據(jù)庫的性能。

例子:

Declare

  Type site_ary is table of number index by varchar2(20);

  V_example_array site_ary;

Begin

       V_example_array(‘xx’):=10;

    V_example_array(‘yy’):=200;

End;

 

 

 

posted on 2006-09-15 14:20 有貓相伴的日子 閱讀(870) 評論(0)  編輯  收藏 所屬分類: pl/sql

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产亚洲精品香蕉视频播放| 日本中文字幕在线精品| 成人三级视频在线观看不卡| 亚洲欧洲在线一区二区三区| 亚洲一区二区福利在线| 精品国产亚洲免费91| 国产一区欧美一区日本道| 一区二区欧美另类稀缺| 国产色偷丝袜麻豆亚洲| 正在播放玩弄漂亮少妇高潮 | 亚洲天堂男人在线观看| 日韩中文字幕在线不卡一区| 在线免费观看黄色美女| 国产日韩欧美综合视频| 午夜精品久久久免费视频| 夜色福利久久精品福利| 久热在线视频这里只有精品| 国产亚洲视频香蕉一区| 91欧美一区二区三区成人| 国产福利在线播放麻豆| 大香蕉久草网一区二区三区| 精品人妻久久一品二品三品| 欧美区一区二区在线观看| 国产高清一区二区不卡| 在线免费国产一区二区| 成人午夜激情在线免费观看| 亚洲国产性生活高潮免费视频| 欧美精品久久一二三区| 亚洲欧美日韩中文字幕二欧美| 日韩精品区欧美在线一区| 一区二区三区在线不卡免费| 亚洲天堂有码中文字幕视频| 国产乱久久亚洲国产精品| 国产av大片一区二区三区| 好吊妞视频只有这里有精品| 欧美日韩亚洲巨色人妻| 一级片二级片欧美日韩| 欧美精品久久男人的天堂| 欧美一级特黄特色大色大片| 国产偷拍盗摄一区二区| 国产一区二区在线免费|