Posiadam taką tablę:
CREATE TABLE `test`.`test` ( `id` INT NOT NULL , `user` INT NOT NULL , `type` ENUM('a','b','c') NOT NULL ) ENGINE = InnoDB; INSERT INTO `test` (`id`, `user`, `type`) VALUES ('1', '123', 'a'), ('2', '321', 'b');
I taką procedurę:
CREATE DEFINER=`root`@`localhost` PROCEDURE `procedura_testowa`(OUT `result` VARCHAR(32), IN `userid` INT(4), IN `type` ENUM('a','b','c')) BEGIN SET @qTest = (SELECT `id` FROM `test` WHERE (`user` = userid) AND (`type` = type)); IF (@qTest) THEN SET result = 'jest'; ELSE SET result = 'nie ma'; END IF; END
Kiedy wykonam zapytanie:
SELECT `id` FROM `test` WHERE (`user` = 123) AND (`type` = 'a')
Otrzymuję wynik, gdyż taki rekord jest w bazie danych. Kiedy zmieniłbym `type` na np. 'c', to nie otrzymałbym wyniku.
Na tej podstawie sprawdzam w procedurze, czy otrzymałem jakiś wynik (czy znaleziono taki rekord).
Kiedy wykonuję procedurę:
CALL `procedura_testowa`(123, 'c')
Otrzymuję wynik "jest", co nie jest zgodne ze skryptem.
Czy ktoś mnie oświeci, gdzie znajduje się błąd?