yoursyun
저장프로시져 5.x 버전 이상 본문
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 ;