본문 바로가기
MySql

MySQL mysql에있는 경우 삭제 절차

by 베이스 공부 2020. 10. 23.
반응형

안녕하세요 저는 데이터베이스를 업데이트해야 할 때마다 실행할 수있는 mysql 스크립트를 만들려고합니다. 스크립트는 테이블을 만든 다음 일부 저장 프로 시저를 실행합니다.

DELIMITER $$

CREATE TABLE IF NOT EXISTS tbl_name (
    col1 bigint(20) NOT NULL AUTO_INCREMENT,
    col2  varchar(255) NOT NULL,
    col3 varchar(64) NOT NULL,
    col4 datetime DEFAULT NULL,
    PRIMARY KEY (`col1 `),
    UNIQUE KEY col2  (`col2`)
) ENGINE=InnoDB AUTO_INCREMENT=572 DEFAULT CHARSET=utf8$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username 
VARCHAR(255))
BEGIN
    DECLARE var1 VARCHAR(64);
    DECLARE expirationDate DATETIME;

    SET var1 = 12345;
    SET expirationDate = DATE_ADD(NOW(), INTERVAL 30 SECOND);

    REPLACE INTO tbl_name (col2, col3, col4) VALUES (someval, var1, expirationDate);
END$$

DELIMITER ;

스크립트를 처음 실행했을 때 테이블을 생성하고 MySQL Workbench에서 저장 프로 시저를 실행했습니다. 두 번째로 같은 것을 실행했을 때 1304 프로 시저가 이미 존재한다는 오류가 발생했습니다.


DROP PROCEDURE IF EXISTS myproc;
CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username 
    VARCHAR(255))
.
.
.

나는 mysql을 처음 접했으며 이미 존재하는 경우 절차를 실행하는 방법을 잘 모르겠습니다.

어떤 도움을 주시면 감사하겠습니다.

 

해결 방법

 

DELIMITER $$ 로 변경 했으므로 다시 변경할 때까지 각 문의 끝에 해당 구분 기호를 사용해야합니다.

DROP PROCEDURE 및 CREATE PROCEDURE는 별도의 문이며 각각 고유 한 문 구분 기호가 필요합니다.

DROP PROCEDURE IF EXISTS myproc $$

위 줄 끝의 구분 기호에 유의하십시오.

CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username 
    VARCHAR(255))
.
.
.
END $$

그리고 전체 CREATE PROCEDURE 문의 끝에 또 다른 구분 기호가 있습니다.

 

참조 페이지 https://stackoverflow.com/questions/46856261

 

 

반응형

댓글