Autor Zpráva
blaaablaaa
Profil
ahoj, pokousim se vytvotit jednoduchou proceduru v mysql:
CREATE DEFINER=`root`@`localhost` PROCEDURE `add2friends`(IDuser int,
IDfriend int)
BEGIN
DECLARE count int;
SET @count = 0;
SELECT COUNT(IDuser) INTO @count FROM friends WHERE IDuser=@IDuser AND
IDfriend=@IDfriend LIMIT 1;
IF @count = 0 THEN
INSERT INTO friends(IDuser, IDfriend, datum) VALUES(@IDuser, @IDfriend,
NOW());
END IF;
END


kdyz procku zavolam :
CALL add2friends( 1, 10 ) ;

, vyhodi to chybu #1048 - Column 'IDuser' cannot be null
Nevite, kde by mohl byt problem?
Mastodont
Profil
No tipnul bych si, že @IDuser nemáš nikde definováno, takže je null ...

CREATE DEFINER=`root`@`localhost` PROCEDURE `add2friends`(pIDuser int,
pIDfriend int)
...
SELECT COUNT(IDuser) INTO @count FROM friends WHERE IDuser=pIDuser AND
IDfriend=pIDfriend LIMIT 1;
blaaablaaa
Profil
Mastodont
diky, zmatlo me to (ne)znaceni promennych @ (jak jsem vzykly z mssql)
ninja
Profil
blaaablaaa: pokud dobre chapu tvoji proceduru, tak ji v MySQL celou muzes nahradit syntaxi INSERT IGNORE.
blaaablaaa
Profil
ninja
procedura zkontroluje, zda uz zaznam existuje, pokud ne, tak ho vlozi. insert ignore je v podstate to same jako replace, ne? tzn. prepise puvodni hodnotu, pokud neexistuje, tak vlozi. ja potrebuji puvodni hodnotu (datum) neprepisovat
ninja
Profil
blaaablaaa: bylo by tak tezke si precist cast manualu, co jsem linkoval?!

With IGNORE, the row still is not inserted, but no error is issued.

Podminka je ze budes mit unikatni index (IDuser, IDfriend).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: