[ORACLE] PL/SQL 프로시저 배열

in #plsql6 years ago (edited)

여러 테이블에 있는 공통된 컬럼 정보 하나가 변경되면서 여러 테이블의 컬럼 데이터를 처리할 프로시저를 만들게 되었다.

처음에는 Golden에서 테이블 하나씩 변경된 컬럼 데이터를 수정했다. 하지만 변경할 테이블이 40개정도 있었고, 계속 처리하는데 불편함을 느끼게 되어 프로시저를 개발하게 되었다.
이 프로시저를 개발하면서 공부한 것들을 정리해보겠다.

먼저, 배열로 테이블 내역을 입력 받아 루프를 하기 위해 PL/SQL 배열을 공부해보았다.

  • 1차원 배열 형태의 데이터 타입
  • 같은 데이터 타입을 가진 요소들로 구성




VARRAY(variable array)
: 고정길이를 가진 배열
: 선언 시에 배열의 전체 크기를 명시해야함
: 데이터를 참조할 때 각각의 요소들 순서대로 참조해야 함
     예) varray의 크기가 3이라면 varray[1], varray[2], varray[3] 순서대로 데이터가 들어가야 함
: 일반 테이블의 컬럼 타입으로 사용될 수 있음
: 숫자형 인덱스만 사용가능

중첩 테이블
: 배열 크기에 제한이 없음
: 선언 시에 배열의 크기를 명시할 필요 없음
: 데이터를 참조할 때 각각의 요소 순서를 지킬 필요 없음
     예) varray 크기가 3이라면 varray[1], varray[3] 만 할당하고 varray[2]는 할당하지 않아도 됨
: 숫자형 인덱스만 사용가능
: 일반 테이블의 컬럼 타입으로 사용될 수 있음

연관 배열(index-by table)
: 키와 값의 쌍으로 구성된 콜렉션
   (Java나 C#과 같은 언어에서 사용하는 Hash table과 동일한 개념)
: varray가 요소의 인덱스를 통해 각 요소의 값에 접근하는 반면, associative array는 키에 의해 값에 접근한다.


콜렉션 선언

: 컬렉션 선언할 때는 컬렉션형(위의 세가지 유형)을 기반으로 선언한다.

사용자 정의 컬렉션형을 생성하는 방법에는 두 가지가 있다.

1. CREATE TYPE 명령어 이용

: VARRAY, 중첩테이블형 형을 정의
: 데이터베이스 내에서(PL/SQL 코드 아님) 컬렉션 형을 정의

[VARRAY]

[중첩 테이블]

2. TYPE IS 구문 이용

: PL/SQL 프로그램 내에서 컬렉션 형을 선언
: 이 컬렉션 형은 TYPE이 정의된 블록 내에서만 이용 가능

[VARRAY]

[중첩 테이블]

[연관 배열]




: 컬렉션 메소드는 sql에서는 이용할 수 없고, pl/sql 프로그램에서만 이용 가능
: 연관배열 내장메소드를 호출하는 일반적인 구문

  • 인자가 없는 연산
    예) Table_name.operation
  • 인자에 대한 행 인덱스가 있는 연산
    예) Table_name.operation(index_number [,index_number])






참고사이트

https://sites.google.com/site/smcgbu/home/gongbu-iyagi/plsqluiguseong-yoso
http://uiandwe.tistory.com/532
https://code.i-harness.com/ko/q/6b0111
https://thebook.io/006696/part02/ch11/03/01/02/
http://deviant86.tistory.com/460

Sort:  

Congratulations @ekkim! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :

You made your First Vote

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 63466.72
ETH 2683.95
USDT 1.00
SBD 2.80