ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MySQL] 저장 프로시저(Stored Procedure) & 저장 함수(Stored Function) & 트리거(Trigger)
    CSE/MySQL 2015. 6. 12. 16:28



    저장 프로시저 폼


     CREATE PROCEDURE 프로시저명()

     BEGIN

         SQL 문1

         SQL 문2

     END



    저장 프로시저 생성


     

    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DELIMITER //
    CREATE PROCEDURE pr1()
    BEGIN
        select * from sale;
        select * from employ;
    END
    //
    DELIMITER ;
    cs





    저장 프로시저 호출


     

    1
    2
    3
    CALL procedure_name;
     
    CALL pr1;
    cs






     




    설정한 값 이상인 레코드만 표시하는 프로시저


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DELIMITER //
     
    CREATE PROCEDURE pr2(d INT)
    BEGIN
        select * from sale where sales >= d;
    END
    //
     
    DELIMITER ;
     
    CALL pr2(100);
    cs
     


     





    프로시저 내용 표시


    1
    SHOW CREATE PROCEDURE pr2;
    cs
     


     




    프로시저 삭제



    1
    2
    DROP PROCEDURE pr1;
    DROP PROCEDURE pr2;
    cs
     






    저장 함수 폼


     CREATE FUNCTION 함수명(인수 자료형) RETURNS 반환값자료형

     BEGIN

         SQL 문.. 

         RETURN 반환값.식

     

     END

     




    저장 함수로 표준 체중 계산


     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    DELIMITER //
     
    CREATE FUNCTION fWeight(height INT) RETURNS DOUBLE
    BEGIN
        RETURN height * height * 22 / 10000;
    END
    //
     
    DELIMITER ;
    cs



     

    1
    select fWeight(175);
    cs




     




    레코드의 평균값 반환 저장 함수


     

    1
    2
    3
    4
    5
    6
    CREATE FUNCTION fAverage() RETURNS DOUBLE
    BEGIN
        DECLARE r DOUBLE;
        SELECT AVG(sales) INTO r FROM sale;
        RETURN r;
    END
    cs



     

    1
    select fAverage();
    cs



     




    저장 함수 삭제


    1
    2
    3
    4
    DROP FUNCTION function_name;
     
    DROP FUNCTION fAverage;
    DROP FUNCTION fWeight;
    cs
     







    트리거 폼


     CREATE TRIGGER ​트리거_이름 BEFORE(또는 AFTER) delete 등의 명령

     ON 테이블_이름 FOR EACH ROW

     BEGIN     

         변경 전(OLD.칼럼_이름) 또는 변경 후(NEW.칼럼_이름)을 이용한 처리

     

     

     END



    1
    2
    3
    4
    5
    6
    7
    8
    9
    DELIMITER //
     
    CREATE TRIGGER tr1 BEFORE DELETE ON employ FOR EACH ROW
    BEGIN
        INSERT INTO sale_copy VALUES(OLD.number, OLD.name, OLD.age);
    END
    //
     
    DELIMITER ;
    cs
     


    1
    delete from sale;
    cs

     



     

    1
    select * from sale_copy
    cs






     

    트리거 확인


    1
    show triggers;
    cs
     


     


    트리거 삭제



    1
    2
     
    drop trigger tr1;
    cs
     







    'CSE > MySQL' 카테고리의 다른 글

    [MySQL] 뷰(View)  (0) 2015.06.12
    [MySQL] UNION, JOIN, SUB QUERY  (0) 2015.06.12
    [MySQL] 수정(Update) & 삭제(Delete)  (0) 2015.06.12
    [MySQL] 조회  (0) 2015.06.12
    [MySQL] 테이블 변경, 색인, 기본키  (0) 2015.06.12
    [MySQL] 데이터베이스 & 테이블  (0) 2015.06.12

    댓글

Designed by Tistory.