😎
Onemorebottlee's TIL
  • 🤓Introduce
  • 📖DevLog
    • 💣Error
      • npm ERR! Cannot read properties of null (reading 'edgesOut')
      • git
        • src refspec main does not match any
      • NextJS
        • No img element
        • ReferenceError : document is not defined
        • `next/image` Un-configured Host
  • 📺Lecture
    • Nomad Coders
      • 초보자를 위한 리덕스 101
        • #0 Introduction
        • #1 PURE REDUX: COUNTER
        • #2 PURE REDUX: TO DO LIST
        • #3 REACT REDUX
        • #4 Redux Toolkit
      • 바닐라 JS로 그림 앱 만들기
      • React JS 마스터 클래스
        • #2 Styled Componnents
        • #3 TypeScript
        • #4 Crypto Tracker
        • #5 State Management
        • #6 Trello
        • #7 ANIMATIONS
      • Next.js 시작하기
        • #0 INTRODUCTION
        • #1 FRAMEWORK OVERVIEW
        • #2 PRACTICE PROJECT
      • Typescript로 블록체인 만들기
        • #1 Introduction
        • #2 Overview of TypeScript
        • #3 Functions
        • #4 Classes and Interfaces
        • #5 TypeScript Blockchain
      • SQL Master Class
        • #1 Introduction
        • #2 SQLite
        • #3 Data Definition Language
        • #4 Data Manipulation Language
        • #5 Subqueries and CTEs
        • #6 Indexes
        • #7 MySQL
        • #8 Foreign Keys
        • #9 JOINS
        • #10 Nomalization
        • #11 Events & Triggers
        • #12 Full-Text Indexes
        • #13 PostgreSQL
        • #14 Functions And Procedures
        • #15 Transactions
        • #16 Data Control Language
        • #17 PostgreSQL JSON Columns
        • #18 PostgreSQL Extensions
        • #19 MongoDB
        • #20 REDIS
        • #21 Javascript and Python Drivers
    • Udemy
      • TypeScript 마스터 with Webpack & React
        • [S1] 소개
        • [S2] 설치 및 설정
        • [S3] 타입 애너테이션 기초
        • [S4] 함수
        • [S5] 객체 타입
        • [S6] 배열 타입
        • [S7] 유니온타입
        • [S8] Tuple & Enum
        • [S9] 인터페이스
        • [S10] TypeScript 컴파일러
        • [S11] 미니 프로젝트 DOM, 타입 단언, 그리고 더 많은 내용
        • [S12] Class
        • [S13] TS Class
        • [S14] Generics ⭐⭐⭐⭐⭐
        • [S15] Narrowing
        • [S16] Type Declarations
        • [S17] Module
        • [S18] Webpack 과 TypeScript
        • [S19] React
    • 모두를 위한 컴퓨터 과학 CS50
      • 1. 컴퓨팅 사고
      • 2. C언어
      • 3. 배열
      • 4. 알고리즘
      • 5. 메모리
      • 6. 자료구조
    • 생활코딩
      • DATABASE
        • DATABASE1
  • 📚Book
    • 모던 자바스크립트 Deep Dive
      • 1장 프로그래밍
      • 2장 자바스크립트란?
      • 3장 자바스크립트 개발 환경과 실행 방법
      • 4장 변수
      • 5장 표현식과 문
      • 6장 데이터 타입
      • 7장 연산자
      • 8장 제어문
      • 9장 타입 변환과 단축 평가 ⭐⭐⭐
      • 10장 객체 리터럴
      • 11장 원시 값과 객체의 비교
      • 12장 함수 ⭐⭐⭐⭐
      • 13장 스코프
      • 14장 전역 변수의 문제점
      • 15장 let, const 키워드와 블록 레벨 스코프 ⭐⭐⭐
      • 16장 프로퍼티 어트리뷰트
      • 17장 생성자 함수에 의한 객체 생성
      • 18장 함수와 일급 객체 ⭐⭐
      • 19장 프로토타입 ⭐⭐⭐⭐⭐
      • 20장 strict mode
      • 21장 빌트인 객체 ⭐
      • 22장 this ⭐⭐⭐
      • 23장 실행 컨텍스트 ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
      • 24장 클로저 ⭐⭐⭐⭐⭐⭐⭐
      • 25장 클래스
      • 26장 ES6 함수의 추가 기능
      • 27장 배열 ⭐⭐⭐
      • 28장 Number
      • 29장 Math
      • 30장 Date
      • 31장 RegExp
      • 32장 String
      • 33장 7번째 데이터 타입 Symbol
      • 34장 이터러블
      • 35장 스프레드 문법
      • 36장 디스트럭처링 할당
      • 37장 Set과 Map
      • 38장 브라우저의 렌더링 과정⭐⭐⭐⭐⭐⭐⭐⭐
      • 39장 DOM ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
      • 40장 이벤트⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
      • 41장 타이머
      • 42장 비동기 프로그래밍 ⭐⭐⭐⭐⭐⭐⭐⭐
      • 43장 Ajax
      • 44장 REST API
      • 45장 프로미스
      • 46장 제너레이터와 async/await
      • 47장 에러 처리
      • 48장 모듈
      • 49장 Babel과 Webpack을 이용한 ES6+/ES.NEXT 개발 환경 구축
    • 러닝 타입스크립트
      • Ch.1 자바스크립트에서 타입스크립트로
      • Ch.2 타입 시스템
      • Ch.3 유니언과 리터럴
      • Ch.4 객체
      • Ch.5 함수
      • Ch.6 배열
      • Ch.7 인터페이스
      • Ch.8 클래스
      • Ch.9 타입 제한자
      • Ch.10 제네릭
      • Ch.11 선언 파일
      • Ch.12 IDE 기능 사용
      • Ch.13 구성 옵션
      • Ch.14 구문 확장
      • Ch.15 타입 운영
      • 용어 사전
    • 자바스크립트 완벽 가이드
    • SQL in 10 Minutes
      • 1장 SQL 이해하기
      • 2장 데이터 가져오기
      • 3장 가져온 데이터 정렬하기
      • 4장 데이터 필터링
      • 5장 고급 데이터 필터링
      • 6장 와일드카드 문자를 이용한 필터링
      • 7장 계산 필드 생성하기
      • 8장 데이터 조작 함수 사용하기
      • 9장 데이터 요약
      • 10장 데이터 그룹핑
      • 11장 서브쿼리 사용하기
      • 12장 테이블 조인
      • 13장 고급 테이블 조인 생성하기
      • 14장 쿼리 결합하기
      • 15장 데이터 삽입하기
      • 16장 데이터 업데이트와 삭제
      • 17장 테이블 생성과 조작
      • 18장 뷰 사용하기
      • 19장 저장 프로시저 사용하기
      • 20장 트랜잭션 처리 관리하기
      • 21장 커서 사용하기
      • 22장 고급 데이터 조작 옵션
    • 면접을 위한 CS 전공지식 노트
      • 4 데이터베이스
        • 4.1 데이터베이스의 기본
    • 2023 이기적 SQL 개발자 이론서 + 기출문제
      • 데이터 모델링 이해
        • S1. 데이터 모델링
  • 💻Study
    • CS 지식 발표
      • 1회차
      • 2회차
      • 3회차
      • 4회차
      • 5회차
      • 6회차
      • 7회차
      • 8회차
      • 9회차
    • TypeScript Exercises
      • Ex 1
      • Ex 2
      • Ex 3
      • Ex 4
      • Ex 5
      • Ex 6
      • Ex 7
      • Ex 8
      • Ex 9
      • Ex 10
  • 🔄ETC
    • Article
      • Atomic Design Pattern
      • 프론트엔드 개발자
    • DATABASE
      • Oracle
        • CEIL() & FLOOR() - 소수점 올림 & 내림
        • DUAL 테이블 - 임시 테이블로 결과 확인하기
    • Ubuntu
      • 어플리케이션 업데이트
