PLSQL Language Referenc-PL/SQL集合和記錄-巢狀表

LuiseDalian發表於2014-03-12

巢狀表

在資料庫中,巢狀表是一種以不確定的順序儲存不確定數量的行的列型別。當從資料庫獲取巢狀表的值到PL/SQL巢狀表變數中,PL/SQL給行賦予從1開始的連續的索引。使用索引可以訪問巢狀表變數中的單獨的行。

variable_name(index)

當從資料庫獲取並儲存巢狀表的時候,巢狀表的索引和行的順序可能不會保持不變。

當增加或刪除元素的時候,巢狀表變數佔用的記憶體空間也會增加和減少。

一個未初始化的巢狀表是一個NULL集合。


DECLARE

    TYPE Roster IS TABLE OF VARCHAR2(15);  -- 巢狀表型別

    --使用構造器初始化巢狀表變數

    names Roster := Roster('AAAA', 'BBBB', 'CCCC', 'DDDD');

    PROCEDURE print_names (heading VARCHAR2) IS

    BEGIN

        DBMS_OUTPUT.PUT_LINE(heading);

        FOR i IN names.FIRST .. names.LAST LOOP  -- 迴圈所有元素

            DBMS_OUTPUT.PUT_LINE(names(i));

        END LOOP;

        DBMS_OUTPUT.PUT_LINE('---');

    END;

 

    BEGIN

    print_names('1:');

 

    names(3) := 'EEEE';  -- 改變元素的值

    print_names('2:');

 

    names := Roster('FFFF', 'GGGG');  -- 改變整個巢狀表

    print_names('3:');

END;

 

--獨立的儲存型別的巢狀表

CREATE OR REPLACE TYPE nt_type IS TABLE OF NUMBER;

/

CREATE OR REPLACE PROCEDURE print_nt (nt nt_type) IS

    i  NUMBER;

BEGIN

    i := nt.FIRST;

 

    IF i IS NULL THEN

        DBMS_OUTPUT.PUT_LINE('ntempty');

    ELSE

        WHILE i IS NOT NULL LOOP

            DBMS_OUTPUT.PUT('nt.(' || i || ') = ');

            print(nt(i));

            i := nt.NEXT(i);

        END LOOP;

    END IF;

 

    DBMS_OUTPUT.PUT_LINE('---');

END print_nt;

/

DECLARE

    nt nt_type := nt_type();  -- 巢狀表變數初始化為empty

BEGIN

    print_nt(nt);

    nt := nt_type(90, 9, 29, 58);

    print_nt(nt);

END;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1107986/,如需轉載,請註明出處,否則將追究法律責任。

相關文章