MYSQL: 74개의 글
이번 글에서는 MySQL의 Delimiter 명령어에 대해 다뤄보겠습니다. 최근 Procedure를 정의하면서 다음과 같은 SQL문을 사용하였습니다. mysql> DELIMITER $$ mysql> CREATE PROCEDURE insert_test() -> BEGIN -> DECLARE i INT; -> SET i = 0; -> WHILE i INSERT INTO account(createDatetime) VALUES(now()); -> SET i = i + 1; -> END WHILE; -> END $$ mysql> DELIMITER ; 맨 처음과 끝에 Delimiter 명령어를 사용하였습니다. 본 글은 Delimiter에 관한 글이기 때문에 Procedure와 다른 명령어..
그동안 단일 건이나 간단한 IF문만 사용하여 프로시저를 생성했는데 MySQL에서도 Oracle의 Cursor같이 여러개의 데이터를 뽑아와 데이터를 반복하여 작업을 진행해보려한다. 1. TEST 테이블 생성하기 CREATE TABLE `TEST_TB1` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', `useYn` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', PRIMARY KEY (`id`) ) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB AUTO_INCREMENT=..
테이블 백업을 수행하는 프로시저를 생성해보려고 한다. 기존 테이블(직원, 휴가, 휴가기록)에서 백업 테이블을 새로 생성하는 프로시저를 만든다. 프로시저를 생성하고 이벤트 스케쥴(event schedule)까지 걸어보겠다. 1. MySQL 프로시저 생성하기 DELIMITER $$ DROP PROCEDURE IF EXISTS backup_proc; CREATE PROCEDURE backup_proc() BEGIN DROP TABLE IF EXISTS BACKUP_EMP; CREATE TABLE BACKUP_EMP SELECT * FROM EMP_EMPLOYEE; DROP TABLE IF EXISTS BACKUP_VAC; CREATE TABLE BACKUP_VAC SELECT * FROM VAC_VACATIO..
MySQL function을 이용해 직원 출석등록 함수를 만들어보겠다. 1. 테이블 생성하기 CREATE TABLE `EMP_ATTEND` ( `ATTEND_YMD` VARCHAR(8) NOT NULL COLLATE 'utf8_bin', `EMP_NO` VARCHAR(9) NOT NULL COLLATE 'utf8_bin' ) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB; 간단하게 직원출석 테이블을 생성한다. 2. 함수 생성하기 DELIMITER $$ DROP FUNCTION IF EXISTS FNC_ATTEND; CREATE FUNCTION FNC_ATTEND(attendType VARCHAR(10), empNo VARCHAR(10)) RETURNS BOOL BEGIN D..
Oracle에서는 CONNECT BY PRIOR, START WITH를 사용하여 자신의 ID와 연결된 부모 ID를 찾아가 계층적으로 쿼리결과를 뽑을 수 있다. 오라클에서만 제공하는 구문이다. -- UPMENU_ID에 연결된 MENU_ID가 계층적으로 표현된다. SELECT MENU_ID , UPMENU_ID FROM SYS_MENUINFO A CONNECT BY PRIOR MENU_ID = UPMENU_ID START WITH UPMENU_ID = '00000' 오라클 쿼리 결과 MySQL에서 위와 같은 계층형 쿼리로 구현하고자 한다면 Oracle에서 제공하는 구문을 사용할 수 없다. 아래는 테스트로 구현할 계층형 형태의 쿼리 결과이다. 동물 ┗말 ┗얼룩말 ┗조랑말 ┗망아지 ┗닭 ┗흰닭 ┗흰병아리 ┗흰달..
커서를 테이블에 연 다음 모든 레코드를 반복하는 저장 프로 시저를 작성하고 있습니다. 반복 프로세스에서 첫 번째 커서의 결과를 기반으로 동적 쿼리를 만듭니다. 동적 SQL에서 커서를 열어야하는데 mysql의 공식 문서에 따르면 MySQL "커서는 핸들러를 선언하기 전에 선언해야합니다. 변수와 조건은 먼저 선언해야합니다. 커서 또는 핸들러 선언 " . 다음은 스크립트입니다. DELIMITER $$ DROP PROCEDURE IF EXISTS sp_test$$ CREATE PROCEDURE `sp_test`() BEGIN -- Declarations DECLARE prepared_sql VARCHAR(1000); DECLARE index_count INT; -- Cursors DECLARE cursor1 C..
[COMMENT] 아직 프로시저에서 커서의 사용이 어떤 작업때 사용해야하는지 실무적으로 감이 없다. 대략적으로 이해한 것을 적어보면 select into 를 이용할 경우는 하나의 데이터만 변수값으로 가질 수 있으므로 select 한 결과를 한 로우씩 받아서 처리해야할 때 커서를 이용한다. 프로시저 예제. 커서(CURSOR) 이용하기 1. 프로시저 생성 DELIMITER // DROP PROCEDURE IF EXISTS EVT_MONITORING; CREATE PROCEDURE EVT_MONITORING() BEGIN DECLARE v_finished INTEGER DEFAULT 0; DECLARE v_evtname varchar(20); # select 한 컬럼을 담을 변수 선언 DECLARE v_evt..
[프로시저 내용] A테이블에(departments_dev) 접근하여 조회된 값을 커서에 담아서 B테이블(departments_dev2)에 입력하는 프로시저 0. 테스트용 생성 DDL (테스트용이라 간단하게 생성함) -- departments_dev 생성 (데이터 조회용 테이블) CREATE TABLE `departments_dev` ( `dept_no` CHAR(4) NOT NULL, `dept_name` VARCHAR(40) NOT NULL ) COLLATE='utf8_general_ci' ENGINE=InnoDB; insert into departments_dev values('d009','Customer Service'); insert into departments_dev values('d007',..
그동안 단일 건이나 간단한 IF문만 사용하여 프로시저를 생성했는데 MySQL에서도 Oracle의 Cursor같이 여러개의 데이터를 뽑아와 데이터를 반복하여 작업을 진행해보려한다. 1. TEST 테이블 생성하기 CREATE TABLE `TEST_TB1` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', `useYn` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', PRIMARY KEY (`id`) ) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB AUTO_INCREMENT=..
MySQL 에서 JOIN에 대해 알아보도록 하겠습니다. 0. JOIN 개요 SQL JOIN 이라고 검색하면 나오는 유명한(?) 그림 입니다. 일단 이 그림만 보아도 JOIN에 대한 개념을 어느정도 잡을 수 있습니다. 1. 테스트할 데이터 준비 CREATE TABLE IF NOT EXISTS `member` ( `idx` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(50) NOT NULL, `username` varchar(50) NOT NULL, PRIMARY KEY (`idx`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; INSERT INTO `member` (`idx`, `email`, `username..