• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 1. Stored Programs 정의
    2. 스토어드 루틴 (프로시저 및 함수)의 사용
    3. 트리거 사용
    4. Event Scheduler 사용
    5. Views 사용
    6. Stored Programs 및 Views 액세스 제어
    7. Stored Programs의 Binary Logging
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

20.1 Stored Programs 정의

각 저장 프로그램은 SQL 문으로 구성된 본체가 포함됩니다. 이 문은 세미콜론 ( ; ) 문자로 구분 된 여러 개의 문으로 구성된 복합 문의 경우가 있습니다. 예를 들어, 다음 저장 프로 시저에 SET 문 및 REPEAT 루프 (루프 자체에 다른 SET 문을 포함합니다)을 포함 BEGIN ... END 블록으로 구성된 본체가 있습니다.

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
  SET @x = 0;
  REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;

mysql 클라이언트 프로그램을 사용하여 세미콜론 문자를 포함 저장된 프로그램을 정의 할 때 문제가 발생합니다. 기본적으로 mysql 자체는 세미콜론 문 구분자로 인식합니다. 따라서 mysql이 저장 프로그램 정의 전체를 서버에 전달하도록 구분 기호를 일시적으로 다시 정의해야합니다.

mysql 구분 기호를 다시 정의하려면 delimiter 명령을 사용합니다. 다음의 예는 위의 dorepeat() 프로 시저에 대해 이렇게하는 방법을 보여줍니다. 단락 문자는 // 로 변경되어 정의 전체를 하나의 문으로 서버에 전달하여 프로 시저를 호출하기 전에 ; 에 복원 할 수 있습니다. 그러면 프로 시저 본문에서 사용되는 ; 구분자를 mysql 자체가 해석하는 것이 아니라 서버에 전달할 수 있습니다.

mysql> delimiter //

mysql> CREATE PROCEDURE dorepeat(p1 INT)
    -> BEGIN
    ->   SET @x = 0;
    ->   REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL dorepeat(1000);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @x;
+------+
| @x   |
+------+
| 1001 |
+------+
1 row in set (0.00 sec)

구분자를 // 이외의 문자열에 다시 정의 할 수 구분자는 단일 문자로 구성 할 수도 있고, 여러 문자로 구성 할 수 있습니다. 백 슬래시 ( " \ ") 문자는 MySQL의 이스케이프 문자이므로 사용하지 마십시오.

다음 매개 변수를 받아 SQL 함수를 사용하여 작업을 수행 한 후 결과를 반환하는 함수를 보여줍니다. 이 경우 함수 정의 내부의 ; 문 구분자가 포함되어 있지 않기 때문에, delimiter 를 사용할 필요가 없습니다.

mysql> CREATE FUNCTION hello (s CHAR(20))
mysql> RETURNS CHAR(50) DETERMINISTIC
    -> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world!  |
+----------------+
1 row in set (0.00 sec)


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved