PL/SQL(정의, 사용법)

✔ PL/SQL정의

Oracle's Procedural Language extension to SQL

오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 컴퓨터 프로그래밍 언어 (오라클 자체 내장 절차적 언어)

SQL을 확장한 절차적 언어다!

Oracle의 표준 데이터 엑세스 언어다

기본 SQL구문은 한번에 하나의 쿼라나 명령 실행 가능하지만 PL/SQL은 한블록씩 코드를 실행할 수 있다.

 

SQL의 단점을 보안해서 나온 언어이다

😢SQL단점

변수없음, 하나의 명령문만 사용가능하기 때문에 트래픽 증가, 제어문 사용 불가(IF,LOOP),예외처리가 불가)

 

👍PL/SQL장점

SQL문장에서 변수 정의, 조건처리(IF), 반복처리(LOOP, WHILE, FOR) 등을 지원한다.

특정 프로그램을 Procedure, function, package등의 프로그램으로 만들어 여러 응용 프로그램을 만들시 공통으로 이용 및 관리할 수 있다. 즉, 프로그램을 모듈화하기 때문에 관리가 쉽고, 네트워크 입출력을 줄일 수 있음

(SQL언어의 확장판이라고 생각하자)

 

 

PL/SQL에서는 Query, DML, TCL 사용가능하다

 

여기서 데이터 언어 분류좀 보자

DDL(Data Definition Language) - 데이터 저장 언어

DDL은 데이터베이스를 정의하는 언어이며 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체 골격을 결정하는 역할을 한다. 스키마, 도메인, 테이블, 뷰, 인덱스 등을 정의하거나 변경, 삭제할 때 사용된다.

종류 역할
CREATE 데이터베이스, 테이블 생성
ALTER 테이블 수정
DROP 데이터베이스, 테이블 삭제
TRUNCATE 테이블 초기화

DML(Data Manipulation Language) = 데이터 조작 언어

DML은 데이터베이스에 입력된 레코드조회하거나 수정, 삭제 등의 역할을 한다. 즉, 사용자로 하여금 데이터를 처리할 수 있게 하는 도구로서, 사용자와 DBMS 간의 인터페이스를 제공한다.

종류 역할
SELECT 데이터 조회
INSERT 데이터 삽입
UPDATE 데이터 수정
DELETE 데이터 삭제

DCL(Data Control Language) - 데이터 제어 언어

DCL은 무결성, 보안 및 권한 제어 회복 등의 역할을 한다. 주로 데이터를 보호하고 관리하기 위해 사용된다. DCL을 통해 불법적인 사용자로부터 데이터를 보호할 수 있고, 데이터 정확성을 위한 무결성을 유지할 수 있다. 또한 시스템 장애에 대비한 회복과 병행수행 제어가 가능하다.

 

종류 역할
GRANT 특정 사용자에게 특정 작업 수행권한 부여
REVOKE 특정 사용자에게 특정 작업 수행권한 박탈, 회수
COMMIT 트랜잭션 작업 결과 반영
ROLLBACK 트랜잭션 작업 취소 및 복구

 

[PL/SQL의 블록(BLOCK) 구조]

  • DECLARE (선언부)
    • 변수, 상수 선언
    • 변수 선언할 거 있을때만 사용하면 됨. 꼭 필수로 작성해야 하는 부분은 아님
  • BEGIN (실행부)
    • SQL문, 제어문, 반복문, 커서
  • EXCEPTION (예외 처리부)
    • 예외 처리
  • END;
    • 하나의 블록이 끝났음을 명시하기 위해 END를 붙이고, 뒤에 ;을 붙이기
  • /
    • 블록이 종료됐다는 것을 명시하기 위해 / 붙이기

 

작성 요령

한 문장이 종료할 때마다 세미콜론(;) 주기

END 뒤에 세미콜론(;) 사용해 블럭 종료

주석
한 줄 주석
--
여러 줄 주석
/* */

쿼리문 수행 시 / 입력

PL/SQL 블록은 행에 / 가 있으면 종결로 간주

 

 

오라클에서 화면 출력을 위해서는 PUT_LINE이란 프로시저를 이용

java로 따지면 syso랑 비슷한 느낌

- DBMS_OUTPUT.PUT_LINE(출력할 내용) 같이 사용.

- 위 프로시저를 사용하여 출력되는 내용을 화면에 보여주기 위해서는 환경 변수 SERVEROUTPUT(디폴트값이 OFF이므로) ON으로 변경.

- SET serveroutput ON

 

-- 메시지 출력하기 예시

SET serveroutput ON

BEGIN

dbms_output.put_line('안녕');

END;

 

결과 = 안녕

 


'DEV(실무 기록) > DB, 쿼리' 카테고리의 다른 글

Oracle comment 관련 쿼리  (0) 2024.08.07
MSSQL-OPENQUERY  (0) 2024.03.26
SQL 문법 , 실행 순서  (0) 2024.03.05