Inser/update

Honza Pazdziora adelton na fi.muni.cz
Úterý Leden 25 12:31:12 CET 2005


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 = ... )

nebo where uid = ... . Pripadne to obalit begin a end a zachytnout
vyjimku, kterou Vam server vrati.

> 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?

> 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.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, large Web systems, XML/XSL, ...
		Only self-confident people can be simple.


Další informace o konferenci Test