반응형
저장 프로 시저를 작성했습니다. 테이블 이름을 입력 매개 변수로 사용하는 것 외에는 정상적으로 작동합니다.
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
반응형
'MySql' 카테고리의 다른 글
MySQL 사용자 복사 (0) | 2020.10.02 |
---|---|
MySQL mysql 데이터베이스에서 중복 레코드를 삭제하는 방법은 무엇입니까? (0) | 2020.10.02 |
MySQL Zend DB Select : ORDER BY FIELD ( 'id', some_array)-어떻게? (0) | 2020.10.02 |
MySQL phpMyAdmin을 사용하여 MySQL 이벤트 일정을 설정할 수 있습니까? (0) | 2020.10.02 |
MySQL mysql에서 정확한 문자열을 검색하는 방법 (0) | 2020.10.02 |
댓글