Autor | Zpráva | ||
---|---|---|---|
blaaablaaa Profil |
#1 · Zasláno: 18. 3. 2009, 11:16:47
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 |
#2 · Zasláno: 18. 3. 2009, 11:45:11
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 |
#3 · Zasláno: 18. 3. 2009, 11:57:46
Mastodont
diky, zmatlo me to (ne)znaceni promennych @ (jak jsem vzykly z mssql) |
||
ninja Profil |
#4 · Zasláno: 18. 3. 2009, 12:20:59
blaaablaaa: pokud dobre chapu tvoji proceduru, tak ji v MySQL celou muzes nahradit syntaxi INSERT IGNORE.
|
||
blaaablaaa Profil |
#5 · Zasláno: 18. 3. 2009, 13:06:05
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 |
#6 · Zasláno: 18. 3. 2009, 15:19:23
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). |
||
Časová prodleva: 15 let
|
0