MySQL에서 Stored procedure를 이용해 테이블명, 필드명 등을 인자로 받아 활용하는 방법입니다.

우선 완성된 코드입니다. 대략 설명드리면, 어떤 테이블에 한 열을 집어 넣고, 방금 집어 넣은 열의 Primary key 값을 받아오는 역할을 합니다.

DROP PROCEDURE IF EXISTS `getLastInsert`;
DELIMITER $$
CREATE PROCEDURE `getLastInsert `(IN TB_NAME VARCHAR(50))
BEGIN
	DECLARE tt INT;
	SET @i := concat("INSERT INTO ", TB_NAME, " values();");
	PREPARE stmt FROM @i;
	execute stmt;
	SET @s := concat("SELECT @a := last_insert_id() FROM ", TB_NAME, ' LIMIT 1');
	PREPARE stmt FROM @s;
	execute stmt;
	SELECT @a into tt;
END
$$

인자로 테이블이름을 받더라도 이 MySQL에서 테이블이름을 바로 활용하기는 어렵습니다. 코드 상에서  TB_NAME이라는 글자를 변수로 인식하지 않고 TB_NAME이라는 개체(테이블명 혹은 필드명)으로 인식해버리기 때문입니다. 이 경우를 우회하기 위해 쿼리를 문자열 형식으로 받아 실행해주는 것 작업이 필요합니다.

그래서 concat()함수를 통해 문자열을 붙이고, prepare와 execute명령으로 이 쿼리를 실행시켜주는 방법을 쓰게 되었습니다.

사실은 제 일은 아니고 다른 분일을 도와드린 거라는거 .. 덕분에 좋은 것 배웠습니다.

Posted by ElegantCoder

Google Reader

,
Response
2473 Trackbacks 0 Comments

Leave a comment