yoursyun

저장프로시져 5.x 버전 이상 본문

database/mariaDB

저장프로시져 5.x 버전 이상

yoursyun 2013. 8. 9. 17:10

1. 테이블 생성 

CREATE TABLE `TranTest` ( 

  `num` int(11) NOT NULL auto_increment, 

  `col01` varchar(32) default NULL, 

  PRIMARY KEY  (`num`) 

)


CREATE TABLE `TranTest2` ( 

  `num` int(11) NOT NULL auto_increment, 

  `col01` varchar(32) default NULL, 

  PRIMARY KEY  (`num`) 

)


2. 입력 용 프로시저 생성 

Delimiter $ 

CREATE PROCEDURE `Prc_TranTest_Input` 

    in in_col01 varchar(32) 

BEGIN 

    INSERT INTO TranTest SET col01 = in_col01; 

END $ 


3. SELECT 용 프로시저 생성 

Delimiter $ 

CREATE PROCEDURE `Prc_TranTest_Select` 

    in in_col01 varchar(32) 

BEGIN 

    SELECT num, col01 FROM TranTest WHERE col01 like concat(in_col01, '%') ; 

END $ 



4. Transaction 용 프로시저 생성 

Delimiter $ 

CREATE PROCEDURE `Prc_TranTest_InError` 

    NOT DETERMINISTIC 

    SQL SECURITY DEFINER 

    COMMENT '' 

BEGIN 

    DECLARE dbErr int default '0'; 

    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION  SET dbErr = -1; 

    

    START TRANSACTION; 


    INSERT INTO TranTest SET col01 = '1234'; 

    INSERT INTO TranTest2 SET col012 = '1234'; //일부러 에러값을 내기위해 칼럼명을 다르게 적습니다. 

    

    IF dbErr < 0 THEN 

        ROLLBACK; 

    ELSE 

        COMMIT; 

    END IF; 


END $ 



5. mysqli를 윈도우xp에서 apm설치로 할경우(extension=mysqli.dll)을 없으면 추가해 주삼 


6. 7번에 결과를 보기 위해 데이타 추가 


$mysqli  = new mysqli("localhost", "USERID", "USERPW", "USERDB"); 


if (mysqli_connect_error()) { 

    printf("Connect Failed : %sn", mysqli_connect_error()); 

    exit; 


$mysqli->query("set names utf8"); 

$mysqli->query("Call Prc_TranTest_Input('1234')"); 



7. PHP 를 이용하여 SELECT 및 입력하기 

$mysqli  = new mysqli("localhost", "USERID", "USERPW", "USERDB"); 

if (mysqli_connect_error()) { 

    printf("Connect Failed : %sn", mysqli_connect_error()); 

    exit; 

$mysqli->query("set names utf8"); 


//SELECT 

if($qry = $mysqli->query("Call Prc_TranTest_Select('123')")) { 

    $rs = $qry->fetch_object(); 

    echo $rs->col01; 


//INSERT TranTest; 

$mysqli->query("Call Prc_TranTest_InError()"); 


8. mysql에서 store procedure를 입력하지 않을때는 

delimiter ;



반응형