Advertisement
Guest User

find_overall.sql

a guest
Dec 25th, 2012
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 2.04 KB | None | 0 0
  1. DELIMITER $$
  2.  
  3. USE `Имя_БД`$$
  4.  
  5. DROP PROCEDURE IF EXISTS `find_overall`$$
  6.  
  7. CREATE DEFINER=`имя_юзверя`@`%` PROCEDURE `find_overall`(
  8.     p_dbname VARCHAR(64),
  9.     p_search VARCHAR(255)
  10. )
  11. BEGIN
  12. DECLARE search_string VARCHAR(512);
  13. DECLARE table_name VARCHAR(64);
  14. DECLARE column_name VARCHAR(64);
  15. DECLARE selections TEXT;
  16. DECLARE conditions TEXT;
  17. DECLARE eof BOOL;
  18. DECLARE curs_tables CURSOR FOR
  19. SELECT DISTINCT c.table_name
  20. FROM information_schema.columns c
  21. WHERE c.table_schema = p_dbname
  22. AND c.data_type IN (
  23.     'char', 'varchar', 'binary', 'varbinary',
  24.     'tinytext', 'text', 'mediumtext', 'longtext',
  25.     'tinyblob', 'blob', 'mediumblob', 'longblob'
  26. );
  27. DECLARE curs_columns CURSOR FOR
  28. SELECT c.column_name
  29. FROM information_schema.columns c
  30. WHERE c.table_schema = p_dbname
  31. AND c.table_name = table_name
  32. AND c.data_type IN (
  33.     'char', 'varchar', 'binary', 'varbinary',
  34.     'tinytext', 'text', 'mediumtext', 'longtext',
  35.     'tinyblob', 'blob', 'mediumblob', 'longblob'
  36. );
  37. DECLARE CONTINUE HANDLER FOR NOT FOUND SET eof = TRUE;
  38. SET search_string = QUOTE(p_search);
  39. SET search_string = SUBSTR(search_string, 2, LENGTH(search_string) - 2);
  40. OPEN curs_tables;
  41. SET eof = FALSE;
  42. L_tables: LOOP
  43. FETCH curs_tables INTO table_name;
  44. IF eof THEN LEAVE L_tables; END IF;
  45. OPEN curs_columns;
  46. SET selections = '';
  47. SET conditions = '';
  48. L_columns: LOOP
  49. FETCH curs_columns INTO column_name;
  50. IF eof THEN LEAVE L_columns; END IF;
  51. SET selections = CONCAT(selections,
  52. IF(selections = '', '', ', '),
  53. 'IF(`', column_name, '` LIKE "%', search_string, '%", `', column_name, '`, NULL)',
  54. ' `', column_name, '`'
  55. );
  56. SET conditions = CONCAT(conditions,
  57. IF(conditions = '', '', ' OR '),
  58. '`', column_name, '` LIKE "%', search_string, '%"'
  59. );
  60. END LOOP;
  61. CLOSE curs_columns;
  62. SET eof = FALSE;
  63. SET @stm = CONCAT(
  64. 'SELECT "', table_name, '" `$table$`, ', selections,
  65. ' FROM `', p_dbname, '`.`', table_name, '`',
  66. ' WHERE ', conditions
  67. );
  68. PREPARE find_overall FROM @stm;
  69. EXECUTE find_overall;
  70. DROP PREPARE find_overall;
  71. END LOOP;
  72. CLOSE curs_tables;
  73. END$$
  74.  
  75. DELIMITER ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement