Keresés

Részletes keresés

edesviz Creative Commons License 2007.06.28 0 0 2388
Sziasztok,
persze, hogy kontextus függő, pl egy sub select-ben exist mögött még lehetne * is, de ha simán áll egy view-ban, akkor a view is megváltozik. Nekem már volt olyan feladatom, hogy saját rendszernél, már működött vagy 3 éve, több százezer, közelítőleg milliónyi vegyes forrássorból kellett kikereseni a "select *" kifejezéseket. Az ártóakat, és nem ártóakat. Illetve volt olyan is, amikor megnyugodva jelenthettük, mint fejlesztők, hogy egyetlen társunk se esett avészes rövidítés bűnébe.
Édesviz
Előzmény: NevemTeve (2387)
NevemTeve Creative Commons License 2007.06.28 0 0 2387
Kontextustól függ. Pro*C-ben ilyenkor ORA-nemtudommennyi-t kapok, ha viszont egy SYSREFCURSOR-om van, amit a PL/SQL-től kaptam, és abból nem olvasok ki minden mezőt a FETCH-ben, az nem okoz gondot.
Előzmény: crockl (2386)
crockl Creative Commons License 2007.06.28 0 0 2386
miert ne futna le a select * ? Az mar az alkalmazas kerdese, hogy mit kezd vele, hogy 1el tobb mezot is visszaad mint eddig.
Előzmény: edesviz (2384)
Pathmaster Creative Commons License 2007.06.28 0 0 2385
Ezek szerint a tábla szerkezetének a bővítése nem okoz hibát azokban hivatkozásokban, amelyek nem érintik az új mezőt. (A SELECT * pedig kerülendő.)

Köszi:)
Előzmény: NevemTeve (2383)
edesviz Creative Commons License 2007.06.28 0 0 2384

Szia,

lehet a mező defaultja null, tehát az összes insert, update delete, futni fog,

csak a select * nem.

Én inkább egy párhuazmos táblát készítenék, kulcs duplikációval, és uj mezővel, mezőkkel. a trigger készítéshez pedig create or replace trigger utesítást ajánlanám

egy a before row- delete, insert, update-ra.

Édesviz

 

Előzmény: NevemTeve (2383)
NevemTeve Creative Commons License 2007.06.28 0 0 2383
> Ha ennek a táblának a szerkezetét egy mezővel bővítjük, akkor elvileg az összes rá mutató hivatkozást is módosítani kell

Ez azért így, generikusan nem igaz, a következő esetekkel kell törődni:
1. SELECT *
2. INSERT, ha az új mező NOT NULL
3. Amikor az új mezőt adattal kell tölteni
Előzmény: Pathmaster (2382)
Pathmaster Creative Commons License 2007.06.28 0 0 2382
Default trigger

Adott egy olyan nagyméretű alkalmazás, amely gyakorlatilag csak részlegesen átlátható. Ez az alkalmazás egy olyan Oracle adatbázist használ, amelyben az egyik adattábláról nem lehet biztosan tudni azt, hogy az alkalmazás mely részeiről történik rá hivatkozás. Ez a hivatkozás lehet rekord beszúrás és módosítás is.

Ha ennek a táblának a szerkezetét egy mezővel bővítjük, akkor elvileg az összes rá mutató hivatkozást is módosítani kell; ami alól szerintem csak egy olyan trigger használata mentesíthet, amely az adattáblára hivatkozásokat figyeli, és szintaktikailag hibás hivatkozások paramétereit átadja egy szintaktikailag helyes hivatkozásnak és a hiányzó paramétereknek NULL értéket ad. Ez a trigger csak akkor adna vissza hibaüzenetet, ha egy olyan adat hiányzik, amelynek nem lehet NULL értéket adni.

Hogyan lehet ilyen triggert készíteni?
Előzmény: Pendragon (-)
Laca0 Creative Commons License 2007.06.27 0 0 2381
Köszi szépen a segítséget!
Az "INSERT INTO tábla1 SELECT * FROM tábla2" meghozta a várt eredményt. De nem tudom, hogy korábban miért nem ment, pedig próbálkoztam...
Mindenesetre már 16millió rekordnál elértem az Express változat korlátját, úgyhogy...
ennyit erről...
Előzmény: NevemTeve (2379)
Pugfan Creative Commons License 2007.06.27 0 0 2380
->.csv, majd sqlldr ?
Előzmény: Laca0 (2377)
NevemTeve Creative Commons License 2007.06.27 0 0 2379
Talán épp arra "gondol," hogy egy ilyen INSERT több sort is behozhat, ezért nem használható a RETURNING... csak akkor a szintaxisgráfot is úgy kellett volna megcsinálni, hogy ne sugalljon olyasmit, amit nem lehet...
Előzmény: NevemTeve (2372)
NevemTeve Creative Commons License 2007.06.27 0 0 2378
Eggyel lejjebb volt példa olyan INSERT-re, amelyik másik táblából SELECT-ált értékeket szúr be
Előzmény: Laca0 (2377)
Laca0 Creative Commons License 2007.06.27 0 0 2377
Nem lenne külön adatbázisban, csak nem tudtam, hogy kell-e ez az infó.
A create table as select működik, de nekem másra van szükségem. Nem jól fogalmaztam valószínűleg.
Fel szeretnék tölteni egy adatbázist 50millió rekorddal, és van már egy 2milliós táblám. Ezt a 2millió rekordot szeretném többször beemelni egy másik táblába. Foxproból egy a 2millió feltöltése is nagyon sok idő volt, az sql szerver sokkal gyorsabban megcsinálná.
Előzmény: NevemTeve (2376)
NevemTeve Creative Commons License 2007.06.27 0 0 2376
Ha nem Oracle Expressel próbálkoznál, akkor külön adatbázisban lennének?

