Új hozzászólás Aktív témák
-
updog
senior tag
válasz Petya25 #2943 üzenetére
Window (analytic) function-ök? (LAG pl.) Milyen SQL?
Pl. Oracle SQL-ben ennyi, innentől úgy hasonlítod az értékeket ahogy akarod
select id, val, lag(val, 1) over(order by id) as prev_val from t_tabla;
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
Sziasztok,
SQL Serverről DBlinken Oracle-be áthozott adatok (nem, nincs más út ) integritását kellene ellenőriznem, Oracle oldalon találtam az alábbit, jónak tűnik, MSSQL alá tudtok hasonló function-t? Köszi!
"The DBMS_SQLHASH.GETHASH function applies one of the supported cryptographic hash algorithms to the result set of the SQL statement."
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
Igen, köszi, őrá én is ráakadtam, épp várom hogy a kolléga tesztelje a túloldalt (ebbe se menjünk bele, hogy miért így van )
De az MSDN-n amit találtam doksit, aszerint nem biztos hogy ez kell nekem. Az Oracle SELECT-et eszik, és a teljes resultset hash-ét dobja vissza, ez nem úgy tűnik. Persze még azt is tesztelem, hogy pl. mi van a LOB oszlopokkal, null-okkal, ilyesmi.
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
"Valójában nem értem, hogy niért lenne rá szükség" A válasz (nem) meglepő: mert azt mondták
Komolyra fordítva: a projekt megköveteli, hogy igazoljuk, hogy az átvitel során az adatok nem változnak. Mivel van közte pár finomság (spéci MS típusok alfanumerikus és LOB szinten is), amik nincsenek konkrétan Oracleben, implicit konverzió is történik, ahol ha jól értem, nem garantált a konzisztencia (nyilván 99.99%-ban megoldja a driver, és random beleselectálva ezt is látjuk, de ha MS lennék, én se írnám le sehova hogy 100%.
+ugye példa nem bizonyít A biznisznek meg egy dokumentáció kell, ahol le van írva hogy 100%.
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
Sziasztok,
Félig SQL, félig logikai dilemmám lenne: minden hétköznap(!) este érkezik hozzánk a megrendeléseket tartalmazó adatfile, amit rámergelünk az előző adatokra.
Betöltés után kell generálnunk egy kimeneti fájlt. A trükk az, hogy amíg a megrendelés státusza nem végleges (legyen mondjuk 0), addig minden nap újra meg újra ki kell tennünk a fájlba, akkor is ha aznap nem módosult, de ha aznap váltott 0-ra, akkor aznap kell még exportálni, de utána többször nem.
Egy view-ból generáljuk az adatokat, és ha csak mód van rá, szeretném úgy megoldani, hogy a táblába ne kelljen hozzáadni az "elküldve" vagy hasonló oszlopot, csak a view módosításával viszont nem látom, hogy ezt a "utoljára még elküldöm de többször nem" feltételt hogy írjam meg, ha az utolsó státuszváltás után nem változik a rekord (tehát a feltételnek igaznak kell lennie aznap amikor érkezett, de utána már nem).
Példa:
MEGR MEGR_DATUM MOD_DATUM STATUSZ ADAT_ERKEZETT
---- ---------- --------- ------- -------------
1234 20170502 null 1 20170502Új megrendelés 2017.05.02-n, betöltés után kimentjük fájlba.
03-án nem módosul a rekord, de exportáljuk.
MEGR MEGR_DATUM MOD_DATUM STATUSZ ADAT_ERKEZETT
---- ---------- --------- ------- -------------
1234 20170502 170504 2 20170504Státusz módosult, nem végleges státusz, exportáljuk.
05-én nem módosul, de exportáljuk
MEGR MEGR_DATUM MOD_DATUM STATUSZ ADAT_ERKEZETT
---- ---------- --------- ------- -------------
1234 20170502 170506 0 20170508Státusz módosult (6-án!), amikor megérkezett a módosítás (május 8!) még kigeneráljuk, de 9-én és utána már nem.
(M)Nyilván eddig megvan:
SELECT * FROM MEGRENDEL WHERE STATUSZ <> 0
AND ... --itt még van 1-2 business feltétel
;Ami a triviális megoldás hogy felveszek egy ELKULDVE oszlopot, és küldés után updatelem 1-re, és hozzáadom a feltételt:
AND NVL(ELKULDVE,0)=0
De mivel a tábla tisztán business adatokat tartalmaz, nem nagyon tetszene senkinek, ha én ilyen technikai jellegű oszlopot felvennék. Sajnos sysdate-re alapuló feltétel se játszik mert a beérkező fájl jöhet éjfél előtt, után, vagy akár aznap ki is maradhat, akkor másnap kétnapi adat megy be.
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
Kicsit hülyén fogalmaztam meg, illetve egy dolgot kihagytam: nem működhet a dátumos dolog, mert az ADAT_ERKEZETT értéke mindig a business nap szerinti dátum, ezt program adja hozzá.
Tehát: ma este (is) akár éjfél előtt, akár éjfél után kaphatjuk a fájlt, 20170509-es értéket fogunk oda beírni. Sajnos ez is benne van a pakliban.
Szóval gyanús hogy legalább egy segédtábla lesz a vége, rendelési szám + elküldve mezőkkel, aztán belefonom a viewba... csak ugye ezt se szerettem volna.
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
Megoldás (#3387) Ispy nyomán (azért még nem 100%-os, mert mondjuk évente 2-3x kérik hogy valamelyik napi adatokat küldjük már újra, na akkor majd ez nem lesz jó ).
SELECT * FROM MEGRENDEL
WHERE (STATUSZ <> 0
OR STATUS = 0 AND ADAT_ERKEZETT = SELECT MAX(ADAT_ERKEZETT) FROM MEGRENDEL)
AND ... --itt még van 1-2 business feltétel"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
A válasz: attól függ Ha DATE típusú a meződ, és indexált, akkor nyilván ha egy DATE-tel hasonlítod össze (TO_DATE), akkor végigrohan az indexen és kidobja amit keresel.
Ellenben ha ezt a meződ TO_CHAR-ozod, nem fogja tudni használni az indexet. (pl.) Oracle-ben itt lehet csavarni egyet a dolgon function based indexszel, csinálhatsz olyan indexet, ami nem a mezőt, hanem a TO_CHAR(mező)-t indexeli, akkor ugyanolyan gyors lesz.
Amúgy ha nem lenne index a mezőn, kb. mindegy lenne performancia szempontból, praktikusan a TO_DATE(feltétel)-t szokták használni, ha a mező DATE.
(#3618) -Zeratul- jepp. Egyszer én is futottam egy hasonlóba (DATE mezőn volt index, és TO_CHAR-ozták, hogy egy string-gel összehasonlítsák... Mekkora volt az öröm mikor mutattam hogy 500%-os performancia javulás történt, miután átírtam
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
Sziasztok!
Oracleben csak SQL használatával van lehetőség bármilyen módon transzponálni fix oszlop- és sorszámú eredményhalmazt aggregálás nélkül? (tehát pivot/unpivot kilőve, legalábbis én nem tudtam megoldani vele, mert nincs kapaszkodó hozzá)
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
válasz soldi3r #3927 üzenetére
Az Oracle-nek teljesen jól használható dokumentációja van, ha nem ragaszkodsz a könyvekhez
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
válasz soldi3r #3949 üzenetére
Én azt hiszem nem kötelező, az ORACLE_HOSTNAME környezeti változóhoz állítja be a hosts és hostname tartalmát, de anélkül is működik ha csak saját magad használod (pl. IP alapján). Valaki javítson ki ha tévedek
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
válasz #74220800 #3952 üzenetére
A
like '[0-9]'
az pontosan a '[0-9]' stringgel hasonlítja össze az egy darab karaktered A funkció amit keresel, a REGEXP_LIKE.[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
válasz david199801 #4070 üzenetére
Létezik-e már Könyvek tábla, annak k_nev oszlopa, illetve Vevő tábla és/vagy r_nev oszlopa?
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
válasz david199801 #4078 üzenetére
Nézd meg, van-e valami ID a vevő táblában, és referálj arra (ha nincs, adj hozzá, trigger+sequence töltheti).
A screenshotból adódóan egy megjegyzés: a SYSTEM user alá nem nagyon illik semmit csinálni kézzel Készíts egy játszós usert (google: oracle create user) vagy használd a sample sémákat (hr, oe, ilyenek).
oracle.com tele van jobbnál jobb tutorialokkal (ha kifejezetten Oracle-t kell használni), nem nagyon lehet megúszni ha nem adják le szájbarágósan (nem szokták). Pl. [link]
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
válasz david199801 #4081 üzenetére
(#4079) doeeg második bekezdés. A SYSTEM user alá vagy bejelentkezve, ami nagyon nem jó. Nem azokat a táblákat kéne kitörölni ( tényleg szólj az oktatónak ha ő javasolta hogy ezzel lépjetek be), hanem saját user alatt kéne csinálni a játékot
De hogy segítsek is a konkrét kérdésnél: ha jobb gombbal kattintasz a Tables (filtered)-re, lesz egy Apply filter menüpont, klikk oda. Itt egyesével hozzá tudod adni, hogy milyen táblákat akarsz látni, praktikusan NAME = VEVŐ, NAME = KÖNYVEK stb. feltételeket állíts be (upper/lowercase-re lehet hogy figyelni kell (ha pl. egyikféleképp nem működik), az ékezet se túl szerencsés a táblanevekben), "Match any" beállítással. + gombbal tudsz hozzáadni. Így nem fog látszani, csak az a tábla, amit te akarsz.
De attól hogy nem látod, még ott lesznek, továbbra sem javasolt a SYSTEM alatt garázdálkodni
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
válasz user112 #4151 üzenetére
Nem tudsz ugyanazon a queryn belül aliasra hivatkozni. Rakd az egészed még egy selectbe.
--Eredeti:
select (1+2+3+4+5) as osszeg from dual;
--Invalid identifier-t ad:
select (1+2+3+4+5) as osszeg, osszeg+5 from dual;
--Megoldás:
select osszeg, osszeg+5 from(select (1+2+3+4+5) as osszeg from dual);Nyilván másik aliassal (mezővel) is így működik, nem csak konstansokkal:
select osszeg, osszeg+ertek from(select (1+2+3+4+5) as osszeg, 5 as ertek from dual);
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
Nekem már csak egy kérdésem lenne: Miért string a dátum?
Komolyra fordítva: integritás szempontjából sem utolsó, hogy nem lehetne beírni a dátum helyére hogy "kismacska"."Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
válasz Apollo17hu #4335 üzenetére
Egy Oracle XE kicsit overkill lehet pár táblás projektre, inkább mysql-t mondanék vagy sqlite-ot. De az Oracle-lel sincs baj ha nem egy krumpli a géped (régebbi laptopomat pl. kicsit megfektette ha service-ként futott automatikusan indítva).
Amire te gondolsz próbaverzió alatt, az szerintem az a PLSQL Developer, ami tényleg fizetős (ez ugye csak egy IDE), de ez független az adatbázistól, és az Oraclenek is van erre teljesen ingyenes megoldása (Oracle SQL Developer, ami egyébként több fajta DB-hez is csatlakozik nem csak Oracle-hez).
Amúgy az Oracle DB-ből akár az Enterprise-t is felrakhatod magadnak ingyen, korlátozás nélkül az összes feature-rel, ha csak otthon használod saját projektre Na de az tényleg overkill lenne
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
-
updog
senior tag
válasz Apollo17hu #4338 üzenetére
SYS vs SYSTEM - lényegében a saját user létrehozásán kívül ne nagyon használd ezeket Ha a minta sémákat (HR, OE ilyenek) felraktad, akkor azokkal csatlakozhatsz (lényegében séma = user), amúgy nem nagyon van más user (SYS-szel futtatva
SELECT * FROM ALL_USERS;
megmutatja).A PDADMIN gondolom valami hasonló a PDB-k kezelésére, de mivel 11g óta nem használtam Oracle-t erről nem tudok nyilatkozni és gyors google nem segített .
SQL Developeren szerencsére semmit nem kell beállítani egy darab connection hozzáadásán kívül, és igen, utána mókolhatsz
[ Szerkesztve ]
"Bocs, főnök, de én csak két emberben bízom. Az egyik én vagyok. Nem maga a másik." || "Hóhahó, mégis van graffaló!"
Új hozzászólás Aktív témák
- APPLE MacBook Air 2020 13" Retina - M1 / 8GB / 256 GB SSD / MAGYAR / 96% akku, 81 ciklus / Garancia
- LG NanoCell 55NANO766QA Halvány píxel csík
- Philips 58PUS8545/12 1 ÉV GARANCIA Játék üzemmód
- Tyű-ha! HP EliteBook 850 G7 Fémházas Szuper Strapabíró Laptop 15,6" -65% i7-10610U 32/512 FHD HUN
- Bomba ár! HP EliteBook 840 G5 - i5-8G I 8GB I 128GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!