0
이것은 모든 데이터베이스, 테이블 및 열을 검색하는 저장 프로 시저입니다. 이 절차는 오류없이 작성되었습니다.Mysql 저장 프로 시저를 호출 할 때 오류가 발생했습니다.
DELIMITER $$
DROP PROCEDURE IF EXISTS `mydb`.`get_table`$$
CREATE DEFINER=`root`@`%` PROCEDURE `get_table`(in_search varchar(50))
READS SQL DATA
BEGIN
DECLARE trunc_cmd VARCHAR(50);
DECLARE search_string VARCHAR(250);
DECLARE db,tbl,clmn CHAR(50);
DECLARE done INT DEFAULT 0;
DECLARE COUNTER INT;
DECLARE table_cur CURSOR FOR
SELECT concat('SELECT COUNT(*) INTO @CNT_VALUE FROM ',
table_schema,'.', table_name,
' WHERE ', column_name,' REGEXP ''',in_search,''''
)
,table_schema,table_name,column_name
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA NOT IN ('mydb','information_schema');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
# #Truncating table for refill the data for new search.
PREPARE trunc_cmd FROM 'TRUNCATE TABLE temp_details';
EXECUTE trunc_cmd ;
OPEN table_cur;
table_loop:LOOP
FETCH table_cur INTO search_string,db,tbl,clmn;
# #Executing the search
SET @search_string = search_string;
SELECT search_string;
PREPARE search_string FROM @search_string;
EXECUTE search_string;
SET COUNTER = @CNT_VALUE;
SELECT COUNTER;
IF COUNTER>0 THEN
# # Inserting required results from search to table
INSERT INTO temp_details VALUES(db,tbl,clmn);
END IF;
IF done=1 THEN
LEAVE table_loop;
END IF;
END LOOP;
CLOSE table_cur;
# #Finally Show Results
SELECT * FROM temp_details;
END$$
DELIMITER ;
그러나이 절차를 호출하면 오류가 발생합니다.
call get_table('aaa')
오류 코드 : 1064 당신은 SQL 구문에 오류가있다; 라인 1 에서 'AAA'REGEXP 삭제 '를 근처 를 사용할 수있는 권리 구문에 대한 MySQL 서버에 버전에 해당하는 설명서를 확인
그나마 어디 있는지"에서 온다 "삭제 적절한 이름을 시도했지만 같은 오류가 발생합니다. 또한 백틱과 ANSI 따옴표를 사용하지 않아도 문제를 해결하지 못했습니다. – devuser