开发者

Mysql error in stored procudure

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');
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