본문 바로가기
MySql

MySQL 저장 프로시 저는 테이블 이름을 매개 변수로 사용하지 않습니다.

by 베이스 공부 2020. 10. 2.
반응형

저장 프로 시저를 작성했습니다. 테이블 이름을 입력 매개 변수로 사용하는 것 외에는 정상적으로 작동합니다.

MySQL에서 내 proc을 보자.

DELIMITER $$
USE `db_test`$$

DROP PROCEDURE IF EXISTS test_proc$$

CREATE DEFINER=`root`@`localhost` 
PROCEDURE `test_proc`(IN serviceName VARCHAR(10),IN newsInfoTable VARCHAR(100))
BEGIN                  
    SELECT COUNT(*) FROM newsInfoTable WHERE newsServiceName=serviceName;           
END$$

DELIMITER ;

저장 프로 시저 호출 매개 변수 :

USE db_test;
CALL test_proc('abc','tbl_test_news');

여기서 서비스 이름 매개 변수가 제대로 작동합니다. 그러나 newsInfoTable 변수를 테이블 입력 매개 변수로 포함하면 오류가 표시됩니다.

테이블 'db_test.newsinfotable'이 존재하지 않습니다.

왜 이것이 테이블 매개 변수에 대해서만 발생합니까? 이 오류에서 어떻게 검색하거나

테이블 이름을 저장 프로 시저에 매개 변수로 어떻게 전달합니까?

 

해결 방법

 

SP는 동적 테이블 이름으로 최적화 할 수 없으므로 MySQL을 포함한 많은 DB에서는 테이블 이름을 동적으로 지정할 수 없습니다.

이를 해결하는 한 가지 방법은 동적 SQL을 사용하는 것입니다.

CREATE DEFINER=`root`@`localhost` PROCEDURE `test_proc`(IN serviceName VARCHAR(10),IN newsInfoTable VARCHAR(100))
BEGIN                  
    SET @sql = CONCAT('SELECT COUNT(*) FROM ',newsInfoTable,' WHERE newsServiceName=?;'); 
    PREPARE s1 from @sql;
    SET @paramA = serviceName;
    EXECUTE s1 USING @paramA;
END$$

 

참조 페이지 https://stackoverflow.com/questions/6609778

 

 

반응형

댓글