2012-07-27 34 views
8

Tôi có trước mặt tôi một đoạn mã như thế này:Các mảng Oracle PL/SQL có được lập chỉ mục từ 0 hoặc từ 1 không?

FOR row IN 1..l_RowSet(1).count 
LOOP 
    l_a_variable := l_RowSet(1)(row); 
END LOOP; 

l_RowSet là một loại Apex - apex_plugin_util.t_column_value_list - được định nghĩa như sau:

type t_column_value_list is table of wwv_flow_global.vc_arr2 index by pls_integer; 

nơi wwv_flow_global.vc_arr2 được định nghĩa là

type vc_arr2 is table of varchar2(32767) index by binary_integer; 

vc_arr2 được chuyển lại mã của tôi từ hàm apex_plugin_util.get_data. Số vc_arr2 được lập chỉ mục bởi số cột, không phải theo hàng.

Tốt nhất là tôi có thể tạo ra điều này có nghĩa là dữ liệu được lưu trữ hiệu quả trong một mảng 2D, được lập chỉ mục theo cột và sau đó theo hàng.

Khi sử dụng câu lệnh LOOP, điều này có được lập chỉ mục từ 0 hoặc từ một không? Bởi vì có vẻ như với tôi rằng tôi nên để có thể làm cho điều đó LOOP không cần thiết, ví dụ:

l_a_variable := l_RowSet(1)(1); 

Nhưng tôi cần phải biết trước liệu để cung cấp cho 0 hoặc 1 như hàng ban đầu.

Tôi không thể tìm thấy câu trả lời rõ ràng trong tài liệu của Oracle (không ngạc nhiên, "chỉ mục" là cụm từ được sử dụng rộng rãi) và xem qua SO không hiển thị bất kỳ ai khác có cùng câu hỏi.

Trả lời

8

Mảng kết hợp không nhất thiết phải dày đặc. Có thể có một phần tử ở chỉ số 0, có thể có một phần tử ở chỉ mục -1, có thể có một phần tử ở chỉ mục 1. Hoặc bạn có thể có các phần tử ở các chỉ mục 17, 42 và 127. Mã bạn đã đăng ngụ ý rằng kết hợp mảng dày đặc và các chỉ mục bắt đầu tại 1.

Trong trường hợp cụ thể là apex_plugin_util.get_data, bộ sưu tập nên dày đặc và nên bắt đầu ở 1. Nếu vòng lặp thực sự không làm bất cứ điều gì khác với những gì bạn đăng, bạn có thể thay thế bằng cách tìm nạp phần tử cuối cùng của l_RowSet(1), tức là

l_a_variable := l_RowSet(1)(l_RowSet(1).count); 
+0

Cảm ơn. Tôi đã cập nhật câu hỏi để giải thích rõ hơn về những gì get_data làm. Nó * là * một bộ sưu tập 2D, theo cột rồi hàng. Cho rằng các mảng PL/SQL có thể thưa thớt, tôi sẽ cần phải khai thác thêm một số để xem những gì nó trả lại cho tôi "sống". –

+1

@JacquesChester - 'apex_plugin_util.get_data' trả về một tập hợp kiểu' t_column_value_list' là mảng đa chiều. Đã cập nhật câu hỏi và xóa cuộc thảo luận 1D/2D khỏi câu trả lời của tôi. –

Các vấn đề liên quan