Keresés

Részletes keresés

edesviz Creative Commons License 2016.08.16 0 0 5585

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.

Előzmény: F1DO (5583)
NevemTeve Creative Commons License 2016.08.16 0 0 5584

Google nevű eszköz dobott egy ilyet: http://www.tutorialspoint.com/oracle_terminal_online.php

 

F1DO Creative Commons License 2016.08.16 0 0 5583

Sziasztok,

 

Egy gyors kérdés hátha tudtok segíteni:

 

Tárolt eljárás 'írásának' gyakorlására van valamilyen 'otthoni' mód?

(pl letölthető, vagy on-line elérhető adatbázis, illetve felület / környezet? )

halaloszto Creative Commons License 2016.08.03 0 0 5582

nem tudom mit akarsz, de olvasd el a dbms_metadata.get_ddl doksiját. tudsz vele create index statementet gyártatni a meglevő indexekből.

 

miért kell eldobni és újrakreálni? valamit meg kell változtatni rajta? szinte mindent lehet alter index-el is.

 

Vajk

Előzmény: stopposbácsi (5580)
mikkkro Creative Commons License 2016.08.03 0 0 5581

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

Előzmény: stopposbácsi (5580)
stopposbácsi Creative Commons License 2016.08.03 0 0 5580

Lehetséges valahogy a dba_indexes táblából eldobni és megkreállni bizonyos indexeket? Hogy ne kelljen egyesével?

NevemTeve Creative Commons License 2016.07.21 0 0 5579

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

brioska Creative Commons License 2016.07.18 0 0 5578

elejéről lemaradt, hogy a felhasználó nem tudja mit is szeretne :)

Előzmény: NevemTeve (5577)
NevemTeve Creative Commons License 2016.07.18 0 0 5577

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.

F1DO Creative Commons License 2016.07.18 0 0 5576

Pontosan..

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.

 

 

 

Előzmény: brioska (5575)
brioska Creative Commons License 2016.07.17 0 0 5575

Az élet irdatlan nagy marhaságokat tud produkálni.

 

De talán nem leszek megint közel 4 hónapig topic gyilkos :)

Előzmény: tanárnéni kedvence (5574)
tanárnéni kedvence Creative Commons License 2016.07.15 0 0 5574

Ne zavard már össze a topicot ilyen közel életszerű SQL utasításokkal! ;)

Előzmény: brioska (5570)
F1DO Creative Commons License 2016.07.15 0 0 5573

... tehát egyik helyen egy update-elendő oszlop az id, a másikon meg kulcs oszlop ( egy másik id oszloppal...)

Előzmény: F1DO (5572)
F1DO Creative Commons License 2016.07.15 0 0 5572

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.

Előzmény: brioska (5567)
F1DO Creative Commons License 2016.07.15 0 0 5571

Köszi, egy kis kiegészítés - pontosítás:

 

.. WHEN MATCHED THEN UPDATE SET ...

Előzmény: halaloszto (5563)
brioska Creative Commons License 2016.07.15 0 0 5570

na, szóval így gondoltam :)

 

UPDATE B SET adat = (SELECT MAX(A.adat) FROM A WHERE A.id = B.id)
WHERE EXISTS (SELECT 0 FROM A WHERE A.id = B.id AND A.adat IS NOT NULL);

Előzmény: halaloszto (5569)
halaloszto Creative Commons License 2016.07.15 0 0 5569

én is az övére írtam :-)

Előzmény: brioska (5567)
brioska Creative Commons License 2016.07.15 0 0 5568

úgy értem group by nélkül :)

Előzmény: brioska (5567)
brioska Creative Commons License 2016.07.15 0 0 5567

De külső tábla egyébként is beszűri arra az id-re, azon belül a MAX(adat) elég önmagában.

(F1DO írására vonatkozott a kérdés, nem a tiedre)

 

Előzmény: halaloszto (5566)
halaloszto Creative Commons License 2016.07.15 0 0 5566

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.

 

Vajk

Előzmény: brioska (5565)
brioska Creative Commons License 2016.07.15 0 0 5565

köszi, ezt eddig nem ismertem

Előzmény: halaloszto (5563)
brioska Creative Commons License 2016.07.15 0 0 5564

miért kell bele a DISTINCT és a GROUP BY?

Előzmény: F1DO (5562)
halaloszto Creative Commons License 2016.07.14 0 2 5563

merge into B target using (select max(adat) adat, id from a where adat is not null group by id) source

on (target.id=source.id)

when matched then set target.adat=source.adat;

 

Előzmény: F1DO (5562)
F1DO Creative Commons License 2016.07.14 -1 0 5562

Így lefut (korrelációs update) 

 

update table B
set
( B.id,
B.adat
) = (SELECT DISTINCT
max(A.id),
max(A.adat)

FROM table A

WHERE A.id = B.id
AND A.adat is not null

GROUP BY A.id,
A.adat
)
WHERE (B.id) IN (SELECT A.id
FROM table A
WHERE A.adat is not null
);

 

Szolgáljon tanulságul, kedves egészségetekre! :-)

F1DO Creative Commons License 2016.07.14 -1 0 5561

Így nem fut le, a hiba ugyanaz:

 

update table B
set
( B.id,
B.adat
) = (SELECT DISTINCT
max(A.id),
max(A.adat)

FROM table A,
table B
WHERE A.id = B.id
AND A.adat is not null

GROUP BY A.id,
A.adat
);

brioska Creative Commons License 2016.07.14 0 0 5560

Ha jól értem (B) 1 - n (A)  és (A) -t UPDATE-eled, akkor nem szabadna ilyen hibát kapnod, mivel (B)-ben csak egyet találsz hozzá.

 

Egyébként ha tényleg többes kapcsolatból szeretnél, mert nincs egyértelmű kapcsolat, akkor próbáld pl MIN/MAX függvényt.

Előzmény: F1DO (5558)
NevemTeve Creative Commons License 2016.07.13 0 1 5559

Szerintem eke, traktor és konyhasó lenne most jó.

Előzmény: F1DO (5558)
F1DO Creative Commons License 2016.07.13 -1 0 5558

Sziasztok,

 

egy újabb kérdés (elakadás) amire hátha van jó meglátásotok...

 

UPDATE-elés, 'A' tábla id-ja = 'B' tábla id-jával.

Ugyanakkor 'A' táblában több rekord van ugyanazon id-ra mint 'B' táblára. 

 

'B' tábla adataival kellene 'A' tábla rekordjait updatelni, ahol A.id = B.id

Nem fut le az update: ORA-01427 - 'egysoros allekérdezés egynél több sorral tér vissza' hibával.

 

Mégis hogy lehetne 'megerőszakolni' a dolgot és beupdateltetni az 1:N kulcsolású táblánál az oszlopokat?

 

 

F1DO Creative Commons License 2016.07.06 0 0 5557

Köszönöm, igen, visszamenőleg visszaírva - updatelve a forrás adatokat sikerült, és jó is lett..

Előzmény: brioska (5556)
brioska Creative Commons License 2016.07.05 0 0 5556

Sikerült végül?

 

Ha nem, akkor tényleg jó lenne egy példa :)

 

 

 

Előzmény: F1DO (5554)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!