[SQL] 작성 또는 PL 두 차원 배열을 시뮬레이션 / SQL
SQL작성 또는 PL 두 차원 배열을 시뮬레이션 / SQL
내가 저장 프로 시저에 대한 PL / SQL의 두 차원 배열을 만들 수있는 방법을 도움이 저를 기쁘게 할 수 있습니까? 그것은 성장과 변화도 종류 수 있도록 열은 동적입니다. 어떤 도움에 감사드립니다. 사전에 감사합니다!
나는 다음과 같은 코드가 있습니다 :
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) );
내가 실행할 때 나는 다음과 같은 오류가 발생합니다 :
해결법
-
==============================
1.여기 다차원 배열 PL / SQL의 사용의 예이다. 여기서 I는 어레이를 포함하는 배열을 사용한다.
여기 다차원 배열 PL / SQL의 사용의 예이다. 여기서 I는 어레이를 포함하는 배열을 사용한다.
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
희망이 도움이
-
==============================
2.VARRAY 및 중첩 테이블 사용자 정의 데이터 유형은 항상 생성자를 사용하여 초기화해야합니다. 당신은 아닌 VARRAYs에 포함 된 것으로, 중첩 테이블 제대로 그 일을하고 있습니다. 간단한 수정 할당 라인의 생성자를 호출하는 것입니다 :
VARRAY 및 중첩 테이블 사용자 정의 데이터 유형은 항상 생성자를 사용하여 초기화해야합니다. 당신은 아닌 VARRAYs에 포함 된 것으로, 중첩 테이블 제대로 그 일을하고 있습니다. 간단한 수정 할당 라인의 생성자를 호출하는 것입니다 :
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;
-
==============================
3.그의 당신은 초기화되지 않은 내부 배열을 참조하고 있기 때문이다. 어느 무언가를 같이 추가 :
그의 당신은 초기화되지 않은 내부 배열을 참조하고 있기 때문이다. 어느 무언가를 같이 추가 :
CAR_TABLE(1) := CAR_TABLE_ARRAY(); CAR_TABLE(1).EXTEND(1); CAR_TABLE(2) := CAR_TABLE_ARRAY(); CAR_TABLE(2).EXTEND(1); ...
또는 연관 배열로 내부 배열 (CAR_TABLE ARRAY)을합니다
Type CAR_TABLE_ARRAY is TABLE of varchar2(255) index by binary_integer;
from https://stackoverflow.com/questions/9155742/creating-or-simulating-two-dimensional-arrays-in-pl-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 뷰에서 - 과학 표기법 (> 숫자 VARCHAR에서) 캐스팅 (0) | 2020.07.07 |
---|---|
[SQL] "알 수없는 '필드 목록'에서 열 ',하지만 열이 존재합니까 (0) | 2020.07.07 |
[SQL] 모든 행에 두 개의 열이 표시 총계에 의해 그룹 (0) | 2020.07.07 |
[SQL] 어떻게 ExecuteNonQuery는 ()를 사용할 때 발생하는 오류 메시지를받을 수 있나요? (0) | 2020.07.07 |
[SQL] 평균 및 그룹 별과 SQL 쿼리 (0) | 2020.07.07 |