dh_0e

[Database] SQL 확장 본문

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으로 이루어져 있음

컬럼%type은 컬럼의 속성 타입으로 타입을 정하겠다는 것
else if가 elsif로 쓰임
exit Ehsms exit when을 사용하여 무한 루프 연산 중지
While Loop example
For example / reverse가 들어가면 역순으로 감소함 / for 문에 사용되는 변수는 선언 필요 X

 

Cursor

  • Select 문장이 하나 이상의 튜플을 반환하는 경우, 사용자는 커서를 사용해야 함
  • 커서를 사용하는 5가지 단계
    • 1. Select 문장이 반환하는 속성을 저장하는 변수를 선언
    • 2. 커서 Declare
    • 3. 커서 Open
    • 4. 커서로부터 튜플을 Fetch
    • 5. 커서 Close

Oepn Cursor를 하면 값을 미리 구해놈 / Fetch할 때마다 1튜플씩 불러옴

 

매개 인자가 2개 이상일 경우 Function 대신 Procedure로 사용해야 함
Procedure Example
OUT/IN OUT은 불가능 / IS == AS
Function Example

 

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: 뭔가를 "계산해라, 그리고 결과를 줘라" (값 반환)

'Database' 카테고리의 다른 글

[Database] DB 설계 이론  (1) 2025.06.10
[Database] Entity-Relationship Data Model  (0) 2025.06.02
[Database] 응용 개발  (0) 2025.05.20
[Database] 오라클 실습 II  (0) 2025.05.20
[Database] 데이터베이스 시스템 주요 기능  (0) 2025.05.19