Introduction
저장 프로시저란 무엇이고, 어떻게 만들며, 어떻게 사용 하는지, 언제 사용 하는지에 대해서 정리한다.
Content
1. 무엇을 저장 프로시저 라고 하는가?
저장 프로시저란 SQL 로 만든 함수 이다. 이렇게 나는 이해 했다. 이 함수에 여러 SQL 절을 놓아 두어, 한가지 목적으로 사용 한다. 이 책에서는 "배치 파일" 이라고 비유 했다.
2. 왜 저장 프로시저를 사용 하는가?
- 단위 하나로, 작업을 만들어 저장 할 수 있기 때문이다.
모든 이유는 오로지 이 이유 때문이다. 이 이유 때문에 얻게 되는 건 언어에서 함수를 사용 할 때 얻게 되는 이점과 같다. (작업을 단위로 끊었기에 디버깅이 쉽다거나, 관리(기능 개선, 수정)가 조금(..)은 쉬어진다거나, 반복작업을 없앨 수 있다거나)
여기에 SQL 만이 얻는 장점이 하나 추가 할 수 있는데, 바로 "보안" 이다. 특정 유저에게 UPDATE 나 DELETE 를 막고, 함수만 사용 할 수 있게 막음으로써, 기존 데이터 회손을 최대한 막을 수 있다.(.. 그렇다고 이렇게 쓰는것을 못봤다. 2009.02.08)
3. 어떻게 저장 프로시저를 만드는가?
PostgreSQL 에서 저장프로시저라고 검색해 보면, "함수" 이야기만 나온다. 그렇다. PostgreSQL 에선 CREATE PROCEDURE 로 저장 프로시저를 만들지 않는다. CREATE FUNCTION 이다. 기본적인 SQL 만으로 프로시저를 만들어 사용 할때, 표현이 힘들어서 인지 PL/pgSQL 같은 procedural language(절차지향식 언어)를 사용 한다.
그렇다고 이 의미가 PL/pgSQL 만 지원한다는 것은 아니다. 관련 DBMS를 보아서 지원 가능한 procedural language(절차지향식 언어)가 무엇이 있는지 살피는게 좋겠다.
간단하게 SQL 문 하나만 남긴다.
AS 다음에 ' ' 로 SQL 절을 묶었는데, 이는 BODY 라는 뜻으로, 함수가 실행되는 본체를 뜻한다. ' ' 말고 $$ 로도 묶을 수 있다.
이것 말고도 리턴 타입, 매개변수 타입, 리턴값이 무엇이 되는지 등을 이해 해야 한다. ... 이 모든것을 정리하기엔 오늘 밤이 너무 짦으므로,(나도 잘 모르겠어서, 문서 봐야 돼.) 어디의 문서를 봐야 하는지만 정리한다. 다른 DBMS 에선 어떻게 되는지, 관련 메뉴얼을 보는게, 책을 보는 것보다 더 좋을 것이다.
문서를 보는 방법으로는 C 언어의 함수를 정의 할 때, 리턴 타입과 입력 타입을 정해 주는 것과 동일하다는 시야로 보는 것이다.
관련링크
- http://www.postgresql.org/docs/8.4/static/extend.html <-- 영문
- http://www.postgresql.jp/document/pg842doc/html/extend.html <-- 일어
- http://www.postgresql.jp/document/pg842doc/html/extend.html <-- 일어 번역
4. 어떻게 사용 하는가?
실행은 EXECUTE function-name, 이나 SELECT function-name 으로 실행 할 수 있다.
Digression
정말로 DBMS 는 메뉴얼이나 해당 DMBS 책을 보는게 좋다고 생각이 들었다. 이 장에서 얻은 수학은 저장 프로시저가 무엇인지 비유 할수 있었다는 것 이다. (별것도 아니구만!)
'책 정리 > 하루 10분씩 핵심만 골라 마스터하는 SQL' 카테고리의 다른 글
하루 10분씩 핵심만 골라 마스터하는 SQL - 다 읽고 나서... (0) | 2010.02.21 |
---|---|
22장, 고급 SQL 기능의 이해 (0) | 2010.02.21 |
21장, 커서 사용 : DECLARE CURSOR (359) | 2010.02.18 |
20장, 트랜잭션 처리 : BEGIN TRANSACTION ~ COMMIT TRANSACTION (0) | 2010.02.15 |
18장, 뷰 사용 : CREATE VIEW ~ DROP VIEW (0) | 2010.02.07 |
17장, 테이블의 생성과 제어 : CREATE TABLE ~ ALTER TABLE (0) | 2010.02.05 |
16장, 데이터의 업데이트와 삭제 : UPDATE DELETE (0) | 2010.02.05 |
15장, 데이터 삽입 : INSERT INTO ~ SELECT INTO (0) | 2010.02.02 |
14장, 쿼리의 결합 : UNION 으로 쿼리 결합하기 (0) | 2010.02.02 |
13장, 고급 조인 만들기 : SELF JOIN, NATURAL JOIN, OUTER JOIN (360) | 2010.01.31 |
최근댓글