SQL 문장에서 변수 정의, 조건 처리, 반복 처리, 등을 지원하며 오라클 자체에 내장되어 있는 절차적 언어입니다. 변수, 상수 등을 선언하여 SQL과 절차형 언어에서 사용, IF, LOOP 커서를 사용하여 여러 행을 검색할 수도 있습니다. PL/SQL은 블록 구조의 언어로서, 크게 이름부, 선언부, 실행부, 예외 처리부로 나뉩니다.
영역 |
설명 |
이름부 |
블록의 명칭이 오는 부분입니다. |
선언부(DECLARE) |
PL/SQL에서 사용하는 모든 변수나 상수를 선언하는 부분으로서 생략 가능합니다. |
실행부(BEGIN) |
절차적 형식으로 SQL문을 실행할 수 있도록 절차적 언어의 요소인 제어문, 반복문, 함수 정의 등 로직을 기술할 수 있는 부분입니다. |
예외 처리부(EXCEPTION) |
PL/SQL 문이 실행되는 중에 에러가 발생할 수 있는데 이를 예외사항이 발생했을 때 이를 해결하기 위한 문장을 옵션을 기술하는 부분입니다. |
예시
SET SERVEROUTPUT ON
DECLARE
num NUMBER; -- 변수 선언
BEGIN
num := 100; -- 코드 실행
DBMS_OUTPUT.PUT_LINE(num);
END;
먼저 출력 값을 보기 위해 SET SERVEROUTPUT ON을 입력합니다. DECLARE에서는 사용할 변수를 선언하고 BEGIN 에는 동작할 코드를 작성합니다. DBMS_OUTPUT.PUT_LINE 함수로 변수 num의 값을 출력하고 있습니다.
변수를 선언할 때 사용되는 키워드들이 몇 개 있습니다. 해당 키워드는 변수명과 데이터 타입 사이에 사용됩니다.
구문 |
설명 |
IDENTIFIER |
변수의 이름 나타내는 키워드입니다. |
CONSTANT |
변수의 값을 변경할 수 없도록 하는 키워드 입니다. |
DATATYPE |
자료형을 기술합니다. |
NOT NULL |
값을 반드시 포함하도록 하기 위한 키워드 입니다. |
EXPRESSION |
다른변수, 연산자나 함수를 포함하는 표현식입니다. |
스칼라 변수 , 레퍼런스 변수 선언
변수명 데이터타입(크기); -- 스칼라 변수
변수명 테이블명.컬럼명%TYPE; -- 레퍼런스 변수
변수를 선언할 때 다른 프로그래밍 언어처럼 선언하는 변수는 스칼라 변수라고 하고, 테이블에 존재하는 칼럼을 참조하여 만든 변수를 레퍼런스 변수라고 합니다. 레퍼런스 변수에 경우, 해당 칼럼의 타입을 그대로 변수에 가져옵니다.
변수 선언, 대입 예시
DECLARE
var_int NUMBER(4);
var_name T_USER.NAME%TYPE;
BEGIN
var_name := '이름';
DBMS_OUTPUT.PUT_LINE(var_name); --결과: '이름' 출력
PL/SQL에서는 변수에 값을 대입할 때는 '='이 아닌 ':='을 사용합니다.
PL/SQL에서도 SELECT문을 사용할 수 있습니다.
예시
DECLARE
name T_USER.USER_ID%TYPE;
point T_USER.USER_POINT%TYPE;
BEGIN
SELECT USER_ID, USER_POINT
INTO name, point
FROM T_USER
WHERE USER_ID = 'yunyc1010';
DBMS_OUTPUT.PUT_LINE(name); -- 사용자 ID
DBMS_OUTPUT.PUT_LINE(POINT); -- 사용자 포인트
END;
PL/SQL에서 SELECT문을 사용하면 INTO절 사용하여 조회한 값을 변수에 대입할 수 있습니다. 조회되는 행은 하나이어야 하며, 조회하는 칼럼에 따라 순서, 개수, 데이터 타입을 맞춰주어야 합니다. 또한 SELECT문 이외에도 INSERT문, UPDATE문, MERGE문, DELETE문도 사용 가능합니다.
[SQL] 인덱스를 사용하여 쿼리 성능 향상시키기 (1) | 2020.10.28 |
---|---|
[SQL] PRIMARY KEY, FOREIGN KEY 데이터 무결성을 위한 제약 조건 (0) | 2020.10.13 |
[SQL] JOIN문 정리(LEFT JOIN, RIGHT JOIN, INNER JOIN, CROSS JOIN) (0) | 2020.10.06 |
[SQL] 시퀀스의 개념과 시퀀스 생성하기 (0) | 2020.10.05 |
[SQL] 뷰(View)의 개념과 뷰 사용하기 (1) | 2020.10.04 |