본문 바로가기
Database/MYSQL

Mysql Procedure

by 반화넬 2012. 5. 31.
반응형

1. 프로시져 호출
CALL 프로시져명();

2. 함수 호출
SELECT 함수명();

 


DELIMITER $$

USE `프로시져 생성할 DB명`$$

DROP PROCEDURE IF EXISTS `프로시져명`$$

CREATE DEFINER=`생성자` PROCEDURE `프로시져명`(변수명 변수타입,변수명 변수타입 .......)
    MODIFIES SQL DATA
    COMMENT '프로시져 설명'
BEGIN

 DECLARE 변수명 변수 타입;
 -- 프로시져 내용
 SELECT .... FROM TB_NAME;
 

END$$

DELIMITER ;

1. 주위사항
 : DEFINER 는 생성자의 정보를 담고 있으며 해당 계정 및 아이피가 해당 서버의 정보로 설정됨
 : 생성자가 다른 유저나 아이피에서 해당 PROCEDURE & FUNCTION 을 생성할경우 실행 에러 발생함
 : DEFINER 생략 가능
 

참고 : http://dev.mysql.com/doc/refman/5.0/en/CREATE-procedure.html


DELIMITER $$

USE `member`$$

DROP PROCEDURE IF EXISTS `p_exsample_sel`$$

CREATE PROCEDURE `p_exsample_sel`()
    MODIFIES SQL DATA
    COMMENT '단일 쿼리 프로시져'
BEGIN
 
 SELECT useno,userid,title FROM TB_NAME;


END$$

DELIMITER ;

 

DELIMITER $$

USE `member`$$

DROP PROCEDURE IF EXISTS `p_exsample_sel`$$

CREATE PROCEDURE `p_exsample_sel`()
    MODIFIES SQL DATA
    COMMENT '멀티 쿼리 프로시져'
BEGIN
 
 SELECT COUNT(*) cnt FROM TB_NAME;
 SELECT useno,userid,title FROM TB_NAME;


END$$

DELIMITER ;

=>  하나의 Array 2개가 result 넘어옴


DELIMITER $$

USE `member`$$

DROP PROCEDURE IF EXISTS `p_exsample_sel`$$

CREATE PROCEDURE `p_exsample_sel`()
    MODIFIES SQL DATA
    COMMENT '내부 검사형  프로시져'
BEGIN

 DECLARE s_cnt INT DEFAULT 0;
 
 SELECT COUNT(*) INTO s_cnt FROM TB_NAME;
 IF s_cnt>0 THEN
  SELECT useno,userid,title FROM TB_NAME;
 END IF;


END$$

DELIMITER ;

=> SELECT useno,userid,title FROM TB_NAME 에 대한 하나의 result만 넘어옴

 

DELIMITER $$

USE `member`$$

DROP PROCEDURE IF EXISTS `p_exsample_sel`$$

CREATE PROCEDURE `p_exsample_sel`(userno INT)
    MODIFIES SQL DATA
    COMMENT '내부 검사형  프로시져'
BEGIN

 DECLARE s_cnt INT DEFAULT 0;
 DECLARE s_sql VARCHAR(255) DEFAULT '';
 
 SELECT COUNT(*) INTO s_cnt FROM TB_NAME;
 IF s_cnt>0 THEN
  SET s_sql = CONCAT(" WHERE userno=",userno);
  SET @stmt = CONCAT("SELECT COUNT(*) AS cnt FROM TB_NAME B ",s_sql);
  PREPARE stmt FROM @stmt;
  EXECUTE stmt;
  DROP PREPARE stmt;
 END IF;


END$$

DELIMITER ;

=> userno 변수값을 받아서 STRING 을 SQL로 실행하기 위한 STMT 방식


DELIMITER $$

USE `c_backup`$$

DROP FUNCTION IF EXISTS `f_func_sel`$$

CREATE FUNCTION `f_func_sel`(ssn VARCHAR(14)) RETURNS INT
    NO SQL
    COMMENT '일반 리턴형 함수'
BEGIN

 DECLARE s_cnt INT DEFAULT 0;
 
 SELECT COUNT(*) INTO s_cnt FROM TB_NAME;
 IF s_cnt>0 THEN
  RETURN 1;
 ELSE
  RETURN 0;
 END IF;

END$$

DELIMITER ;

 

DELIMITER $$

USE `c_backup`$$

DROP FUNCTION IF EXISTS `f_func_sel`$$

CREATE FUNCTION `f_func_sel`(ssn VARCHAR(14)) RETURNS VARCHAR(10)
    NO SQL
    COMMENT '일반 리턴형 함수'
BEGIN

 DECLARE s_cnt INT DEFAULT 0;
 DECLARE s_return VARCHAR(10) DEFAULT '';
 
 SELECT COUNT(*) INTO s_cnt FROM TB_NAME;
 IF s_cnt>0 THEN
  SET s_return = CONCAT("개수 있음 : ",s_cnt);
 ELSE
  SET s_return = CONCAT("개수 없음 : ",s_cnt);
 END IF;
 
 RETURN s_return;

END$$

DELIMITER ;

 

 

# mysql 내부에서 사용하실때 구문

IF 조건절 THEN
 SELECT userno FROM TB_NAME;
ELSE
 SELECT userid FROM TB_NAME;
END IF;


IF 조건절 THEN

ELSEIF 조건절 THEN

ELSE

END IF;


CASE WHEN 조건절 THEN
 값
WHEN 조건절 THEN
 값
ELSE
 값
END CASE;

 

반응형