PL/SQL은 관련 데이터 그룹을 관리하여 코드 효율성 및 가독성을 향상시키기 위해 몇 가지 수집 유형을 제공합니다. 여기에는 중첩 테이블, 연관 배열 (인덱스 바이 테이블) 및 레코드가 포함됩니다. 각각을 살펴 보겠습니다.
기록 : 레코드는 다른 언어의 구조와 유사합니다. 단일 이름으로 다른 데이터 유형의 요소를 그룹화합니다. TYPE
문으로 선언 한 다음 변수를 선언하는 데 사용됩니다.
<code class="sql">DECLARE TYPE employee_record IS RECORD ( employee_id NUMBER, employee_name VARCHAR2(50), salary NUMBER ); emp employee_record; BEGIN emp.employee_id := 123; emp.employee_name := 'John Doe'; emp.salary := 60000; DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp.employee_id); END; /</code>
중첩 테이블 : 중첩 테이블은 균질 한 데이터 유형의 정렬 된 모음입니다. 가변 길이 목록을 허용합니다.
<code class="sql">DECLARE TYPE num_list IS TABLE OF NUMBER; numbers num_list := num_list(1, 2, 3, 4, 5); BEGIN FOR i IN numbers.FIRST .. numbers.LAST LOOP DBMS_OUTPUT.PUT_LINE(numbers(i)); END LOOP; END; /</code>
연관 배열 (인덱스 바이 테이블) : 다른 언어의 해시 맵 또는 사전과 유사합니다. 키 값 쌍을 저장하는데, 여기서 키는 PLS_INTEGER
의 하위 유형이어야하고 값은 모든 데이터 유형 일 수 있습니다.
<code class="sql">DECLARE TYPE emp_salary IS TABLE OF NUMBER INDEX BY VARCHAR2(50); salaries emp_salary; BEGIN salaries('John Doe') := 60000; salaries('Jane Smith') := 75000; DBMS_OUTPUT.PUT_LINE('John Doe salary: ' || salaries('John Doe')); END; /</code>
적절한 수집 유형을 선택하는 것은 특정 요구에 따라 다릅니다. 레코드는 관련 데이터 요소를 그룹화하는 데 이상적입니다. 관련 데이터 요소, 주문 목록의 중첩 테이블 및 키 값 조회를위한 연관 배열에 이상적입니다.
다른 수집 유형을 사용하는 성능은 사용 방법과 데이터 크기에 따라 다릅니다. 일반적으로:
컬렉션의 크기와 작동 빈도 (삽입, 삭제, 조회)는 전체 성능에 크게 영향을 미칩니다. 매우 큰 데이터 세트의 경우 액세스 패턴을 최적화하고 구체화 된 뷰 또는 파이프 라인 기능과 같은 대체 접근 방식을 사용하여 잠재적으로 고려하십시오.
컬렉션을 매개 변수로 효율적으로 전달하려면 다양한 통과 모드 (In, Out, Out)를 이해하고 필요에 따라 적절한 방법을 선택하는 것이 포함됩니다. 적절한 경우 %ROWTYPE
속성을 사용하면 성능이 향상됩니다.
매개 변수에서 : 이것은 컬렉션을 통과하는 가장 일반적인 방법입니다. 컬렉션은 읽기 전용 값으로 전달됩니다. 절차 또는 기능은 컬렉션의 사본을 수신하며, 이는 소규모 컬렉션의 경우 효율적일 수 있지만 매우 큰 컬렉션의 경우 덜 효율적 일 수 있습니다.
OUT 매개 변수 : 프로 시저 또는 함수는 수집을 수정하고 수정 된 버전을 반환합니다.
아웃 매개 변수 : 컬렉션은 프로 시저 또는 기능 내에서 전달되고 수정되며 수정 된 버전이 반환됩니다.
매개 변수에서 사용하는 예 :
<code class="sql">CREATE OR REPLACE PROCEDURE process_numbers (numbers IN num_list) IS BEGIN -- Process the numbers collection END; /</code>
매우 큰 컬렉션의 경우 컬렉션을 직접 통과하는 대신 객체 유형을 사용하여 참조로 전달하십시오. 이것은 큰 데이터 세트를 복사하는 메모리 오버 헤드를 줄일 수 있습니다.
예, 컬렉션은 여러 가지 방법으로 PL/SQL 코드의 효율성을 크게 향상시킬 수 있습니다.
효율성 향상의 예 :
이 비효율적 인 접근 대신 :
<code class="sql">FOR i IN 1..1000 LOOP SELECT column1 INTO variable1 FROM table1 WHERE id = i; -- Process variable1 END LOOP;</code>
중첩 테이블을 사용 하여이보다 효율적인 접근 방식을 사용하십시오.
<code class="sql">DECLARE TYPE num_list IS TABLE OF NUMBER; data num_list; BEGIN SELECT id BULK COLLECT INTO data FROM table1 WHERE id BETWEEN 1 AND 1000; FOR i IN data.FIRST .. data.LAST LOOP -- Process data(i) END LOOP; END; /</code>
BULK COLLECT INTO
사용하면 단일 데이터베이스 왕복에서 1000 ID를 모두 검색하여 성능을 크게 향상시킵니다. 이 원칙은 다른 데이터베이스 작업에도 적용됩니다. 데이터 구조 및 액세스 패턴을 기반으로 최적의 성능을 위해 적절한 수집 유형을 선택하십시오.
위 내용은 PL/SQL (배열, 레코드, 테이블)에서 컬렉션을 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!