本文介紹Varray類型的定義和使用方法。

背景說明

Oracle中Varray可以嵌套定義,即Varray定義中可以引用已經定義的Varry,例如:
declare
    TYPE VAR_TYP IS VARRAY(20) OF NUMBER;
    TYPE VAR_TYP_2 IS VARRAY(10) OF VAR_TYP;
begin
    return '';
END pkg_subtype;

在PolarDB O引擎中,支持Varray類型的定義,但是不支持嵌套定義的語法,需要做簡單改造。

解決方案

PolarDB O引擎中Varry的定義方法:
TYPE varraytype IS { VARRAY | VARYING ARRAY }(maxsize)
  OF { datatype | objtype };
說明 OF后的具體類型只支持datatype與objtype,不支持varraytype。

示例

  • 對于嵌套定義的Varry做改造:
    declare
        TYPE VAR_TYP IS VARRAY(20) OF NUMBER;
        TYPE VAR_TYP_2 IS VARRAY(10) OF NUMBER;
    begin
        return '';
    END pkg_subtype;
  • DECLARE
        TYPE dname_varray_typ IS VARRAY(4) OF VARCHAR2(14);
        dname_varray    dname_varray_typ;
        CURSOR dept_cur IS SELECT dname FROM dept ORDER BY dname;
        i               INTEGER := 0;
    BEGIN
        dname_varray := dname_varray_typ(NULL, NULL, NULL, NULL);
        FOR r_dept IN dept_cur LOOP
            i := i + 1;
            dname_varray(i) := r_dept.dname;
        END LOOP;
        DBMS_OUTPUT.PUT_LINE('DNAME');
        DBMS_OUTPUT.PUT_LINE('----------');
        FOR j IN 1..i LOOP
            DBMS_OUTPUT.PUT_LINE(dname_varray(j));
        END LOOP;
    END;