반응형
PL/SQL에서 RECORD 컬렉션을 수동으로 초기화하는 방법은 무엇입니까?
여러분. 여기 PL/SQL의 간단한 2차원 배열 샘플이 있습니다. 완벽하게 작동합니다.
declare
type a is table of number;
type b is table of a;
arr b := b(a(1, 2), a(3, 4));
begin
for i in arr.first .. arr.last loop
for j in arr(i).first .. arr(i).last loop
dbms_output.put_line(arr(i) (j));
end loop;
end loop;
end;
제가 해야 할 일은 의 표에 대해 비슷한 것을 만드는 것입니다. 다음과 같습니다.
type a is record(a1 number, a2 number);
type b is table of a;
문제는 이러한 종류의 배열을 수동으로 초기화할 수 있는지, 아니면 다음과 같이 채워질 수 있는지입니다.bulk collects
아니면 비슷한가요?위와 동일한 구문이 작동하지 않는 것 같고 설명서에서 초기화 샘플을 찾을 수 없었습니다.
RECORD에 대한 "생성자" 구문은 없으므로 다음과 같이 입력해야 합니다.
declare
type a is record(a1 number, a2 number);
type b is table of a;
arr b := b();
begin
arr.extend(2);
arr(1).a1 := 1;
arr(1).a2 := 2;
arr(2).a1 := 3;
arr(2).a2 := 4;
end;
이것은 객체 없이 작동하지만 'a' 유형 값에 대한 생성자 함수를 선언해야 합니다.
declare
type a is record(a1 number, a2 number);
type b is table of a;
arr b;
--Constructor for type a
function a_(a1 number, a2 number) return a is
r_a a;
begin
r_a.a1 := a1;
r_a.a2 := a2;
return(r_a);
end;
begin
arr := b(a_(1, 2), a_(3, 4), a_(5, 6), a_(7, 8));
for i in arr.first .. arr.last loop
dbms_output.put_line(arr(i).a1||', '||arr(i).a2);
end loop;
end;
릴리스 18c 이후로 한정된 표현식은 복잡한 데이터 유형의 값을 정의할 수 있는 대체 방법을 제공합니다.인용문:
Oracle Database Release 18c부터는 생성자가 추상 데이터 유형 값을 제공하는 것처럼 모든 PL/SQL 값을 표현식(예: 레코드 또는 연관 배열)으로 제공할 수 있습니다.PL/SQL에서는 SQL 용어 "type constructor" 대신 "qualified expression" 및 "aggregate"라는 용어를 사용하지만 기능은 동일합니다.
다음은 작동하는 예입니다.
declare
type a is record (a1 number, a2 number);
type b is table of a index by varchar2 (16);
arr b := b ('key1' => a (1, 2), 'key2' => a (3, 4));
begin
declare key varchar2 (16) := arr.first; begin
<<foreach>> loop
dbms_output.put_line (arr(key).a1||','||arr (key).a2);
key := arr.next (key);
exit foreach when key is null;
end loop; end;
end;
/
PL/SQL procedure successfully completed.
1,2
3,4
언급URL : https://stackoverflow.com/questions/3707140/how-to-manually-initialize-a-collection-of-records-in-pl-sql
반응형
'programing' 카테고리의 다른 글
속성 대신 마커 인터페이스를 사용해야 하는 강력한 이유 (0) | 2023.08.14 |
---|---|
JavaScript에서 본문 또는 문서에 div 요소 추가 (0) | 2023.08.14 |
실행할 참조 어셈블리를 로드할 수 없습니다. (0) | 2023.08.14 |
Global.asax.cs 파일은 어디에 있습니까? (0) | 2023.08.14 |
탐색 컨트롤러에서 두 개의 보기를 동시에 팝업하려면 어떻게 해야 합니까? (0) | 2023.08.14 |