Leghatékonyabb talán a CREATE TABLE AS SELECT
Előzmény: Laca0 (2375)
Laca0 Creative Commons License 2007.06.27 0 0 2375
Üdv!
Hogyan lehet 1 tábla tartalmát átemelni egy másikba? A copy valamiért nem akar összejönni. Egy adatbázisban vannak, mivel Oracle Express-el próbálkozom.
NevemTeve Creative Commons License 2007.06.27 0 0 2374
Csodák nincsenek, kell egy insert, meg egy select...
Előzmény: dorog.zultan (2373)
dorog.zultan Creative Commons License 2007.06.27 0 0 2373
Akkor hogy tudnám visszakapni az id-t?
ha insert ... values ... RETURNING ...
akkor működik.
ha insert ... select .... RETURNING ...
akkor nem!
Mit lehetne tenni?

Előzmény: NevemTeve (2372)
NevemTeve Creative Commons License 2007.06.27 0 0 2372
insert into auto_i2 (SOMETHING)
  select SOMETHING from AUTO_INCREMENT where id = 9
  RETURNING id INTO logID;


Kipróbáltam Pro*C-ben, az sem tudja...
Előzmény: dorog.zultan (2371)
dorog.zultan Creative Commons License 2007.06.27 0 0 2371
Sziasztok,

lenne egy kérdésem:
van egy táblám: auto_i2
ehhez szeretnék hozzáfűzni
egy rekordot a AUTO_INCREMENT táblából
úgy hogy a auto_i2 tábklában before insert trigger segítségével képződő
id-t visszakapjam a logID -be.
da sajnos a
ORA-00933: SQL command not properly ended
hibaüzenetet kapom.
az insert kipróbált, működik, ha kihagyom a "RETURNING id INTO logID" -t

insert into auto_i2
(
SOMETHING
)
select
SOMETHING
from AUTO_INCREMENT
where id = 9
RETURNING id INTO logID;
commit;
NevemTeve Creative Commons License 2007.06.27 0 0 2370
Végső esetben irány az Sql*Plus, azzal biztos látod...
Előzmény: Laca0 (2369)
Laca0 Creative Commons License 2007.06.26 0 0 2369
Megvan az a tábla, de csak akkor látom, hogy ha megfelelő userrel vagyok bejelentkezve. Sysként miért nem látom?
Előzmény: Laca0 (2368)
Laca0 Creative Commons License 2007.06.26 0 0 2368
Üdv Mindenkinek!
Oracle 10 Express-el kapcsolatban szeretnék segítséget kérni. Visual Foxpro 7-ből próbálgatom kezelni, de nem túl sok sikerrel.
Sikerült nagynehezen ODBC-n összehozni a kapcsolatot, de a saját driverével nem ment, csak egy utólag letöltött, újabb alverzióssal.
Létrehoztam egy táblát foxproból, amit onnan el is érek, de ha a webes felületén nézem az Oracle-t, ott nem találom a táblák között. Miért nem látom?
Segítségeteket előre is köszönöm!
stopposbácsi Creative Commons License 2007.06.14 0 0 2367
Igen, ráadásul gyakran szokott az lenni, hogy kérnek valamit, majd aztán valami máshoz is kell később a ugyanaz. Na ezért aztán nem is szoktam a helyel törődni, csak hogy letároljak minden olyat, ami esetleg máshoz is kellhet majd.

Ja és köszi a linket, mindjárt áttanulmányozom. :)
Előzmény: tnsnames.ora (2366)
tnsnames.ora Creative Commons License 2007.06.14 0 0 2366
Hát igen, korábban általában mindig az szokott lenni az első kérdésem, hogy OLTP vagy DW a rendszer... DW-nél valóban más a leányzó a fekvése, ahogy te is érzékeltetted... :o)
Előzmény: stopposbácsi (2365)
stopposbácsi Creative Commons License 2007.06.14 0 0 2365
Kicsit akkor elmagyarázom a környezetet. Logikai ugyan az adatbázis, de Adattárház szervezésű. Úgy néz ki a dolog, hogy este a képviselők szépen feltöltik az adataikat az adatbázisba, aztán mi jól áttöltjük az adattárázba. Eleve egy szörnyet kreáltunk sok redundanciával, úgyhogy mégegy tábla ide vagy oda nem számít. Az eljárás az áttöltés része lesz, szóval ha épp az borul meg azt egyrészt látjuk, plusz magától újraindul ha az oracle hibát ad. Viszont ezt a táblát jól össze tudom majd kötni más táblákkal és riportálgathatom az utolsó négy látogatás különböző eladásait, satöbbit nyugisan és gyorsan. Plusz abban is gondolkodnom kell, hogy a BO, amivel riportálunk, alapvetően egyszerű táblák egyszerű összekötéséből ért. Szóval igazából ez a segédtábla máshol is használva lesz, hely meg van. :)
Előzmény: tnsnames.ora (2364)
tnsnames.ora Creative Commons License 2007.06.13 0 0 2364
>Igazából ez csak egy segédtábla lesz, ami alapján megnézem, hogy a különböző látogatásokkor volt-e eladás, vagy készletszámolás.

