완다
20
2020-09-16 14:51:46
2
87

MYSQL) 저장 프로시저 실행 후 다른 테이블에 데이터를 어떻게 삽입할 수 있을까요?


회원 DB 를 활용해서 이메일 비인증 유저 정보에 한해 로그 DB에다 삽입을 하려고 합니다


비인증 기간은 1일 경과를 기준이구요


공부하다 보니 저장 프로시저 + 커서를 활용하면 괜찮겠다고 생각되어 작성을 하고 있는데요


질문에 관련되어  두 테이블에 대한 칼럼 구성을 이렇습니다


회원 DB (USER)

  - userid : BIGINT (자동 생성 : 회원 DB 고유 번호)

  - nick_name : VARCHAR (유저ID)

  - enabled : BIT (인증/비인증 관련 : 인증하였으면 1, 비인증 상태이면 0)

  - data_created : DATETIME (유저 정보 생성일자)


시스템 로그 DB (SYSTEM_LOG)

  - id : BIGINT (자동 생성 : 시스템 로그 DB 고유 번호)

  - log_id : BIGINT (비인증이 확인되어 삭제 처리한 회원에 대한 로그 : 회원 DB에 userid 와 동일)

  - log_target : VARCHAR (삭제 처리한 유저 ID)

  - data_created : DATETIME (로그 유저 정보 생성일자)


======


위에 대한 전제를 토대로 작성한 커서 + 저장 프로시저입니다


DELIMITER $$


CREATE PROCEDURE RemoveUnauthorizedUserid()


BEGIN

    DECLARE enabled BIT DEFAULT 0; // 변수 선언

    

    DECLARE RemoveUnauthorizedUserid_Cursor CURSOR FOR 

    SELECT * FROM user WHERE data_created < CURDATE(); // 1일 경과 확인

    

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET enabled = 1; // 핸들러 : 인증 된 유저 제외

    

    OPEN RemoveUnauthorizedUserid_Cursor;

    

    Remove_loop : LOOP


    // ★ 질문 관련 : 시스템 로그 DB에 삭제 처리하려는 userid 및 nick_name 등을 넣고 싶은데 

                              FETCH 등을 어떻게 활용하면 좋은 지를 잘 모르겠습니다


    DELETE FROM USER;

    

    END LOOP Remove_loop;

    

    CLOSE RemoveUnauthorizedUserid_Cursor;

END $$


DELIMITER ;


===


질문은 저장 프로시저 안에 별표 처리로 달아 놓았습니다


답변 주시는 분들 모두 감사드리겠습니다 (__)

0
  • 답변 2

  • 파랭이
    104
    2020-09-16 16:07:02

    Fetch & Cursor 를 사용해야 하는 이유가 있으신가요?

    그냥 바로 해당 조건에 만족하는 데이터를 한번에 Insert 하면 안되는지요?

  • 틸코블렛
    151
    2020-09-16 17:36:17

    프로시저 내부에서 커서를 사용하는것보다 이런 쿼리를 사용하시는게 어떠신가요?


    INSERT INTO 시스템 로그(컬럼명1, 컬럼명2, 컬럼명3, etc..)

    SELECT 컬럼명1, 컬럼명2, 컬럼명3, etc.. 

    FROM 회원 테이블 

    WHERE 조회 조건


    ===================================

    초기 스타트업을 위한 공인인증서 스크래핑 API 사이트

    홈택스, 정부24, 건강보험공단, 심평원, 내보험다찾아, Credit4U 등

    http://tilko.net

  • 로그인을 하시면 답변 을 등록할 수 있습니다.