MYSQL 스토리지 프로세스, 일반적인 논리적 지식 요약

4130 단어
Mysql 저장 프로세스
1. 저장 프로세스 문법 만들기 (형식)

DELIMITER $
CREATE PROCEDURE      A(IN      a INT,IN      b VARCHAR(20),OUT      c INT)
BEGIN
    ..........
END $

해결:
  • IN은 수신되는 매개변수를 나타내며 수신되는 매개변수 이름을 정의하고 수신되는 매개변수 유형(INT, VARCHAR, DOUBLE,......)을 따라갑니다.
  • OUT는 저장 프로세스가 실행되고 되돌아오는 데이터를 대표하고 파라미터 이름을 정의하며 뒤에 파라미터 유형(INT, VARCHAR, DOUBLE,......)을 따라간다.
  • INOUT는 전송 또는 반환이 가능하며 매개변수 이름을 정의하고 매개변수 유형(INT, VARCHAR, DOUBLE,......)을 따라갈 수 있음을 나타냅니다.

  • 2. 저장 과정 내의 구체적인 문법과 논리
    A. 변수 구문을 정의합니다.
    
    DECLARE    a     (INT,VARCHAR(20),BOOLEAN,........) [DEFAULT NULL];

    참고: 매개변수 유형 뒤에 DEFAULT NULL을 추가할 수 있습니다.를 참고하십시오.
    B. 변수 지정:
    방법 1(변수에 직접 할당):
    
    SET      a = NEW();

    방식2(sql 조회의 결과는 변수에 직접 값을 부여):
    
    SELECT `student`.age INTO      a FROM `student` WHERE...........

    방식3(sql 조회의 결과는 여러 변수에 직접 값을 부여):
    
    SELECT `student`.name AS      a,`student`.age AS      b INTO      a,     b FROM `student` ...............

    c. 논리적 판단:
    
    #IF  :    
    
          IF     (3>5) THEN
                TRUE   .........;
          END IF;
      #IF ELSE  :
          IF   (a>0) THEN
               (a>0)   ........;
          ELSE IF   (a<0) THEN
                (a<0)   .......;
          ELSE
                 .......;
          END IF;

    D. 커서, (LOOP) 순환:
    
    # .     :create procedure my_procedure() --       
    begin --       
    declare my_id varchar(32); --      1
    declare my_name varchar(50); --      2
    DECLARE done INT DEFAULT FALSE; --            ,  false
    
    DECLARE cur CURSOR FOR ( SELECT id, name FROM t_people ); --           
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; --          ,         true
     
    OPEN cur; --     
     posLoop: LOOP --      ,myLoop       ,       
      FETCH cur into my_id, my_name; --                     12
         IF done THEN --         
            LEAVE posLoop; --     
        END IF;
      --        ,  sql             
      UPDATE t_user SET c_name = my_name WHERE id = my_id and rtrim(ltrim(c_name)) = ''; --      
     
      COMMIT; --     
     END LOOP posLoop; --         
     CLOSE cur; --     
    END; --       
    
    # .     :create procedure my_procedure() --       begin --       
    declare my_id varchar(32); --      1
    declare my_name varchar(50); --      2
    DECLARE done INT DEFAULT FALSE; --            ,  false
    
    DECLARE cur_1 CURSOR FOR ( SELECT id, name FROM t_people ); --           
    DECLARE cur_2 CURSOR FOR ( SELECT id_2,name_2 FROM t_people_2); --          
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; --          ,         true
     
    OPEN cur_1; --     
     posLoop: LOOP --      ,myLoop       ,       
      FETCH cur_1 into my_id, my_name; --                     12
         IF done THEN --         
            LEAVE posLoop; --     
        END IF;
      --        ,  sql             
      UPDATE ..........;  --         
     END LOOP posLoop; --         
     CLOSE cur_1; --     
    
      SET done = FALSE;  --                handler   TRUE ,    set      FALSE ,             。(                   ,          )
      
    OPEN cur_2; --     
     posLoop_2: LOOP --      ,myLoop       ,       
      FETCH cur_2 into my_id, my_name; --                     12
         IF done THEN --         
            LEAVE posLoop_2; --     
        END IF;
      --        ,  sql             
      INSERT ..........;   --         
     END LOOP posLoop_2; --         
     CLOSE cur_2; --     
    
    
    END; --       

    3. 저장 프로세스의 호출
    
    #            CALL      (  .....);
    
    #           (     )
    
    CALL      (@aaa);
    SELECT @aaa;

    4. 저장 프로세스 삭제
    
    DROP PROCEDURE      ; 

    5. 주의사항
    저장 프로세스의 세미콜론(;)중요하니 되도록 생략하지 마세요.

    좋은 웹페이지 즐겨찾기