Na és ez biztos jó ötlet? Önmagában logikai adatbázis-tervezés miatti force-olt redundancia, nem ördögtől való, de...
- Valami módon karban kell tartanod a segédtáblát is (tárolt eljárással), vélhetőleg elég gyakran. Ez is erőforrásigény ám.
- Ha befigyel a tárolt eljárás, akkor minek az inicializáló sql-en gyötörni magatokat (persze érdekes és szép a feladat l'art pour l'art is... ;) Azt fel sem tételezem, hogy a segédtábla kreáló sql-t mindig futtatni akarnátok, amint a bolt,datum páros valamelyike keletkezik/módosul/törlődik /igaz van amikor még akár ez is belefér/.
- _Annyira_ nem nagy nyereség érzésem szerint /mármint a kérdéses származtatott adatok ezen redundáns tárolása/, hogy megérjen egy külön segédtáblát, annak pontos adminisztrációjának nyügeivel.
Előzmény: stopposbácsi (2362)
tnsnames.ora Creative Commons License 2007.06.13 0 0 2363
>>...hogy a látogatások egy mezőben vesszővel elválasztva jelenjenek meg
>szerintem hagyja ez nem nekünk való. :))
Akkor hagyjuk? ;)
Pedig van rá elegáns megoldás, pl.: string aggregálás
http://www.oracle-base.com/articles/10g/StringAggregationTechniques.php
Előzmény: stopposbácsi (2362)
stopposbácsi Creative Commons License 2007.06.13 0 0 2362
Hali,

A bolt, dátum egyedi azonosító. Viszont télleg az összes bolt kellene. Igazából ez csak egy segédtábla lesz, ami alapján megnézem, hogy a különböző látogatásokkor volt-e eladás, vagy készletszámolás. Majd aztán jól eldöntöm, hogy hányszor volt disztribúciója az adott terméknek a boltban.

Viszont az egyik komám is kapott egy érdekeset ma. Megintcsak a látogatás táblából, úgy kellene egy adott időszakra levállogatnia a látogatásokat, hogy a látogatások egy mezőben vesszővel elválasztva jelenjenek meg. Én mondtam neki, hogy szerintem hagyja ez nem nekünk való. :)) Mink csak egyszerű alapfokú sql-esek vagyunk, ráadásul autodidakták. Az összes jó kis megoldásotokat, amiket eddig adtatok nekem néha fel sem fogtam. De boldogan fogadtam a vállonveregetéseket, amiket most virtuálisan felajánlom nektek.
Előzmény: tnsnames.ora (2361)
tnsnames.ora Creative Commons License 2007.06.13 0 0 2361
Hát nem tudom.... ;) Lehet, hogy reggel van még... ;)

Szerintem ha csak _egyetlen_ bolt utolsó négy látogatása kell (ahogy tisztességes OLTP-rendszerben valamelyest elvárható), akkor én szűrnék a boltra, csökkenően rendeznék a látogatásra, és venném az első négy rekordot. Valahogy így (nem teszteltem)

SELECT ROWNUM rn, kod, datum
FROM
(
SELECT kod,datum
FROM BOLT b
WHERE kod='szükésges bolt kódja'
ORDER BY datum DESC
)
WHERE rn<=4

Ami meggondolásra váró kérdések:
- Mi van, ha a (kod,datum) nem unique?
- Mi van, ha az _összes_ bolt utolsó négy látogatása kell, SQL-ben?
- Mi van, ha analitikus függvény nélkül kellene? ;) -> ez nem biztos, hogy ostoba felvetés; hiszen pl.: bankoknál az ügyfelek utolsó két tranzakciójának lekérdezése sokmilliós táblákon/equijoinokon, egyrészt bír feladat lenni, másrészt bír elgondolkodtató lenni.
stopposbácsi Creative Commons License 2007.06.12 0 0 2360
Ó, még válogathatok is, köszönöm. De eredményt nem vagyok hajlandó hírdetni. :)
Előzmény: eti. (2359)
eti. Creative Commons License 2007.06.12 0 0 2359
select *
from (
select boltkod, datum, statusz, row_number() over (partition by boltkod order by datum desc) sorszam
from latogatasok
)
where sorszam <= 4
order by boltkod, sorszam
/
Előzmény: stopposbácsi (2356)

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