반응형
안녕하세요 저는 데이터베이스를 업데이트해야 할 때마다 실행할 수있는 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
반응형
'MySql' 카테고리의 다른 글
MySQL PHP에서 MySQL 테이블 구조를 어떻게 얻습니까? 게다가 모든 테이블 목록? (0) | 2020.10.23 |
---|---|
MySQL PHP 경고 : include (C : \ xampp \ htdocs \ hse \ vendor \ composer /../../ app / Buildings.php) : 스트림을 열지 못했습니다. (0) | 2020.10.23 |
MySQL iPhone에서 MySQL 데이터베이스에 연결하는 방법은 무엇입니까? (0) | 2020.10.23 |
MySQL에서 숫자로 varchar 필드 정렬 (0) | 2020.10.23 |
MySQL에서 제외하는 대안 (0) | 2020.10.23 |
댓글