* 프로시져(Procedure)란?
- 특정 작업을 수행하는, 이름이 있는 PL/SQL BLOCK 이다.
PL/SQL BLOCK ?
PL/SQL (Procedural Language extension to SQL)
- PL/SQL은 상용 관계형 데이터베이스 시스템인 오라클 DBMS에서
SQL 언어를 확장하기 위해 사용하는 *컴퓨터 프로그래밍 언어 중 하나*
=> Oracle의 표준 데이터 엑세스 언어
=> 프로시저 생성자를 SQL과 완벽하게 통합
주로 자료 내부에서 SQL 명령문만으로 처리하기에는 복잡한 자료의 저장이나!!
프로시저와 트리거 등을 작성하는 데 쓰인다.
매개 변수를 받을 수 있고, 반복적으로 사용 할 수 있는 BLOCK 이다.
보통 연속 실행 또는 구현이 복잡한 **트랜잭션을 수행하는 PL/SQL BLOCK을
데이터베이스에 저장하기 위해 생성한다.
**
트랜잭션(Transaction 이하 트랜잭션)이란,
데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위
데이터베이스의 상태를 변화시킨다 =>
질의어(SQL)를 이용하여 데이터베이스를 접근 하는 것을 의미 (SELECT, INSERT, DELETE, UPDATE)
출처: https://mommoo.tistory.com/62 [개발자로 홀로 서기]
https://brownbears.tistory.com/181?category=191941
유저 프로세스가 PL/SQL 블록을 보내면, 서버 프로세서는 PL/SQL Engine에서 해당 블록을 받고
SQL과 Procedural를 나눠서 SQL은 SQL Statement Executer로 보낸다.
PL/SQL 프로그램의 종류는 크게
- Procedure
- Function
- Trigger
로 나뉘어 진다.
- 오라클에서 지원하는 프로그래밍 언어의 특성을 수용,
SQL에서는 사용할수없는 절차적 프로그래밍 기능을 가지고 있어 SQL의 단점을 보완
***
- SQL은 관계형 데이터베이스에 저장된 데이터에 Access하기 위하여 사용하는 표준언어 이다.
- PL/SQL은 SQL문을 사용하여 프로그램을 작성할 수 있도록 확장해 놓은 오라클의 Procedural Language 이다.
출처: https://daemonjin.tistory.com/entry/SQL과-PLSQL-SQLPlus의-차이점이 [뚱냥블로그]
출처: https://goddaehee.tistory.com/99 [갓대희의 작은공간]
출처: https://smiler.tistory.com/entry/Procedure-란 [아직은 내가 쓴 글보다 퍼온 글이 훨씬 많음]
=====
Pl Sql
▶ 장점
- 프로시저 생성자와 SQL의 통합
- 성능 향상 : 잘 만들어진 PL/SQL 명령문이라는 가정하에 좋아진다.
- 모듈식 프로그램 개발 가능 :
논리적인 작업을 진행하는 여러 명령어들을 하나의 블록을 만들 수 있다.
- 이식성이 좋다
- 예외 처리 가능
=> 또한 SQL의 다음 단점을 해결 가능하다.
1) 변수가 없다.
2) 한번에 하나의 명령문만 사용 가능하기 떄문에 트래픽이 상대적으로 증가한다.
3) 제어문이 사용 불가. (IF, LOOP)
4) 예외처리가 없다. 등등
▶ 기본 특징
- 블록 단위의 실행을 제공
* 이를 위해 BEGIN과 END;를 사용
그리고 마지막 라인에 /를 입력하면 해당 블록이 실행
- 변수, 상수 등을 선언하여 SQL과 절차형 언어에서 사용
- 변수의 선언은 DECLARE절에서만 가능.
그리고 BEGIN 섹션에서 새 값이 할당될 수 있다.
- IF문을 사용하여 조건에 따라 문장들을 분기 가능
- LOOP문을 사용하여 일련의 문장을 반복 가능
- 커서를 사용하여 여러 행을 검색 및 처리
- [ PL/SQL에서 사용 가능한 SQL은 Query,
DML(Select | Insert, Update, Delete),
TCL(COMMIT, ROLLBACK, SAVEPOINT)이다. ]
DDL (CREATE, DROP, ALTER->수정, TRUNCATE->자르기, 테이블의 모든 row를 제거 ),
DCL (GRANT, REVOKE) 명령어는 동적 SQL을 이용할 때만 사용 가능하다.
DROP TABLE과의 차이점
DROP TABLE은 테이블의 존재 자체가 없어져 구조가 남지않는 반면 TRUNCATE TABLE은 테이블은 존재하면서 데이터의 내용만 제거하기 때문에 구조가 남아있다.
=====
1. DML(Data Manipulation Language) : 데이터 조작어
select : 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE(검색, 회수, 되찾다) 라고도 함
Insert, Update, Delete : 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입, 수정, 삭제)의 명령어들을 말함.
2. DDL(Data Definition Language) : 데이터 정의어
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함.
3. DCL(Data Controll Language) : 데이터 제어어
*데이터베이스에 접근*하고 *객체들을 사용하도록 권한을 주고 회수하는 명령어*들을 말함.
GRANT -> 부여 REVOKE-> 취소
4. TCL(Transaction Control Language) : 트랜잭션 제어어
논리적인 작업의 단위를 묶어서// DML에 의해 조작된 결과!를
작업단위(트랜잭션) 별로 제어하는 명령어를 말함.
1) COMMIT
- 모든 작업들을 정상적으로 처리
- 데이터베이스에 모두 반영 : 테이블에 적용이 된다.
- 변경된 내용을 모두 영구 저장 : 테이블에 저장
- commit이 되면 작업이 끝난 상태로 취급
- rollback이 안됨(취소가 불가능)
2) ROLLBACK
- 처리 과정에서 발생한 변경 사항을 취소
(메모리상에 저장된 결과물, insert, update, delete)
-이전의 상태로 되돌린다 -> 삭제
- commit 후 그 다음의 상태부터 롤백이 가능 *commit 이전 데이터는 취소 불가!
3) 자동 commit 되는 경우
- DDL문(create~ alter~ drop~으로 시작하는 문장)
- DCL문(grant, revoke) 사용권한
- exit하면 commit 명령어를 입력하지 않아도 메모리에 저장된 값을 테이블로 저장한 후
오라클을 종료
4) 자동 rollback 되는 경우
- 비정상적인 종료
-----
- [ PL/SQL의 SELECT문은 해당 SELECT의 결과를 PL/SQL Engine으로 보낸다. ]
이를 캐치하기 위한 변수를 DECLARE해야 하고, INTO절을 꼭 선언하여 넣을 변수를 꼭 표현해주어야 SELECT 문장은 반드시 한 개의 행이 검색되어야 한다.
그리고 이를 INTO절을 꼭 사용해야한다. 또한 검색되는 행이 없으면 문제가 발생한다.
`출처: https://goddaehee.tistory.com/99 [갓대희의 작은공간]
'coding > mssql' 카테고리의 다른 글
DB 성능 올리기 (0) | 2022.04.22 |
---|---|
@@IDENTITY (0) | 2022.04.15 |
mssql over() 만 사용할 때.. (0) | 2022.03.10 |
mssql SQL 작동순서 (0) | 2022.03.10 |
mssql CTE 이해 (우선 재귀제외) (0) | 2022.03.10 |