728x90
PL/SQL (Procedural Language extension to SQL)
PL/SQL은 SQL을 확장한 절차적 언어
- SQL 단점을 해결
- 변수선언가능
- 조건문 가능
- 반복문 가능
- 예외처리 가능
PL/SQL은 블록단위로 실행하며 3개로 나눠서 구성되어있다.
- 선언부(DECLARE) [생략가능]
- 실행부(BEGIN) [필수]
- 예외처리(EXCEPTION) [생략가능]
- END;(종료) [필수]
마지막 라인에 /를 입력하면 해당 블록이 실행된다.
CREATE OR REPLACE FUNCTION a RETURN VARCHAR2 IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Function A!');
RETURN 'Function A executed';
END a;
/
CREATE OR REPLACE FUNCTION b RETURN VARCHAR2 IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Function B!');
RETURN 'Function B executed';
END b;
/
-- 함수를 호출하는 예시
DECLARE --선언부
result_a VARCHAR2(100);
result_b VARCHAR2(100);
BEGIN --실행부
result_a := a();
result_b := b();
DBMS_OUTPUT.PUT_LINE('Result A: ' || result_a);
DBMS_OUTPUT.PUT_LINE('Result B: ' || result_b);
END; --종료
/
만약 패키지로 선언하여 호출할 경우
-- 패키지 헤드
CREATE OR REPLACE PACKAGE my_package IS
FUNCTION a RETURN VARCHAR2;
FUNCTION b RETURN VARCHAR2;
END my_package;
/
--패키지 본체
CREATE OR REPLACE PACKAGE BODY my_package IS
FUNCTION a RETURN VARCHAR2 IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World from Function A!');
RETURN 'Function A executed';
END a;
FUNCTION b RETURN VARCHAR2 IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World from Function B!');
RETURN 'Function B executed';
END b;
END my_package;
/ -- 패키지를 선언
-- 호출하는 곳
DECLARE
result_a VARCHAR2(100);
result_b VARCHAR2(100);
BEGIN
result_a := my_package.a();
result_b := my_package.b();
DBMS_OUTPUT.PUT_LINE('Result A: ' || result_a);
DBMS_OUTPUT.PUT_LINE('Result B: ' || result_b);
END;
/
PL/SQL 프로그램의 종류는 크게 Procedure, Function, Trigger로 나뉨
1. 프로시저 (Procedure)
정의: 특정 작업을 수행하는 명령어의 집합
특징
- 반환 값X. 단 IN , OUT, INOUT변수로 나눠져있으며 OUT, INOUT은 값을 받아올 수 있다
- 주로 반복적으로 사용되는 기능을 모듈화하여 관리하기 위해 사용
- 호출 시 매개변수를 받을 수 있다
2. 함수 (Function)
정의: 특정 작업을 수행하고 결과를 반환하는 프로그램
특징
- 반드시 반환 값을 가져야 하며, 반환형을 명시해야 함
- SQL 문 내에서 사용할 수 있어, 결과를 계산하는 데 유용
3. 트리거 (Trigger)
정의: 특정 이벤트(예: INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 PL/SQL 블록입니다.
특징
- 주로 데이터 무결성을 유지하거나 특정 조건이 충족될 때 자동으로 동작하도록 설정
- DML 이벤트에 반응하여 실행
- 트리거는 명시적으로 호출되지 않고, 이벤트가 발생할 때 자동으로 실행
PL/SQL 주요 개념 정리
1. 블록 구조
- 블록 단위 실행: PL/SQL 코드는 BEGIN과 END;로 구분된 블록 단위로 실행.
- 슬래시(/): 블록의 마지막에 /를 입력하면 해당 블록이 실행
2. 변수와 상수
- 변수 선언: 변수와 상수는 DECLARE 절에서 선언
- 값 할당: BEGIN 섹션에서 변수값을 할당가능
3. 조건문과 반복문
- 조건문 : IF문
- 반복문 : LOOP, FOR, While.
4. 커서
- 커서를 사용하여 여러 행을 검색하고 처리
5. SQL 사용
- 지원되는 SQL 종류: PL/SQL에서 사용 가능한 SQL은 Query, DML(데이터 조작 언어), TCL(트랜잭션 제어 언어)
- 동적 SQL: DDL(데이터 정의 언어) 명령어(CREATE, DROP, ALTER 등)와 DCL(데이터 제어 언어) 명령어(GRANT, REVOKE)는 PL/SQL에서 사용 가능하지만, 동적 SQL을 통해 실행
- 정적SQL VS 동적SQL
6. SELECT 문
- 결과 처리: PL/SQL의 SELECT 문은 결과를 PL/SQL 엔진으로 보냄
- 변수 선언: 결과를 받을 변수를 DECLARE 절에서 선언해야 함
- INTO 절: SELECT 문은 반드시 INTO 절을 사용하여 변수를 지정해야 하며, 한 개의 행만 검색해야 함
- 행 없음 처리: 검색되는 행이 없으면 문제가 발생할 수 있으므로, 이를 염두에 두어야 함
7. PL/SQL 프로그램의 종류
- Procedure
- Function
- Trigger
728x90
'2.2 DB > ORACLE' 카테고리의 다른 글
[SQL] PIVOT (행을 열로 돌려버렷) (1) | 2024.12.26 |
---|---|
[Oracle] 날짜(년,월,일), 시간(시,분,초) 더하고 빼기 (0) | 2024.11.28 |
[Oracle] 데이터베이스의 문자 집합 확인하기 (0) | 2024.10.18 |
[Oracle] 글자의 바이트(byte)알려주는 함수 (VSIZE, LENGTHB) feat. 한글 바이트 확인 +두 함수 차이점 (0) | 2024.10.18 |
[Oracle] 숫자,문자 자르기 함수 (SUBSTR) (0) | 2024.10.17 |
댓글