MySQL 의 Stored Function 호출

3609 단어 function
MySQL 의 Stored Function 과 Trigger Stored Function 저장 Function 은 표현 식 을 포함 한 건축 방법 으로 호출 할 수 있 는 곳 에서 사용 할 수 있 으 며 SELECT,UPDATE,DELETE,INSERT 구문 에서 사용 할 수 있 습 니 다.
자바 코드
  • CREATE FUNCTION function_name(parameter[,...])   
  •     RETURNS datatype   
  •     [LANGUAGE SQL]   
  •     [ [NOT] DETERMINISTIC]   
  •     [ {CONTAINS SQL | NO SQL | MODIFIES SQL DATA | READS SQL DATA} ]   
  •     [ SQL SECURITY {DEFINER|INVOKER} ]   
  •     [COMMENT comment_string ]   
  •     function_statements  
  • CREATE FUNCTION function_name(parameter[,...])
    
        RETURNS datatype
    
        [LANGUAGE SQL]
    
        [ [NOT] DETERMINISTIC]
    
        [ {CONTAINS SQL | NO SQL | MODIFIES SQL DATA | READS SQL DATA} ]
    
        [ SQL SECURITY {DEFINER|INVOKER} ]
    
        [COMMENT comment_string ]
    
        function_statements
    
    

    세 가지 저장 과정 과 다른 점:1.반환 값 유형 2 를 정의 하려 면 RETURNS 문 구 를 사용 해 야 합 니 다.매개 변수의 IN,OUT 또는 INOUT 수식 자 를 지정 할 수 없습니다.모든 매개 변 수 는 암시 적 으로 IN 3 이 어야 합 니 다.Function 체 는 RETURN 문 구 를 포함 하여 Function 실행 을 종료 하고 지정 한 결 과 를 호출 자 에 게 되 돌려 주어 야 합 니 다.Example:
    자바 코드
  • CREATE FUNCTION cus_status(in_status CHAR(1))   
  •     RETURNS VARCHAR(20)   
  • BEGIN   
  •     DECLARE long_status VARCHAR(20);   
  •   
  •     IF in_status = 'O' THEN   
  •         SET long_status='Overdue';   
  •     ELSEIF in_status = 'U' THEN   
  •         SET long_status='Up to date';   
  •     ELSEIF in_status = 'N' THEN   
  •         SET long_status='New';   
  •     END IF;   
  •   
  •     RETURN(long_status);   
  • END;  
  • CREATE FUNCTION cus_status(in_status CHAR(1))
    
        RETURNS VARCHAR(20)
    
    BEGIN
    
        DECLARE long_status VARCHAR(20);
    
    
    
        IF in_status = 'O' THEN
    
            SET long_status='Overdue';
    
        ELSEIF in_status = 'U' THEN
    
            SET long_status='Up to date';
    
        ELSEIF in_status = 'N' THEN
    
            SET long_status='New';
    
        END IF;
    
    
    
        RETURN(long_status);
    
    END;
    
    

    MySQL 의 현재 최신 버 전(5.1)은 끼 워 넣 은 Stored Function 을 지원 하지 않 는 것 같 습 니 다.끼 워 넣 은 Stored Procedure Trigger Trigger 는 데이터베이스 에 있 는 이벤트 트리거 입 니 다.현재 MySQL 의 실현 은 특정 table 의 DML 구문(INSERT/UPDATE/DELETE)을 호출 할 때 트리거 합 니 다.
    자바 코드
  • CREATE [DEFINER={user|CURRENT_USER}] TRIGGER trigger_name   
  •   {BEFORE|AFTER}   
  •   {INSERT|UPDATE|DELETE}   
  • ON table_name   
  • FOR EACH ROW   
  • trigger_statements  
  • CREATE [DEFINER={user|CURRENT_USER}] TRIGGER trigger_name
    
      {BEFORE|AFTER}
    
      {INSERT|UPDATE|DELETE}
    
    ON table_name
    
    FOR EACH ROW
    
    trigger_statements
    
    

    AFTER 형식의 Trigger 는 NEW 기록 값 을 수정 할 수 없습니다.만약 에 대량의 줄 을 동시에 조작 하면 Trigger 는 성능 비용 이 많이 들 수 있 으 므 로 Trigger 에 성능 소모 가 큰 SQL 문 구 를 넣 는 것 을 피 할 수 있 습 니 다.Example:Using trigger to implememmt audit logging
    자바 코드
  • CREATE TRIGGER account_balance_au   
  •     AFTER UPDATE ON account_balance FOR EACH ROW   
  •     BEGIN   
  •         INSERT into transaction_log   
  •             (user_id, description)   
  •             VALUES(user(),   
  •                 CONCAT('Adjusted account ',   
  •                     NEW.account_id, ' from ', OLD.balance,   
  •                         ' to ', NEW.balance));   
  • END;  
  • 좋은 웹페이지 즐겨찾기