Inser/update

"Petr \"Qaxi\" Klíma" qaxi na seznam.cz
Úterý Leden 25 13:51:29 CET 2005


Honza Pazdziora wrote:

>On Tue, Jan 25, 2005 at 12:13:37PM +0100, "Petr \"Qaxi\" Klíma" wrote:
>  
>
>>Pekny den preji
>>
>>je nejaky trik na nasledujici:
>>mam tabulku passwd:
>>
>>CREATE TABLE passwd (
>>  uid integer DEFAULT 0 NOT NULL,
>>  username character varying(8) DEFAULT '' NOT NULL,
>>  name character varying(30) NOT NULL
>>)
>>
>>chci do ni "synchronizovat" /etc/passwd
>>
>>pomoci sedu si udelam SQL INSERT a .....
>>pokud tam user uz je, tak to vyhodi chybu ...
>>    
>>
>
>Tak udelejte 
>
>	insert into passwd select ( ..... ) from dual
>	where not exists ( select 1 from passwd where username = ... )]
>
tohle mi ale neosetri "nove" uzivatel (UPDATE)... ,ze?

>tohle mi ale neosetri "nove" uzivatel ... ,ze
>
>nebo where uid = ... . Pripadne to obalit begin a end a zachytnout
>vyjimku, kterou Vam server vrati.
>
>  
>
to bych to ale asi musel zaregistrovat jako proceduru ...., ze
tohle mi nechodi ...

#ERROR:  parser: parse error at or near "select" at character 12

begin
    select * from passwd where uid='2011' AND username='benes';
    if not exist
    then
        insert into passwd ( uid, username ) VALUES ('2011','benes');
    else
        update passwd set uid='2011', username='benes' ;
    endif
end
#(Duration 0:00.10)

SORRY

ja myslel (vim, ze se to nema delat ...), ze kdyz mam nejake zkusenosti 
s MySQL tak budu schopen PSQL pouzivat hned a .....

>>pokuk udelam SQL UPDATE  tak to zas hlasi chybu u "novych" uzivatelu
>>    
>>
>
>Update by na neexistujicim zaznamu zadnou chybu hlasit nemel, proste
>jenom rekne, ze zaktualizoval 0 zaznamu. Co mate za databazovy stroj?
>
>  
>
to byla moje spatne formulace .... ano nahlasi to UPDATE 0

>>vim, ze bych mohl soustit insert a update za sebou a mit pokoj, ale ja 
>>bych ve scriptu potreboval kontrolovat UNIQ na username a to mi ta 
>>zaplava chyb neumozni
>>    
>>
>
>Otazka je, jestli nechcete pouzit neco jineho nez posilat to na stdin
>nejakeho rakdoveho klienta (tusim, ze to je to co delate z te zminky
>o sedu). Napriklad v Perlu si v DBI muzete osetrit uplne cokoli vcetne
>toho, jestli Vam update neco nasel nebo ne a podle toho delat nebo
>nedelat insert. Jinak kontrola UNIQ na username se typicky dela pomoci
>unique klice.
>  
>
ano UNIQ klic mam ...






Další informace o konferenci Test