Kifinomult frissítés segítségével több asztalt oracle 11 r2, a fejlesztő blog, akkor a fejlesztés

Kifinomult frissítés segítségével több asztalt oracle 11 r2, a fejlesztő blog, akkor a fejlesztés

Szeretnék írni ma a „komplex” frissíteni az adatokat Oracle segítségével több asztalt. Minden adatbázis-fejlesztők tudják, hogyan kell frissíteni az adatokat, ez az egyik legelső, hogy minden tanuló. Nem fogok ebben a cikkben ömlött a víz, azok számára, akik nem ismerik a frissítés elvileg, azt hiszem, el kell olvasnia, mi ez, és mit eszik, és azok, akik már tartják magukat tapasztalt - kérni! Így a legkönnyebb frissítés a következő:

frissítés tábla1 set column1 = 'Novosibirsk' ahol column1 = 'Szahalini'

De mi a teendő, ha kell frissíteni az adatokat egy táblázatban adatok alapján egy másik táblázatban? Hm..davayte csinálni 🙂 Nemrég a munkahelyen, láttam egy kolléga indított frissítés jelek, keres egy speciális szkript (akkor írj egy külön cikket a script), hogy mit csinál, mi a kód, és ami a legfontosabb -, hogy mennyi a script végrehajtásra kerül ( igen, az Oracle is mutatja az időt a végén a speciális szolgáltatási táblázatban), egyszerűen ofigel - script végrehajtása véget ér, reklámok 🙂 5 nap, mert az összes nem optimalizált algoritmus frissítés császármetszéssel. Vágjunk bele.

frissítés (válassza t.adress_shop, t.adress_client, s.adress_shop mint adress_shop_new, s.adress_client mint adress_client_new a tábla1 t belső összekapcsolás 2. táblázat S s.ur_number = t.ur_number) TT set tt.adress_shop = tt.adress_shop_new, tt. adress_client = tt.adress_client_new

Szerintem érted mindent, hogy mit és hogyan. Fogom magyarázni egy kicsit - válassza ki a kívánt mezőket frissíteni az első táblát, majd válassza ki a második tábla frissíteni kell. Ez az egész ragaszkodik a szerződés szerinti számát (ne feledkezzünk meg duplán). Itt is kifejezetten, hogy ugyanazt a mező nevét, hogy valahogy megnehezítik készült 2 mező frissül, miután a «meghatározott», és ez csak egyszer jön el az a kérdés, hogyan kell frissíteni mind a 2 területen.

Itt szoktam a «inner join», de bárki csatlakozhat - aki, ahogy tetszik, attól függően, postalennoy célok és a teljesítmény. Ennek megfelelően több táblát is használható join'e. Azt hiszem, mindenki tudja, hogyan dzhoinitsya más táblákhoz, leírni, nem fogok találni bármilyen könyvben is. Csak meg akartam mutatni valamit, ami nem minden könyv megtalálható. Amikor elkezdtem dolgozni Oracle rózsa Kérdéseim a frissítés, egyszer segített, amikor egy kezdő, most szeretnék segíteni 🙂 Mellesleg, van egy másik módja annak, hogy nem ugyanaz a frissítés, hanem «egyesítés» - ez a kijelentés, hogy «betét» «törlése» és a «frissítés». Írok egy forgatókönyvet némi magyarázatot, ha nem egyértelmű -, akkor mindig felmerül a kérdés:

Beleolvadnak tábla1 t USING (SELECT * FROM 2. táblázat s) p ON (p.ur_number = t.ur_number) összeillesztve akkor - ha egybeesett szerződést, maga frissíti frissítés beállítva t.adress_shop = p.adress_shop, t.adress_client = p.adress_client HA nem párosul majd helyezze (t.adress_shop) értékek ( "Semmi sem található)

By the way, a 2. lehetőség úgy tartják, hogy egy magasabb szintre. Azt mutatja, hogy Ön ismeri a komplex frissítések, valamint képesek legyenek együttműködni «egyesítés» operátor.

Plusz, a második módszer lényege, hogy szúrhat néhány alapértelmezett értéket, ha a feltétel kapcsolási nem működött. By the way, ez működik Oracle 10g, a 9-es verzió is.

Remélem, minden érthető volt, és hasznos valaki.

Van itt egy kérdés. Van egy asztal INFO (SREATE TABLE info (num, last_name, first_name, sndoc, sdoc, numdoc))
A lényege a következő. Az adatok sndoc mindenféle SSnnnnnnn, ahol S - a tetszőleges számú és N - bármely szám, és a területen sdoc, numdoc - üres.
Szükséges, hogy végre egy UPDATE amelynek sndoc a sdoc, numdoc rendre be szimbólumokat és számokat. SUBSTR (sndoc, 1, 2) - ez select'om kapnak szimbólumok és SUBSTR (sndoc, 3, 9) kapnak számjegy. Hogyan kell elvégezni UPDATE c SELECT'ami ezek?

Mondd, kérlek, hogyan lehetséges, hogy korlátozásokat a pályán a táblázatban t, ha nem kell frissíteni minden területen, és például, ahol t.adress_client kezdődik A?

Csak azt kell megadni a feltétel «ahol», azaz Nem lenne valami ilyesmi «, ahol t.adress_client mint»A%«.” Ha van valami nem világos, írj, mi kell érteni 🙂