PL/SQL - 배열

안녕하세요, 야심찬 프로그래머 여러분! 오늘 우리는 PL/SQL 배열의 흥미로운 세계로 접근해 볼 것입니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 이 여정을 단계별로 안내해 드리겠습니다. 프로그래밍에 처음이시라도 걱정 마세요 - 우리는 기본부터 시작하고 올라갈 겁니다. 그러니 가상의 메모 pads를 챙기고, 시작해 보세요!

PL/SQL - Arrays

PL/SQL에서 배열이란?

深은 물에 뛰어들기 전에, 배열이 무엇인지 이해해 보겠습니다. 여러분이 쿠키를 많이 가지고 있고, 데스크톱에 흩어둘 것보다는 깔끔한 작은 상자에 넣기로 했을 때를 상상해 보세요. 그 상자는 배열과 같아요 - 동일한 유형의 여러 항목을 보관할 수 있는 컨테이너입니다.

PL/SQL에서 배열은 동일한 데이터 유형의 요소들의 모음입니다. 단일 변수 이름 아래 여러 값을 저장하고 조작할 수 있게 해줍니다. 꽤 편리하죠?

PL/SQL의 배열 유형

PL/SQL은 다음과 같은 세 가지 유형의 배열을 제공합니다:

  1. 협응 배열(인덱스별 테이블)
  2. 네스티드 테이블
  3. 가변 크기 배열(VARRAY)

지금은 초보자들에게 좋은 시작점인 VARRAY에 집중해 보겠습니다.

Varray 유형 만들기

VARRAY(Variable-size Array)는 PL/SQL에서 최대 크기 제한이 있는 배열 유형입니다. 고정된 수의 칸이 있는 쇼콜라 상자를 사는 것과 같아요 - 상자에 들어갈 수 있는 쇼콜라보다 더 많이 추가할 수 없습니다!

다음은 VARRAY 유형을 만드는 방법입니다:

CREATE OR REPLACE TYPE number_array AS VARRAY(5) OF NUMBER;

이를 해독해 보겠습니다:

  • CREATE OR REPLACE TYPE: Oracle에 새로운 유형을 생성하거나 기존의 것을 대체하도록 지시합니다.
  • number_array: 우리가 새로운 유형에 부여한 이름입니다.
  • AS VARRAY(5): 최대 5개의 요소를 가지는 VARRAY로 정의합니다.
  • OF NUMBER: 이 배열의 각 요소는 NUMBER 데이터 유형입니다.

이제 이 VARRAY를 PL/SQL 블록에서 사용해 보겠습니다:

DECLARE
my_numbers number_array := number_array(10, 20, 30, 40, 50);
BEGIN
FOR i IN 1..my_numbers.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Element ' || i || ': ' || my_numbers(i));
END LOOP;
END;
/

출력:

Element 1: 10
Element 2: 20
Element 3: 30
Element 4: 40
Element 5: 50

이 코드를 분석해 보겠습니다:

  1. my_numbers를 VARRAY로 선언하고 5개의 숫자로 초기화합니다.
  2. FOR 루프를 사용하여 배열을 반복합니다.
  3. my_numbers.COUNT는 배열의 요소 수를 반환합니다.
  4. my_numbers(i)를 사용하여 각 요소에 접근하고 인쇄합니다.

VARRAY 작업

이제 우리가 VARRAY를 만들고 초기화한 만큼, 그 위에 수행할 수 있는 몇 가지 연산을 탐구해 보겠습니다.

요소 추가

추가 요소를 더 추가할 수 없습니다. 요소를 추가해 보겠습니다:

DECLARE
my_numbers number_array := number_array(10, 20, 30);
BEGIN
my_numbers.EXTEND;
my_numbers(4) := 40;

FOR i IN 1..my_numbers.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Element ' || i || ': ' || my_numbers(i));
END LOOP;
END;
/

출력:

Element 1: 10
Element 2: 20
Element 3: 30
Element 4: 40

여기서 우리는 EXTEND를 사용하여 배열의 크기를 1 증가시키고, 새로운 요소에 값을 할당합니다.

요소 제거

배열의 끝에서 요소를 제거할 수도 있습니다:

DECLARE
my_numbers number_array := number_array(10, 20, 30, 40, 50);
BEGIN
my_numbers.TRIM(2);  -- 마지막 2개의 요소 제거

FOR i IN 1..my_numbers.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Element ' || i || ': ' || my_numbers(i));
END LOOP;
END;
/

출력:

Element 1: 10
Element 2: 20
Element 3: 30

TRIM 메서드는 배열의 끝에서 요소를 제거합니다.

VARRAY의 일반 메서드

다음은 VARRAY와 함께 사용할 수 있는 일반 메서드 표입니다:

메서드 설명
COUNT 배열의 요소 수를 반환합니다
FIRST 첫 번째 요소의 인덱스를 반환합니다
LAST 마지막 요소의 인덱스를 반환합니다
LIMIT 배열의 최대 크기를 반환합니다
EXTEND 배열의 크기를 증가시킵니다
TRIM 배열의 크기를 감소시킵니다
EXISTS 특정 인덱스에 요소가 있는지 확인합니다

실제 예제: 학생 성적

이제 우리의 지식을 실제 예제로 적용해 보겠습니다. 여러분이 교사(저처럼!)이고 학생의 평균 점수를 저장하고 계산하고 싶을 때를 상상해 보세요:

CREATE OR REPLACE TYPE grade_array AS VARRAY(5) OF NUMBER;

DECLARE
student_grades grade_array := grade_array(85, 90, 78, 92, 88);
total_score NUMBER := 0;
average_score NUMBER;
BEGIN
-- 총 점수 계산
FOR i IN 1..student_grades.COUNT LOOP
total_score := total_score + student_grades(i);
END LOOP;

-- 평균 계산
average_score := total_score / student_grades.COUNT;

DBMS_OUTPUT.PUT_LINE('Average Score: ' || ROUND(average_score, 2));
END;
/

출력:

Average Score: 86.6

이 예제는 학생의 성적을 저장하고 평균 점수를 계산하고 표시하는 방법을 보여줍니다.

결론

축하합니다! 여러분은 PL/SQL 배열의 세계로 첫 걸음을 냈습니다. 우리는 VARRAY의 기본 사항, 생성 및 조작 방법, 그리고 실제 사용 예제를 다루었습니다. 기억해 두세요, 배열은 쇼콜라 상자처럼 - 데이터를 정리하고 쉽게 접근할 수 있게 해줍니다. 프로그래밍 여정을 계속하면서, 배열은 여러분의 코딩 도구箱에서 매우 유용한 도구가 될 것입니다.

계속 연습하고, 호기심을 유지하며, 실험을 두려워하지 마세요. 언제든지 여러분이 데이터베이스 마법사가 될 때까지! (죄송합니다, 조금 교사式的 유머를 배제할 수 없었어요.)

快乐的编程, 미래의 데이터베이스 마법사 여러분!

Credits: Image by storyset