PL/SQL(Procedural Language/Structured Query Language)은 오라클 데이터베이스에서 SQL을 확장한 절차적 프로그래밍 언어입니다. PL/SQL은 SQL의 데이터 조작 기능과 절차적 언어의 제어 구조를 결합하여 더 강력하고 복잡한 데이터베이스 응용 프로그램을 개발할 수 있도록 합니다. PL/SQL은 블록 구조를 사용하여 코드를 구성하고, 변수, 조건문, 반복문, 예외 처리 등을 지원합니다.
PL/SQL의 주요 특징
- 블록 구조: PL/SQL 코드는 블록 구조로 구성됩니다. 블록은 선언부, 실행부, 예외 처리부로 나뉩니다.
- 변수: PL/SQL은 변수를 선언하고 사용할 수 있습니다.
- 조건문: IF-THEN-ELSE 문을 사용하여 조건부 논리를 구현할 수 있습니다.
- 반복문: LOOP, WHILE LOOP, FOR LOOP를 사용하여 반복 작업을 수행할 수 있습니다.
- 예외 처리: EXCEPTION 블록을 사용하여 오류를 처리할 수 있습니다.
- 커서: PL/SQL에서는 커서를 사용하여 SQL 쿼리의 결과 집합을 순회할 수 있습니다.
- 프로시저와 함수: PL/SQL에서는 프로시저와 함수를 정의하고 호출할 수 있습니다.
PL/SQL 블록 구조
PL/SQL 블록은 다음과 같은 구조를 가집니다:
1 2 3 4 5 6 7 8 9 10 11 12 | DECLARE -- 선언부: 변수, 상수, 커서 등을 선언합니다. v_variable_name NUMBER; BEGIN -- 실행부: 실제 실행할 코드를 작성합니다. v_variable_name := 100; DBMS_OUTPUT.PUT_LINE('변수 값: ' || v_variable_name); EXCEPTION -- 예외 처리부: 예외가 발생했을 때 실행할 코드를 작성합니다. WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('예외 발생'); END; | cs |
예제: 간단한 PL/SQL 블록
다음은 간단한 PL/SQL 블록 예제입니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | DECLARE v_employee_name VARCHAR2(50); BEGIN SELECT first_name || ' ' || last_name INTO v_employee_name FROM employees WHERE employee_id = 100; DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('No employee found with ID 100'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('An unexpected error occurred'); END; | cs |
PL/SQL에서 사용되는 주요 구성 요소
변수 선언과 사용
변수를 선언하고 사용하는 방법은 다음과 같습니다:
1 2 3 4 5 6 7 | DECLARE v_number NUMBER := 10; v_string VARCHAR2(50) := 'Hello, PL/SQL!'; BEGIN DBMS_OUTPUT.PUT_LINE('Number: ' || v_number); DBMS_OUTPUT.PUT_LINE('String: ' || v_string); END; | cs |
조건문
IF-THEN-ELSE 문을 사용하여 조건부 논리를 구현할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 | DECLARE v_salary NUMBER := 5000; BEGIN IF v_salary > 4000 THEN DBMS_OUTPUT.PUT_LINE('High salary'); ELSE DBMS_OUTPUT.PUT_LINE('Average or low salary'); END IF; END; | cs |
반복문
LOOP, WHILE LOOP, FOR LOOP를 사용하여 반복 작업을 수행할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | DECLARE v_counter NUMBER := 1; BEGIN -- 기본 LOOP LOOP EXIT WHEN v_counter > 5; DBMS_OUTPUT.PUT_LINE('Counter: ' || v_counter); v_counter := v_counter + 1; END LOOP; -- WHILE LOOP v_counter := 1; WHILE v_counter <= 5 LOOP DBMS_OUTPUT.PUT_LINE('Counter: ' || v_counter); v_counter := v_counter + 1; END LOOP; -- FOR LOOP FOR i IN 1..5 LOOP DBMS_OUTPUT.PUT_LINE('Counter: ' || i); END LOOP; END; | cs |
예외 처리
PL/SQL에서 예외를 처리하는 방법은 다음과 같습니다:
1 2 3 4 5 6 7 8 9 10 11 12 | DECLARE v_salary NUMBER; BEGIN SELECT salary INTO v_salary FROM employees WHERE employee_id = 99999; DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('No employee found with the specified ID'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('An unexpected error occurred'); END; | cs |
프로시저와 함수
PL/SQL에서는 프로시저와 함수를 정의하고 호출할 수 있습니다. 프로시저와 함수는 재사용 가능한 코드 블록을 만들고 호출할 수 있게 합니다.
프로시저 정의와 호출:
1 2 3 4 5 6 7 8 9 10 11 | CREATE OR REPLACE PROCEDURE greet (p_name IN VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!'); END; / BEGIN greet('John'); END; / | cs |
함수 정의와 호출:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | CREATE OR REPLACE FUNCTION add_numbers (p_num1 IN NUMBER, p_num2 IN NUMBER) RETURN NUMBER IS BEGIN RETURN p_num1 + p_num2; END; / DECLARE v_sum NUMBER; BEGIN v_sum := add_numbers(10, 20); DBMS_OUTPUT.PUT_LINE('Sum: ' || v_sum); END; / | cs |
결론
PL/SQL은 오라클 데이터베이스에서 SQL의 기능을 확장하여 복잡한 데이터베이스 응용 프로그램을 개발할 수 있도록 하는 강력한 도구입니다. PL/SQL은 변수 선언, 조건문, 반복문, 예외 처리, 프로시저와 함수 등의 기능을 제공하여 데이터베이스 작업을 보다 효율적이고 유연하게 처리할 수 있게 합니다. 이를 통해 개발자는 데이터베이스 내부에서 복잡한 비즈니스 로직을 구현하고, 데이터 무결성과 성능을 유지하면서 애플리케이션을 개발할 수 있습니다.
'DATABASE 공부' 카테고리의 다른 글
Trigger (0) | 2024.08.02 |
---|---|
SQL의 DATA LANGUAGE (0) | 2024.08.02 |
JDBC의 Properties사용 (0) | 2024.08.02 |
Template (0) | 2024.08.01 |
관계형 데이터베이스 (0) | 2024.07.31 |