데이터베이스 PL/SQL - 배열과 테이블

배열
pl / sql에서는 배열 자료형도 사용할 수 있다. 배열은 varray로 표현한다. 우리가 레코드 타입 변수를 선언했던 것처럼 배열 변수를 선언하기 위해서 먼저 type문으로 배열의 정보를 정의해주어야 한다.

일단 아래의 예시에서는 20개의 숫자 데이터를 받는 배열 타입을 정의하도록 하겠다. 그리고 이를 v_varray라는 변수로 선언하겠다.

그리고 v_varray에 (10, 20, 30, 40, 40)이라는 값을 집어넣겠다. 그리고 배열을 첫 번째 요소를 출력해보도록 하자. pl / sql에서는 배열의 요소가 1부터 시작하는 것을 명심하도록 하자.
그리고 배열의 저장된 값을 변경하는 것도 가능하다. 1번 인덱스에 있는 배열의 요소를 가져와서 100이라는 값으로 변경하고 출력해보자.

배열의 첫 번째 요소가 잘 출력되고 있으며, 변경 역시 제대로 이루어지고 있다.

배열과 반복문

앞에서 배웠던 반복문과 배열을 함께 사용해보도록 하겠다. 방금 만들 배열에 대해서 배열의 요소들을 반복문을 사용하여 출력해보겠다.

for문을 사용하여 1부터 5까지 인덱스를 증가시키며 해당 인덱스의 배열 요소를 출력하는 것이다. 그런데 이 때 배열의 길이를 count함수를 통해서 반환할 수 있다.


첫 번째 요소부터 차례대로 출력이 이루어지고 있다.


테이블


이번엔 테이블에 대해서 알아보자. 이 때 테이블은 데이터베이스에서의 테이블 객체를 의미하는 것이 아니라 일차원 배열과 유사하지만 크기 제한이 없다. 따라서 요소가 추가될 때마다 테이블의 크기가 알아서 증가한다.

한번 변수를 테이블 자료형으로 선언해보자. 이를 위해서 먼저 테이블의 형태를 정의하자. 우리가 만드는 테이블은 숫자 데이터로 이루어져 있으며, 인덱스를 정수형으로 받아오고 있다. 사실상 배열의 인덱스와 동일하게 사용하려 한다.

이제 테이블에 데이터를 넣어보겠다. 인덱스에 대해서 테이블 요소를 가져오면 알아서 테이블 크기가 증가하고 데이터가 입력된다. 이제 이를 반복문으로 출력해보자.


테이블 역시 count함수를 사용해서 그 크기를 반환할 수 있다. 이를 통해서 1번 인덱스의 요소부터 하나씩 출력한다.



문제

주민등록번호를 입력받아 정상인지 비정상인지 검사하는 스크립트문을 작성하자.

이 때, 주민등록번호 입력은 앞자리, 뒷자리를 따로 입력받도록 하자.

이미 앞에서 자바스크립트를 공부할 때 주민등록번호 적합여부를 판별하는 코드를 작성한 적이 있다. 이번엔 pl/sql에서 주민등록번호 알고리즘을 적용하여 적합여부를 판단하는 프로그램을 만들어보도록 하겠다.
  1. 데이터 입력을 받기 위해 accept문을 작성하는데, 앞자리와 뒷자리를 별도로 입력받는다.
  2. 먼저 계산에 필요한 v_mul이라는 배열을 하나 선언해두자. 주민등록번호 알고리즘에서 검증 첫 번째는 마지막 자리를 제외한 각 자리수를 2부터 9까지 순서대로 계속 곱한 값을 구해야 하기 때문이다.
  3. 앞자리와 뒷자리 따로 받은 데이터를 하나의 문자변수에 저장한다.
  4. 반복문을 하나 만들어 주민등록번호를 저장하고 있는 문자데이터에서 각 자리를 분리하고 이를 정수화하여 v_mul 배열의 각 인덱스에 숫자와 곱한다.
  5. 그리고 이를 모두 더하여 v_sum 변수에 저장하자.
  6. 그리고 check를 위해서 13번째 자릿수를 추출하여 정수화한 뒤 v_check변수에 저장하자.
  7. 위에서 구한 v_sum을 3단계의 절차를 거쳐 숫자를 추출하도록 하자.
  8. 먼저 v_sum을 11로 나눈 나머지를 구한다.
  9. 구한 나머지를 11에서 뺀다.
  10. 이 값을 다시 10으로 나눈다.
  11. 이렇게 구한 값을 v_check와 비교한다.
  12. 이제 비교한 결과가 일치하면 적합, 불일치하다면 부적합을 출력하도록 하자.

주민등록번호 알고리즘에 따라 코드를 작성하였고, 각자 자신의 주민등록 번호를 이용하여 적합 여부를 따져보도록 하자.


댓글

이 블로그의 인기 게시물

데이터베이스 PL/SQL 제어문 - 반복문

데이터베이스 PL/SQL 변수선언