✨ 절차형 SQL?
절차형 SQL은 개발 언어와 같이 SQL에서도 절차지향의 프로그래밍이 가능하도록 하는 것을 말한다. 절차형 SQL을 이용하면 연속적인 실행이나 조건에 따른 분기처리를 이용, 특정 기능을 수행하는 저장 모듈을 생성 가능하다. 이 글에서는 오라클에 대해서만 설명을 할 것이다.
✨ PL/SQL?
PL/SQL은 오라클에서 제공하는 절차적 프로그래밍을 위한 트랜잭션 언어이다.
이것을 이용하여 PL/SQL 문장을 데이터베이스 서버에 저장하여 사용자와 애플리케이션 사이에서 공유할 수 있도록 만든 컴포넌트인 Stored Module을 개발할 수 있다. 오라클의 저장 모듈에는 Procedure, User Defined Function, Trigger가 있다.
- Block 구조로 기능별 모듈화가 가능하다.
- 변수, 상수 등을 선언하여 SQL 문장 간의 값에 대한 교환이 가능하다,
- If, Loop 등의 절차형 언어를 사용, 절차적 프로그래밍을 사용할 수 있도록 한다,
- DBMS 정의 에러 또는 사용자 정의 에러를 정의하여 사용 가능하다.
- Oracle에 내장된 기능으로 Oracle과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.
- 응용 프로그램의 성능 향상에 도움이 된다.
- 여러 SQL 문장을 Block으로 묶고, 한번에 Block 전부를 서버로 보내기 때문에 통신량을 줄일 수 있다.
동작 과정은 다음과 같다PL/SQL Block 프로그램 입력 -> SQL 프로그램의 문장과 프로그램 문장을 구분 -> 프로그램 문장은 PL/SQL 엔진이 처리 / SQL 문장은 Oracle 서버의 SQL Statement Executor가 실행
PL/SQL의 블록 구조는 - DECLARE : BEGIN ~ END 절에서 사용될 변수와 인수에 대한 정의 및 데이터 타입을 선언- BEGIN ~ END : 개발자가 처리하고자 하는 SQL문과 여러가지 비교, 제어문을 이용해 필요한 로직을 처리하는 실행- EXCEPTION : BEGIN ~ END 절에서 실행되는 SQL 문에서 에러가 발생할 경우 예외처리를 선언한다.
🪡 PL/SQL의 기본 문법
CREATE [OR REPLACE] Procedure [Procedure_name]
(argument1 [mode] data_type1, argument2 [mode] date_type2, ... ... ) IS [AS] ... ...
BEGIN ... ...
EXCEPTION ... ... END; /
언뜻 보면 CREATE TABLE과 비슷해보일 수 있는데, 비슷한 원리로 동작한다고 생각하면 쉽다.
이렇게 생성하는 프로시저는 데이터베이스 내에 저장되어 프로세스가 필요할 때마다 호출이 가능하다.
저 SQL을 설명하자면
OR REPLACE : 데이터베이스 내에 같은 이름의 프로시저가 있을 경우 기존의 프로세스 위에 현재 프로세스를 덮어쓰기함
ARGUMENT : 프로시저가 호출될 때 프로시저 안으로 값이 들어오거나 처리한 결과값을 리턴시킬 매개 변수이다.
MODE : 매개 변수 유형으로 IN (프로시저로 전달된 변수), OUT(프로시저에서 처리된 결과가 운영체제로 전달), INOUT(두가지를 동시 시행)
/ : 프로시저 컴파일 명령어
🧶 주의사항
- SCALAR 변수는 사용자의 임시 데이터 하나만 저장이 가능하고, 거의 모든 형태의 데이터 유형에 대한 저장이 가능하다.
- SELECT 문장의 결과값이 반드시 존재해야 하며, 결과도 하나만 존재해야 한다. 없을 경우에는 ERROR가 발생한다.
- 대입 연산자는 '='가 아닌 ':='FMF TKDYDGKSEK.
- EXCEPTION에서는 WITH ~ THEN절을 사용, 에러의 종류별로 적절하게 처리해야 한다. OTHERS를 이용해 모든 경우의 에러를 통합해서 처리도 가능하다.
🏹 TRIGGER
트리거는 특정 테이블에 INSERT, UPDATE, DELETE와 같은 DML 문장이 실행될 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램이다.
이 말인 즉, 사용자가 직접 호출하는 것이 아닌 데이터베이스에서 자동으로 수행하게 되는 것을 뜻한다.
테이블과 뷰, 데이터베이스 작업을 대상으로 해서 정의 가능하며, 전체 트랜잭션 작업에 대해 발생되는 Trigger와 각 행에서 발생돠는 Trigger로 나눠진다.
프로시저는 BEGIN ~ END 절 내에 COMMIT, ROLLBACK과 같은 트랜잭션 종료 명령을 사용할 수 있지만, 데이터베이스 트리거 안에서는 사용할 수 없다는 차이가 존재한다.
'DBMS' 카테고리의 다른 글
인덱스 기본 (0) | 2024.04.04 |
---|---|
옵티마이저와 실행계획 (0) | 2024.04.04 |
DCL (0) | 2024.04.01 |
윈도우 함수(Window Function) (2) | 2024.03.29 |
그룹 함수 (0) | 2024.03.27 |