펑션 및 기본 프로시저 생성
delimiter $$ DROP FUNCTION IF EXISTS dbname.string_print$$ CREATE FUNCTION dbname.string_print( str VARCHAR(20) ) RETURNS VARCHAR(20) BEGIN DECLARE copy_str VARCHAR(20); SET copy_str = str; RETURN copy_str; END $$ delimiter ; SELECT dbname.string_print('Hello world'); delimiter $$ DROP PROCEDURE IF EXISTS dbname.string_print$$ CREATE PROCEDURE dbname.string_print( str VARCHAR(20) ) BEGIN DECLARE copy_str VARCHAR(20); SET copy_str = str; SELECT copy_str; END $$ delimiter ; CALL dbname.string_print('Hello world');예외처리
4번라인 파라메터: IN -> input, OUT -> output <가독성을 위한 표시 기능>
7~8번라인 : 예외 핸들링을 위한 변수 선언. 쿼리 실패시 err값은 '-1'
delimiter $$ DROP PROCEDURE IF EXISTS db_name.procedure_name$$ CREATE PROCEDURE db_name.procedure_name(IN num INT, IN ch VARCHAR(2)) BEGIN DECLARE err INT DEFAULT '0'; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err = -1; START TRANSACTION; INSERT INTO table_name VALUES (num, ch); // 성공 INSERT INTO table_name VALUES (ch, num); // 실패 IF err < 0 THEN ROLLBACK; ELSE COMMIT; END IF; END $$ delimiter ;루프
delimiter $$ DROP PROCEDURE IF EXISTS db_name.procedure_name$$ CREATE PROCEDURE db_name.procedure_name(IN ch VARCHAR(2)) BEGIN DECLARE val INT DEFAULT '0'; WHILE val < 5 DO INSERT INTO table_name VALUES (val, ch); SET val = val + 1; END WHILE; END $$ delimiter ;커서
delimiter $$ DROP PROCEDURE IF EXISTS proc_name$$ CREATE PROCEDURE proc_name() BEGIN DECLARE cur_state INT DEFAULT '0'; DECLARE copy_column1 INT DEFAULT '0'; DECLARE copy_column2 INT DEFAULT '0'; DECLARE result_count INT DEFAULT '0'; DECLARE cur CURSOR FOR SELECT column1, column2 FROM table1; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET cur_state = 1; OPEN cur; REPEAT FETCH cur INTO copy_column1, copy_column2; →커서 이동 및 결과 매칭 IF NOT cur_state THEN →커서 상태 체크 UPDATE ...; SET result_count = result_count + 1; END IF; UNTIL cur_state END REPEAT; CLOSE cur; IF result_count > 0 THEN SELECT result_count; ELSE SELECT 0; END IF; END $$ delimiter ;추가 : select 검색 결과를 변수에 넣기
DROP PROCEDURE IF EXISTS proc_name$$ CREATE PROCEDURE proc_name() BEGIN DECLARE result INT DEFAULT '0'; SELECT column1 INTO result FROM table1 WHERE ...; SELECT reslut; END $$ delimiter ;※ MySQL에선 'result = column1'이 안된다.
CREATE TEMPORARY TABLE IF NOT EXISTS TEMP_TABLE ( ID BIGINT(20) NOT NULL ); Create Temporary Table my_temp_table AS Select * From my_permanent_table;테이블 생성시 pk 추가 (다중컬럼 복합키)
CREATE TABLE EMP ( EMP_NO CHAR(20) NOT NULL PRIMARY KEY, EMP_NAME CHAR(20) NOT NULL, SALARY NUMBER(4) NOT NULL, JOB CHAR(10), EMAIL VARCHAR(50) ); 또는 예2) CREATE TABLE EMP ( EMP_NO CHAR(20) NOT NULL, EMP_NAME CHAR(20) NOT NULL, SALARY NUMBER(4) NOT NULL, JOB CHAR(10), EMAIL VARCHAR(50), PRIMARY KEY(EMP_NO) );날짜 및 기타
date_add('20140701',interval 1 day) #날짜 더하기 (월 년, 주 등 더할 수 있다. 해당내용은 해당 상수를 검색) /* 상수목록 MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH */ DATEDIFF('20140801','20140701') #일짜 빼기(지정한 범위의 일수 를 구함) CONCAT('A','B'); #문자열 연결 IFNULL(FIELDNAME,EXPR) #널일경우 EXPR 의 내용으로 값 출력 #행번호 처리 방법1 SELECT @ROW_NM := @ROW_NM + 1 AS IDX FROM TABLENM, (SELECT @ROW_NM := 0) #행번호 처리방법2 (조건절이 있을 경우) SELECT @ROW_NM := @ROW_NM + 1 AS IDX FROM TABLENM WHERE (@ROW_NM := 0)=0; #기타 조인 이나 서브쿼리에서는 (SELECT @ROW_NM := 0) 을 조인절에 넣어 주거나(INNER JOIN (SELECT @ROW_NM := 0) ) #서브테이블에서는 ,(SELECT @ROW_NM := 0) 를 넣어 초기화를 반드시 해주면 된다. ##select 쿼리시 Every derived table must have its own alias 의 오류 가 생길 경우 ##해당 오류는 서브 쿼리의 알리아스가 없어서 생기는 오류 ## select * from tb1, (select * from tb2) 의 쿼리를 select * from tb1, (select * from tb2) t 이런식으로 명시적으로 이름 표시 하면 해결. ##초성검색 예제 select * from q12 where Q12DES rlike '^(A)' or (Q12DES >= 'A' and Q12DES < 'C') order by Q12DES select * from table_name where col rlike '^(ㄴ)' or (col >= '나' and col < '다') order by col
'데이터베이스 > MySql & MariaDB' 카테고리의 다른 글
Mysql Cursor (0) | 2015.09.25 |
---|---|
mysql관리시 알아 두어야 할 주요 상태 확인 명령 (0) | 2015.06.10 |
MySql,MariaDB 서버변수 설정(ConnectionTimeOut, Max_allowed_packet) (0) | 2015.05.12 |
테이블 Alter 구문 (0) | 2014.09.23 |
[마리아] db 각종 명령어 모음 (0) | 2014.01.02 |