MySQL Procedura szukająca UserId=X we wszystkich tabelach
Prosiłbym o pomoc w procedurze MySQL ,która przeleciała by po wszystkich tabelach w bazie w celu znalezienia konkretnego numeru (INT) przyłóżmy X gdzie UserId = X. USerId to kolumna w tabelach.
Schemat jest taki ,że mam tabelę
COS ( ... ) --> brak UserId
COS1 (... , UserId,...)
COS1 (... , UserId,...)
COS2 (... , UserId,...)
KOT
KOT1
KOT2
KOT3
...
Nazwy tabel podałem przykładowe ale schemat jest taki ,że to co nie ma po nazwie tabeli żadnej cyfry jest tak jakby rodzicem a reszta tabel tworzy się dynamicznie gdy osiągniemy konkretną liczę rekordów w tabeli
chciałbym wywoływać procedurę poprzez
CALL SearchUser(X); --> X - numer użytkownika
prosiłbym o pomoc lub jeśli ktoś ma gotowy skrypt to o niego.
Napisałem coś takiego , ale to jednak nie działa tak jak powinno:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE PROCEDURE `searchUser`( in_search varchar(50),in_column_name 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_name,'` WHERE `', in_column_name,'` = "',in_search,'"') ,table_name,column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA IN ('comments') and column_name=in_column_name ;
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;
SELECT * FROM temp_details;
END
CREATE TABLE `temp_details` (
`t_schema` varchar(45) NOT NULL,
`t_table` varchar(45) NOT NULL,
`t_field` varchar(45) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
call get_table('2','userID');
Druga sprawa ,że ciągle mam komunikat: Incorrect number of Fetch variables