This stored procedure is to search through all tables and columns in database.
DELIMITER $$
DROP PROCEDURE IF EXISTS get_table $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
PROCEDURE `auradoxdb`.`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 (‘information_schema’,'test’,'mysql’);
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 tablehhh
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 ;
Following error occurs when execute this..
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'SELECT COUNT(*)
INTO @CNT_VALUE FROM `’,table_schema,’`.`’,table_name,’`' at line 12
(0 ms taken)
could any body please help me to solve this?
It appears that you are trying to dynamically build an SQL statement for each table. To do this, you will need to quote the text parts as if it was a normal string and concatenate the dynamic parts. Replacing the query with the following should work:
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 ('information_schema','test','mysql');
精彩评论