Database
[Database] SQL 확장
dh_0e
2025. 5. 21. 01:20
SQL procedural extensions
- SQL 표준은 SQL에 절차적인 확장을 지원하며 이를 SQL/PSM이라 하며 사용자는 이를 이용하여 데이터 베이스의 임의 연산을 수행하는 procedure(or function)를 개발할 수 있음
External Language Functions/Procedures
- SQL 표준은 함수나 procedure를 외부 언어를 사용하여 개발할 수 있게 함
- 외부언어를 사용하여 함수/procedure를 개발하는 경우 DBS 보안에 문제가 발생할 수 있음
- 사용자가 작성한 프로그램의 오류가 DBS의 오류가 되어 심각한 문제를 야기할 수 있음
- 즉 외부 언어를 사용하는 함수는 효율적으로 실행되어 성능향상은 기대할 수 있지만, 시스템 보안 문제로 잘 사용 X
Security Issue
- 보안 이슈를 해결하는 방식은 다음과 같다
- Use sandbox techniques: 자바나 C#과 같이 안전한 언어로 외부 함수를 작성하는 방법
- Run external language functions/procedures in a separate process with no access to the database process' memory: 독립된 프로세스로 사용자 함수를 실행하고 그 결과를 IPC를 이용하여 주고받는 방식
- IPC 방식에는 Shared memory(공유 메모리), Message(메시지), Pipe(파이프), Signal(신호) 등이 있음
Stored procedures
- DBS이 제공하는 보편화된 기능으로, 개발자는 DB 비즈니스 로직 연산을 SQL 확장 방식(SQL/PSM)으로 저장 프로시저를 개발하고 일반 사용자가 필요시에 이를 호출하여 수행
PL/SQL
- PL/SQL은 오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 컴퓨터 프로그래밍 언어이다
- 쿼리문은 Delcare, body, exception 3 block으로 이루어져 있음
Cursor
- Select 문장이 하나 이상의 튜플을 반환하는 경우, 사용자는 커서를 사용해야 함
- 커서를 사용하는 5가지 단계
- 1. Select 문장이 반환하는 속성을 저장하는 변수를 선언
- 2. 커서 Declare
- 3. 커서 Open
- 4. 커서로부터 튜플을 Fetch
- 5. 커서 Close
Procedure VS Function
항목 | Procedure (프로시저) | Function (함수) |
목적 | 작업 수행 (처리 중심) | 결과 반환 (값 중심) |
반환값 | ❌ RETURN문 없음 (단순 종료용) | ✅ 반드시 하나의 값 반환 (RETURN 필수) |
호출 위치 | SQL 문 안에서는 직접 호출 불가 | SQL 문 안에서도 호출 가능 (SELECT, WHERE 등) |
사용 예 | 데이터 처리, INSERT/UPDATE, 트리거 내 로직 등 | 계산, 포맷 처리, 조건 로직 등 |
파라미터 타입 | IN, OUT, IN OUT 모두 가능 | 보통 IN만 씀 (OUT은 거의 안 씀) |
호출 방식 예시 | EXEC myProc(100, 'A'); | SELECT myFunc(100) FROM dual; |
Procedure: 뭔가를 "해라" (명령)
Function: 뭔가를 "계산해라, 그리고 결과를 줘라" (값 반환)