PL/SQL 레코드는 여러개의 데이터 타입을 가지는 집합체이다. 개별적으로 필드 이름을 부여 가능하며 선언 시 초기화 역시 가능하다.

다음은 그 예제이다.

CREATE OR REPLACE PROCEDURE TEST(data IN TABLE.NO%TYPE)

IS

TYPE v_record IS RECORD

(v_no NUMBER,

 v_NAME VARCHAR(10)

)

rec v_record;

BEGIN

SELECT NO, NAME

INTO rec.v_no, rec.v_name

FROM TABLE

WHERE NO = data;

END;

PL/SQL 상의 테이블은 일종의 1차원 배열형태이다.

테이블 크기에 제한이 없을 뿐 아니라 데이터가 들어옴에 따라 그 ROW 수 역시 증가를 하며, BINARY_INTEGER 타입의 INDEX로 순서가 정해진다. 또한 하나의 테이블에는 한 개의 컬럼 데이터를 저장한다.

다음은 그 예제이다.

CREATE OR REPLACE PROCEDURE TEST(data IN TABLE.NO%TYPE)

IS

TYPE v_data IS TABLE OF TABLE.NO%TYPE

INDEX BY BINARY_INTEGER;

v_table v_data;

i BINARY_INTEGER := 0;

BEGIN

FOR list IN (SELECT NO FROM TABLE WHERE NO = data) LOOP

v_table(I) := list.NO;

END LOOP;

END;

[PL/SQL] %ROWTYPE ORACLE/PL-SQL 2012. 3. 29. 11:11

로우 타입은 하나 이상의 데이터 값을 지니는 타입으로 배열과 같은 형태이다.

이는 테이블, 뷰의 컬럼 데이터형, 크기 등을 동일하게 사용 가능하며 앞에 나오는 것은 테이블 이름을 뜻한다.

주로 컬럼들의 수나 그 타입을 알지 못하는 경우 이용을 한다.

다음은 그 예제이다.

CREATE OR REPLACE PROCEDURE TEST(data IN TABLE.NO%TYPE)

IS

v_data TABLE%ROWTYPE;

BEGIN

SELECT NO INTO v_data.NO FROM TABLE WHERE NO = data;

END;

스칼라 데이터 타입에는 일반 변수형과 %TYPE을 이용하는 방법이 있다.

먼저 일반 변수형을 보면

v_data CONTANT NUMBER(1,1) := 1.1; --상수

v_data CHAR(1);

위와 같은 형태로 각기 변수 타입에 의해서 정의를 하여 쓰면 된다.

또 다른 방법으로 NOT NULL을 이용하여 NULL 값이 들어가지 않게 초기화 하는 방법이 있는데 그건 다음과 같다.

v_data BOOLEAN NOT NULL := TRUE;

%TYPE의 경우는 다음과 같다. 그 전에 특징을 알아보면 해당하는 컬럼의 타입을 모르는 경우나 코딩 후 그 타입이 바뀌었을 경우 또다시 수정 할 수 없어서 편리함이 있다고 할 수 있다.

다음이 그 예이다.

v_data TABLE.data%TYPE;

프로시저는 특정 작업을 하는 이름이 있는 PL/SQL BLOCK으로 연속적인 내용이나 복잡한 내용을 데이터베이스 상에 저장 할 경우 생성하여 쓴다.

프로시저 예문을 보자.

CREATE OR REPLACE PROCEDURE TEST(data IN NUMBER) IS

BEGIN

--SELECT * FROM TABLE WHERE NO = data

UPDATE TABLE

SET NO = 100

WHERE NO = data;

COMMIT;

END TEST;

프로시저의 경우 위에서 보면 매 구문이 들어 갈 때 ;(세미콜론)을 붙여준다.

또한 문법상 시작(BEGIN)과 끝(END)를 확실히 명시를 해 주며 실행 할 경우 EXCUTE TEST(10) 형태로 실행하면 그 결과를 볼 수 있다.

또한 파라메터를 받는 부분에 IN외에 OUT과 INOUT 역시 이용이 가능하다.

IN은 파라메터 전달, OUT은 실행한 프로그램 쪽으로 그 결과 전달, INOUT은 혼용이다.

함수는 프로시저와 달리 어떠한 값을 반환하고자 할 경우 이용된다. 일반적으로 코드를 작성 할 경우 함수와 동일하다.

단, 프로시저와 달리 IN만 이용이 가능하다. OUT처럼 값을 전달 할 경우에는 RETURN을 이용한다.

다음은 함수 예문이다.

CREATE OR REPLACE FUNCTION TEST(data IN NUMBER)

RETURN NUMBER

IS

v_data TABLE.colume%type;

SELECT colume FROM TABLE WHERE NO = data;

RETRUN v_data;

END;