Powered by GitBook
On this page
  • 저장 프로시저 이해하기
  • 저장 프로시저를 사용하는 이유
  • 저장 프로시저 실행하기
  • 저장 프로시저 생성하기
  • 정리하기

Was this helpful?

  1. Book
  2. SQL in 10 Minutes

19장 저장 프로시저 사용하기

저장 프로시저 이해하기

지금까지 사용한 SQL 문은 한 개 이상의 테이블에 단일한 구문을 사용하는 간단한 구문이다. 하지만 종종 복잡한 작업을 수행하기 위해 다수의 구문을 사용할 필요가 있다. 이때 여러 테이블과 다양한 SQL 문이 필요하지만 수행할 정확한 SQL 명령문과 순서는 고정된 것이 아니다. 언제든지 변경될 수 있다.

그렇다면 코드를 어떻게 작성해야 할까?

일단, SQL 문을 따로 작성한 후 결과에 따라 조건에 맞게 명령문을 수동으로 실행할 수 있다. 또 다른 방법은 저장 프로시저를 사용하는 것이다. 저장 프로시저란 하나 이상의 SQL 명령문 집합으로 일종의 배치 파일이다.

저장 프로시저를 사용하는 이유

  • 여러 단계로 이루어진 과정을 사용하기 쉬운 하나의 단위로 캡슐화해 복잡한 과정을 단순화한다.

  • 여러 단계를 반복해서 만들 필요가 없어 데이터 일관성을 보장한다.

  • 오류 방지에 도움을 준다.

  • 변경 관리를 단순화한다.

  • 보안성을 높인다.

  • 명령을 처리하기 위해 DBMS가 해야 하는 일이 줄고, 성능이 향상된다.

  • SQL 언어 요소와 기능 중 하나의 요청 안에서 사용하는 것이 있는데, 저장 프로시저는 이러한 언어 요소와 기능을 사용해 더 강력하고 유연한 코드 작성이 가능하다.

