Avatar
Honza
Člen
Avatar
Honza:

Ahoj, ze studijních důvodů si hraju s Oracle a dostal jsem se k nested tables (hnízděné tabulky). Je mi to celkem jasné až na jednu věc a to kdy chci provést update nebo delete na všech vhnízděných tabulkách které splňují nějakou podmínku.

Např. mějme tabulku OSOBY_KONTAKTY.
V této tabulce jsou sloupce:
kontakt_ID
jmeno
kontakt

přičemž kontakt je nested table a obsahuje sloupce: telefon, email.

Když chci změnit data u jednoho kontaktu tak to není problém, udělám to takto:

UPDATE TABLE(SELECT kontakty FROM OSOBY_KONTAKTY WHERE kontakt_ID = 5)
SET email = 'lister@rd.com' WHERE email = 'cat@rd.com';

Co když bych ale chtěl udělat to (v pravdě nelogicky) , že ve všech nested tables kde není vyplněn email (je null) budu chtít místo null doplnit text 'Email not set'

Tohle nefunguje:

UPDATE TABLE(SELECT kontakty FROM OSOBY_KONTAKTY)
SET email = 'Email not set' WHERE email IS NULL;

To že to nefunguje je samozřejmě logické a nedivím se tomu, ten select vrací pro každý záznam tabulku. Ale jak to udělat aby to fungovalo? Tuším že by to možná šlo nějak řešit pomocí union, kdy bych výsledky jednotlivých selectů spojil do jedné tabulky na kterou bych pak dělal ten update/delete. Ale otázka je jak :) Nebo na to jdu úplně blbě a řeší se to nějak jinak?

Odpovědět 4.12.2015 8:38
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.