Oracle集合(collection)型態中的Nested Table(表格類型)的index是從1開始起算。
例如下面PL/SQL block中LOOP Nested Table如果從index為0開始會出現錯誤
ORA-06532: 子命令檔超出限制
、
ORA-06532: Subscript outside of limit
。
DECLARE
TYPE nested_table_type IS TABLE OF VARCHAR2(30); -- 定義nested_table_type為Nested Table集合資料型態
v_nt nested_table_type; -- 宣告v_nt變數型態為nested_table_type
BEGIN
v_nt := nested_table_type('apple', 'banana', 'guava'); -- 設定v_nt的值
FOR i IN 0 .. v_nt.COUNT -- ORA-06532錯誤,Nested Table變數的index起始值為1
LOOP
DBMS_OUTPUT.PUT_LINE(v_nt(i));
END LOOP;
END;
Nested Table變數的index起始值應該為1如下。
DECLARE
TYPE nested_table_type IS TABLE OF VARCHAR2(30); -- 定義nested_table_type為Nested Table集合資料型態
v_nt nested_table_type; -- 宣告v_nt變數型態為nested_table_type
BEGIN
v_nt := nested_table_type('apple', 'banana', 'guava'); -- 設定v_nt的值
FOR i IN 1 .. v_nt.COUNT -- Nested Table變數的index起始值為1
LOOP
DBMS_OUTPUT.PUT_LINE(v_nt(i));
END LOOP;
END;
或是改用collection methods的FIRST
及LAST
。
DECLARE
TYPE nested_table_type IS TABLE OF VARCHAR2(30); -- 定義nested_table_type為Nested Table集合資料型態
v_nt nested_table_type; -- 宣告v_nt變數型態為nested_table_type
BEGIN
v_nt := nested_table_type('apple', 'banana', 'guava'); -- 設定v_nt的值
FOR i IN v_nt.FIRST .. v_nt.LAST -- 改用FIRST, LAST
LOOP
DBMS_OUTPUT.PUT_LINE(v_nt(i));
END LOOP;
END;
沒有留言:
張貼留言