등등 많은 이유가 있지만 세 가지 주된 이점은 단순성, 보안성, 성능이다.

저장 프로시저의 단점은 다음과 같다.

  • DBMS마다 저장 프로시저 문법이 달라 다른 DBMS로 이식하기 어렵다.

  • 기본 SQL 문 작성보다 복잡해 고수준의 기술과 경험이 필요하다.

이러한 단점에도 저장 프로시저는 매우 유용하다.

저장 프로시저 실행하기

저장 프로시저를 실행하는 SQL 문은 EXECUTE 이다. 저장 프로시저 이름과 매개변수를 전달한다.

EXECUTE AddNewProduct ('JTS01', 'Stuffed Eiffel Tower', 6.49, 'asdfadf');
-- AddNewProduct라는 이름의 저장 프로시저를 실행한다.
-- 이는 Products 테이블에 새로운 제품을 추가한다.
-- 전달한 네 개의 매개변수는 각각 판매처ID, 제품명, 가격, 설명이다.
-- 이 저장 프로시저는 Products 테이블에 새로운 행을 하나 추가하고, 적절한 열에 매개변수를 전달한다.

Products 테이블에는 기본 키인 prod_id가 필요한데 위의 예시에서는 매개변수로 전달하지 않았다.

왜?

ID를 제대로 생성하려면, 사용자에게 의존하는 것보다 프로세스가 자동으로 처리하는 것이 더 안전하다.

AddNewProduct는 다음의 역할을 수행한다.

  • 네 개의 매개변수에 값이 있는지 확인하고, 데이터를 전달한다.

  • 기본 키로 사용하는 고유한 ID를 생성한다.

  • Products 테이블에 새로운 행을 추가하고, 생성한 기본 키와 전달한 데이터를 적절한 열에 삽입한다.

위 단계는 기본적인 저장 프로시저의 실행 형식이다. DBMS에 따라 추가적인 실행 옵션을 사용 가능하다.

저장 프로시저 생성하기

저장 프로시저 작성은 쉬운 일이 아니다. 예시를 보자.

-- Oracle ver.
-- 이메일 주소를 가진 고객의 수를 세는 저장 프로시저
CREATE PROCEDURE MailingListCount (
    ListCount OUT INTEGER
)
IS
v_rows INTEGER;
BEGIN
    SELECT count(*) INTO v_rows
    FROM Customers
    WHERE NOT cust_email IS NULL;
    ListCount := v_rows;
END;

MailingListCount는 ListCount라는 이름의 매개변수를 갖는다. 이 매개변수는 값을 전달하는게 아니라 결괏값을 가져온다. OUT 키워드는 이런 행동을 명시하기 위해 사용한다. ORACLE은 IN, OUT, INOUT 형의 매개변수를 지원하는데 IN은 저장 프로시저로 값을 전달하기 위해, OUT은 저장 프로시저에서 값을 반환하기 위해, INOUT은 두 용도 모두 쓰인다. 저장 프로시저 코드는 BEGIN과 END 문으로 묶여있고, 그 사이에 이메일 주소를 가진 고객을 가져오기 위해 SELECT 문을 수행한다. 그런 다음 ListCount가 가져온 행의 수로 설정된다.

이 코드는 다음과 같이 호출한다.

var ReturnValue NUMBER -- 변수 선언
EXEC MailingListCount(:ReturnVALUE); -- 저장 프로시저에 매개변수로 전달
SELECT ReturnValue; -- SELECT 문으로 가져온 값 출력

이 외에도 SQL Server, Microsoft SQL Server 등 DBMS마다 수행하는 방법이 다르다.

정리하기

  • 저장 프로시저란

  • 저장 프로시저의 실행과 작성 문법

Previous18장 뷰 사용하기Next20장 트랜잭션 처리 관리하기

Last updated 1 year ago

Was this helpful?

📚