Mam taką tabelę:
fileID
userUD
uniqueFileID
originalFileName
Są w niej jeszcze inne pola, ale one są nieistotne. Po stronie aplikacji wykonuję następujące zapytanie dodające plik do bazy danych:
INSERT INTO files (userID, originalFileName) VALUES ('$userID', '$originalFileName');
Chciałbym teraz po stronie bazy danych dokonać update tego rekordu, wykonując najpierw złączenia wartosci z pól fileID, userID oraz originalFileName, następnie wykonać na tym złączonym ciągu kodowanie SHA1 i tą wartość zapisać w polu uniqueFileID. Jak to zrobić?
Coś zrobiłem, ale nie działa. Poniżej kod triggera i procedury;
DELIMITER $$ CREATE PROCEDURE `updateFiles`() BEGIN SELECT LAST_INSERT_ID() INTO @lastID FROM files; SELECT SHA1(CONCAT(fileID, userID, originalFileName)) INTO @UID FROM files WHERE fileID= @lastID; UPDATE files SET uniqueFileID= @UID WHERE fileID = @lastID; END DELIMITER ;
DELIMITER $$ DROP TRIGGER IF EXISTS uniqueID $$ CREATE TRIGGER uniqueID AFTER INSERT ON files FOR EACH ROW BEGIN CALL updateFiles(); END; $$ DELIMITER ;
Po wywołaniu INSERT dostaję błąd 1442. Jak to zrobić poprawnie?