elvileg lelehetett tölteni oracle db-t + sqldeveloper-t és írhattattad a dolgokat. tesztelhetted. Fejlesztőnek nem kell érte fizetnie, csak megfelelően regisztrálni. A cégek is csak a produkciós adatbázisokért fizetnek. De azért keményen.
Persze, dinamikus sql-lel gyárthatsz hozzá scriptet.
Pl. egy adott séma indexeire vagy azon belül bizonyos betűvel kezdődő indexekre:
spool indexkukazo_script.sql
select 'drop index '||owner||'.'||index_name||';' from dba_indexes where owner='BELA' and index_name like 'DEMO_%';
spool off
A fejléc meg visszacsatolási sorokat utólag törölheted a scriptből, vagy előre beállítod setekkel, hogy ne is legyen. Aztán meg futtat indexkukazo_script.sql
dblink-nél jött szembe egy probléma, amit nemnagyon látok megoldhatónak (illetve nagyobbacska beavatkozást igényel, ami bármilyen következménnyel is járhat, bár ez persze mindenre igaz, kezdve a számítógép bekapcsolásával).
Mondjuk én a LOCAL.LOC-NET adatbázisban vagyok, és DBLINK-et nyitok REMOTE.REMDOMAIN adatbázisra. Namostan tegyük fel, hogy a DBLINK neve rögzített (mert bele van heggesztve különféle nézetekbe/programokba), és abban a névben nincs .pont. Hanem mondjuk SZEMELYZETI_DBLINK. Tehát ilyesmit ténykedek:
create database link SZEMELYZETI_DBLINK connect to HR identified by HR using 'TNSNAMES-ENTRY';
Most jön az első jó hír: a DBLINK igazi neve SZEMELYZETI_DBLINK.LOC-NET lesz. Sebaj, azért egy-s-más működik (pl. SELECT COUNT(*) FROM DUAL@SZEMELYZETI_DBLINK)
Próbálunk valami bonyolultabbat, és jön a második jó hír: az Ora ránk pirít, hogy aljas módon beraktunk egy érvénytelen -hyphen jelet a névbe, és ez bizony szintaktikus hiba.
Google barátunk sok okos tanácshoz elvezet, a legtöbben azt mondják, hogy a távoli gép domain nevének van jelentősége. Hát nincs: valamilyen lelki okból a lokális domain-nevet csapja dblink nevéhez; kivéve, ha a névben eleve van egy vagy több .pont karakter.
További zsákutca: dblink-hez nem lehet szinonímát csinálni, csak a dblink-et át elért objektumhoz. (Tehát ha kétszáz kell, akkor nyilván kétszáz szinonímát csinálok, nem? Hát nem.)
Tehát csak két lehetőséget vélek látni:
1. nevezzük a dblink-et SZEMELYZETI.DBLINK-re
2. nevezzük át az adatbázist LOCAL.LOCNET-re
Ha egyik sem megy, akkor gondolkodóba esünk.
PS: ja és van egy global_names nevű session-paraméter, ami jobb, ha false, különben csak REMOTE.REMDOMAIN@VALAMI nevű dblink-et szeret a derék Ora a REMOTE.REMDOMAIN adatbázishoz. (Ez nagyon megkönnyítené a különféle migrációkat, élesítéseket, szolgáltatás-áthelyezéseket, az már biztos. (gyk: ez irónia volt))
Off: Most rock journalism is people who cannot write interviewing people who cannot talk for people who cannot read. (Frank Zappa)
Na ilyen az ámítástechnika is: a szervező nem tud szervezni, a programozó nem tud programozni, és persze ennek az eredményét a felhasználó sem tudja felhasználni.
pl mindehhez elég ha van egy-két 'gazdag' fantáziával megáldott adatelemző/manager az ember munkahelyén, akik biztosítják, hogy részed legyen a változatos esetekben.
Igen, jogos a kérdés (csodálkoztam is hogy nincs erre rákérdezés) az eredeti feladatban id-t is updatelni kellett (a kulcsolás egy másik id-val történt) ezt rosszul adatam példába, elnézést.
a group by azért kell, hogy id-nként csak egy sorunk legyen. az azonos id-k egy group. a max(adat) a groupon belül a legnagyobb adatot adja vissza. a max(id) felesleges, hiszen a groupban csak egyféle id van. a distinct is felesleges, a group by miatt minden sorban más lesz az id.