PL/SQL에서 2차원 배열 생성 또는 시뮬레이션
저장 프로시저를 위해 PL/SQL에 2차원 배열을 생성하는 방법을 도와줄 수 있습니까?열은 동적이기 때문에 유형에 따라 증가하고 변경될 수도 있습니다.어떤 도움이든 감사합니다.잘 부탁드립니다!
다음 코드가 있습니다.
Type CAR_TABLE_ARRAY is varray(2) of varchar2(255);
TYPE CAR_TABLE_TYPE IS TABLE OF CAR_TABLE_ARRAY;
CAR_TABLE CAR_TABLE_TYPE;
CAR_TABLE := CAR_TABLE_TYPE();
CAR_TABLE.EXTEND(10);
CAR_TABLE(1)(1) := 'DODGE';
CAR_TABLE(2)(1) := 'FORD';
CAR_TABLE(3)(1) := 'MUSTANG';
CAR_TABLE(4)(1) := 'EDSEL';
CAR_TABLE(5)(1) := 'STUDEBAKER';
DBMS_OUTPUT.put_line( '1 ' || CAR_TABLE(1)(1) );
DBMS_OUTPUT.put_line( '2 ' || CAR_TABLE(2)(1) );
DBMS_OUTPUT.put_line( '3 ' || CAR_TABLE(3)(1) );
DBMS_OUTPUT.put_line( '4 ' || CAR_TABLE(4)(1) );
DBMS_OUTPUT.put_line( '5 ' || CAR_TABLE(5)(1) );
실행 시 다음 오류가 발생합니다.
ORA-06531: 초기화되지 않은 컬렉션에 대한 참조
다음은 pl/sql에서 다차원 배열을 사용하는 예입니다.여기서는 배열을 포함하는 배열을 사용합니다.
declare
type t_features is table of varchar(100) index by pls_integer;
type t_car_rec is record
(
make varchar2(50),
model varchar2(50),
features t_features
);
type t_car_tab is table of t_car_rec index by pls_integer;
car_tab t_car_tab;
procedure show_detail is
car_idx pls_integer;
features_idx pls_integer;
begin
car_idx := car_tab.first;
loop
exit when car_idx is null;
dbms_output.put_line('Details for ' || car_tab(car_idx).make || ' ' || car_tab(car_idx).model);
features_idx := car_tab(car_idx).features.first;
loop
exit when features_idx is null;
dbms_output.put_line(' =>' || car_tab(car_idx).features(features_idx));
features_idx := car_tab(car_idx).features.next(features_idx);
end loop;
car_idx := car_tab.next(car_idx);
end loop;
end;
begin
-- using sequential index values
car_tab(1).make := 'Ferrari';
car_tab(1).model := 'Testarossa';
car_tab(1).features(1) := 'Fast';
car_tab(1).features(2) := 'Looks cool';
car_tab(1).features(3) := 'Expensive';
-- using random index values (sparse)
car_tab(2).make := 'Acura';
car_tab(2).model := 'TSX';
car_tab(2).features(14) := 'Small';
car_tab(2).features(200) := 'Good MPG';
car_tab(2).features(36) := 'Inexpensive';
show_detail;
end;
출력은 다음과 같습니다.
Details for Ferrari Testarossa
=>Fast
=>Looks cool
=>Expensive
Details for Acura TSX
=>Small
=>Inexpensive
=>Good MPG
도움이 되길 바랍니다.
VARRAY 및 중첩 테이블 사용자 정의 데이터 유형은 항상 생성자를 사용하여 초기화해야 합니다.중첩된 테이블에 대해서는 이 작업이 올바르게 수행되고 있지만, 포함된 VARRAY에 대해서는 그렇지 않습니다.가장 간단한 해결 방법은 할당 줄에서 생성자를 호출하는 것입니다.
declare
Type CAR_TABLE_ARRAY is varray(2) of varchar2(255);
TYPE CAR_TABLE_TYPE IS TABLE OF CAR_TABLE_ARRAY;
CAR_TABLE CAR_TABLE_TYPE;
begin
CAR_TABLE := CAR_TABLE_TYPE();
CAR_TABLE.EXTEND(10);
CAR_TABLE(1) := CAR_TABLE_ARRAY('DODGE',null);
CAR_TABLE(2) := CAR_TABLE_ARRAY('FORD',null);
CAR_TABLE(3) := CAR_TABLE_ARRAY('MUSTANG',null);
CAR_TABLE(4) := CAR_TABLE_ARRAY('EDSEL',null);
CAR_TABLE(5) := CAR_TABLE_ARRAY('STUDEBAKER',null);
DBMS_OUTPUT.put_line( '1 ' || CAR_TABLE(1)(1) );
DBMS_OUTPUT.put_line( '2 ' || CAR_TABLE(2)(1) );
DBMS_OUTPUT.put_line( '3 ' || CAR_TABLE(3)(1) );
DBMS_OUTPUT.put_line( '4 ' || CAR_TABLE(4)(1) );
DBMS_OUTPUT.put_line( '5 ' || CAR_TABLE(5)(1) );
end;
이는 초기화되지 않은 내부 어레이를 참조하기 때문입니다.
다음과 같은 것을 추가합니다.
CAR_TABLE(1) := CAR_TABLE_ARRAY();
CAR_TABLE(1).EXTEND(1);
CAR_TABLE(2) := CAR_TABLE_ARRAY();
CAR_TABLE(2).EXTEND(1);
...
또는 내부 어레이(CAR_TABLE_ARARY)를 연관 어레이로 만듭니다.
Type CAR_TABLE_ARRAY is TABLE of varchar2(255) index by binary_integer;
언급URL : https://stackoverflow.com/questions/9155742/creating-or-simulating-two-dimensional-arrays-in-pl-sql
'programing' 카테고리의 다른 글
2차원 어레이 대 1차원 어레이의 성능 (0) | 2023.07.09 |
---|---|
git를 사용하여 한 분기의 파일을 무시하고 다른 분기에서 커밋하려면 어떻게 해야 합니까? (0) | 2023.07.04 |
Firebase에서 모든 노드 데이터를 로드하지 않고 노드의 자식 수를 가져올 수 있는 방법이 있습니까? (0) | 2023.07.04 |
C에서 사용 가능한 스택 크기 확인 중 (0) | 2023.07.04 |
JDBC를 사용하여 저장 프로시저에서 Oracle 테이블 유형 가져오기 (0) | 2023.07.04 |