Wszystko
Najnowsze
Archiwum
- 2
- 0
Cześć mireczki, mam sprawę. Otóż mamy sobie taki kod:
WITH gg AS(
SELECT
powerplanttypeid, description, id,
WITH gg AS(
SELECT
powerplanttypeid, description, id,
źródło: comment_1585337320k31rfT1xQxcq5Gf0PGOEed.jpg
Pobierz@Awerege: problem polega na tym, że idziesz w pętli i nie masz od razu wszystkich ID dla danej wartości powerplanttypeid. Musisz podzielić proces na etap generowania danych i wyliczania NRP (np. zbierz rekordy do jakiejś kolekcji). Alternatywnym rozwiązaniem (ale gorszym wydajnościowo) byłoby robienie selecta dla każdego wygenerowanego rekordu. Jak już masz powerplanttypeid, to pytasz bazy o wszystkie pozostałe ID z tym samym powerplanttypeid i masz swój NRP.
- 1
@ManfredMacx: Dziękuję bardzo za sugestię, poradziłem sobie z wykorzystaniem cursora w PL/SQL w którym magazynuje wyniki selecta i potem te wyniki fetchuje do odpowiedniej kolumny w końcowej tabeli.
Jak oznaczacie zmienne, tak żeby się wyróżniały?
Są jakieś niepisane zasady jak powinno się je oznaczać?
Nie podoba mi się np jak mam
Są jakieś niepisane zasady jak powinno się je oznaczać?
Nie podoba mi się np jak mam
procedure xyz (zmien varchar2) is
@Kilgharrah:
W Oracle'u najczęściej używałem konwencji:
Generalnie takie kwestie powinny regulować standardy kodowania w firmie/projekcie. Popytaj starszych stażem.
W Oracle'u najczęściej używałem konwencji:
v_variable_name - dla zmiennych
p_parameter_name - dla parametrów funkcji/procedurGeneralnie takie kwestie powinny regulować standardy kodowania w firmie/projekcie. Popytaj starszych stażem.
20
Programowanie PL/SQL a paradoks Monty Halla

Pamiętacie teleturniej "Idź na całość", który prowadził Zygmunt Hajzer? :) Z tęsknoty za telewizją lat 90, w ramach pierwszego odcinka kursu programowania PL/SQL stworzyłem mechanizm symulujący grę w zonka, ponieważ związana jest z nią ciekawa zagadka z rachunku...
z- 1
- #
- #
- #
- #
- #
- #
- 3
jutro ma egzamin na certyfikat #oracle #plsql i w sumie niby człowiek wie co i jak bo codziennie w tym dłubie, ale zawsze jakiś tam stresik jest :D
trzymajcie kciuki :p
w sumie to #naukaprogramowania
trzymajcie kciuki :p
w sumie to #naukaprogramowania
konto usunięte via Wykop Mobilny (Android)
- 0
Gdy musicie wyciągnąć z tabeli jeden rekord o największej wartości jakiejś kolumny z datą lub liczbą to jak to robicie żeby było najbardziej optymalnie?
Np. jest tabela która zawiera id (number), jakąś datę i inne dane.
Jak najlepiej wyciągnąć tylko pierwszy rekord zwracany przez zapytanie
Select * order by jakas_data desc, id desc ?
Zależy
Np. jest tabela która zawiera id (number), jakąś datę i inne dane.
Jak najlepiej wyciągnąć tylko pierwszy rekord zwracany przez zapytanie
Select * order by jakas_data desc, id desc ?
Zależy
- 1
@xantiros: sortowanie wykonuje się po filtrowaniu where, więc takie rownum zwróci jakieś losowe rekordy, a nie największe.
Można zrobić podzapytanie i w nim order oraz hint FIRST_ROW, a rownum użyć w zapytaniu nadrzędnym i tak mam w tej chwili zrobione ale czy nie ma czegoś szybszego?
Szukam doświadczonej osoby, która coś podpowie. Jak nie wiecie to nie piszcie bo głupoty piszecie.
Można zrobić podzapytanie i w nim order oraz hint FIRST_ROW, a rownum użyć w zapytaniu nadrzędnym i tak mam w tej chwili zrobione ale czy nie ma czegoś szybszego?
Szukam doświadczonej osoby, która coś podpowie. Jak nie wiecie to nie piszcie bo głupoty piszecie.
- 1
@xantiros: Przecież pierwsza możliwość z max() zwróci Ci to samo, rownum będzie tylko dodatkowym kosztem.
Też bym poszedł w MAX() nie robiąc sortowania.
@TomaszWKS: utaj jest kilka ciekawych pomysłów, ale jak to się mówi...
'the answer is always -- BENCHMARK IT....'
https://stackoverflow.com/questions/2854257/sql-how-to-select-a-row-having-a-column-with-max-value
Też bym poszedł w MAX() nie robiąc sortowania.
@TomaszWKS: utaj jest kilka ciekawych pomysłów, ale jak to się mówi...
'the answer is always -- BENCHMARK IT....'
https://stackoverflow.com/questions/2854257/sql-how-to-select-a-row-having-a-column-with-max-value
#sql #oracle #plsql
Wyżej w zapytaniu nad LR i LB wybieram zapytaniem wygenerowane pesele. Wszystko elegancko w kursorze. Generalnie chcę pokazać ile jest błędnych (LB - błędny format, zła suma kontrolna) i wszystkich (LR - na dole) peseli. Wszystko się odpala, ładnie liczy dla 100, 1000, 10000 rekordów, ale jak puszczę to na całej bazie to wywala mi błąd po jakimś czasie:
ORA-06502 PL/SQL: błąd liczby lub
Wyżej w zapytaniu nad LR i LB wybieram zapytaniem wygenerowane pesele. Wszystko elegancko w kursorze. Generalnie chcę pokazać ile jest błędnych (LB - błędny format, zła suma kontrolna) i wszystkich (LR - na dole) peseli. Wszystko się odpala, ładnie liczy dla 100, 1000, 10000 rekordów, ale jak puszczę to na całej bazie to wywala mi błąd po jakimś czasie:
ORA-06502 PL/SQL: błąd liczby lub
źródło: comment_zLczeqbOrXseF2CIVQgkGHUUKvSuB0xD.jpg
Pobierz@kurazjajami: wywal GOTO i skorzystaj z CONTINUE
@kurazjajami: ogólnie goto jest złe i się go nie używa. Zapomnij o nim. Nie tylko w PL/SQL.
- 0
@Supaplex: czyli mój błąd. Dzięki
Cześć.
Szukam tutoriala do pl/sql, aby ogarnąć funkcje, procedury, pakiety procedur, hinty, wyjątki, kursory.
Ktoś z was coś zna?
Jeszcze jakiś poradnik lub tipy do pl/sql developer, aby ogarnąć jego wszytkie funkcje itp.
Szukam tutoriala do pl/sql, aby ogarnąć funkcje, procedury, pakiety procedur, hinty, wyjątki, kursory.
Ktoś z was coś zna?
Jeszcze jakiś poradnik lub tipy do pl/sql developer, aby ogarnąć jego wszytkie funkcje itp.
Oracle 12.1c
1. Czy dodanie warunku WHERE ROWNUM <= 1 powoduje wykonanie zapytania w całości (tak jakby warunku nie było) ale finalnie zwraca tylko jeden rekord czy może zapytanie wykonuje się szybciej bo kończy po odnalezieniu pierwszego wyniku?
2. Czy podzapytanie wewnątrz WHERE EXISTS() wykonuje się w całości zanim funkcja zwróci TRUE (zakładamy że coś by znalazło) czy może odnajduje pierwszy lepszy rekord, kończy wykonywanie podzapytania i zwraca TRUE?
#oracle
1. Czy dodanie warunku WHERE ROWNUM <= 1 powoduje wykonanie zapytania w całości (tak jakby warunku nie było) ale finalnie zwraca tylko jeden rekord czy może zapytanie wykonuje się szybciej bo kończy po odnalezieniu pierwszego wyniku?
2. Czy podzapytanie wewnątrz WHERE EXISTS() wykonuje się w całości zanim funkcja zwróci TRUE (zakładamy że coś by znalazło) czy może odnajduje pierwszy lepszy rekord, kończy wykonywanie podzapytania i zwraca TRUE?
#oracle
@AIRjordan @TomaszWKS Polecam zgłębić informacje o pseudokolumnie rownum https://blogs.oracle.com/oraclemagazine/on-rownum-and-limiting-results i czym jest koszt zapytania https://stackoverflow.com/questions/860450/understanding-the-results-of-execute-explain-plan-in-oracle-sql-developer
Nie jestem specem ale w Twoim przypadku (nie wiem jak wygląda całe zapytanie, które wykonujesz, jaka jest struktura tabel, indeksów, wolumen i rozmieszczenie danych) optymalizator kosztowy po prostu znalazł sobie plan do wykonania Twojego zapytania, który przy dodaniu warunku na rownum <= 1 ma mniej bloków do odczytu stąd koszt zapytania mniejszy. Nie widzę tu
Nie jestem specem ale w Twoim przypadku (nie wiem jak wygląda całe zapytanie, które wykonujesz, jaka jest struktura tabel, indeksów, wolumen i rozmieszczenie danych) optymalizator kosztowy po prostu znalazł sobie plan do wykonania Twojego zapytania, który przy dodaniu warunku na rownum <= 1 ma mniej bloków do odczytu stąd koszt zapytania mniejszy. Nie widzę tu
- 0
Treść przeznaczona dla osób powyżej 18 roku życia...
Mam taki problem. W dużym uproszczeniu Tabela A jest pewnym słownikiem zawierającym unikalne rekordy, jest ich powiedzmy 2-3 tysiące. Tabela B zawiera ~9 mln unikalnych rekordów, a tabela C, (a w zasadzie jest to parę powiązanych tabel) wiąże typy słownikowe z tabeli A z tabelą B i przechowuje wartości tych słowników dla rekordów z tabeli B. Każdy rekord z tabeli B może być powiązany z zero lub wieloma rekordami z tabeli A
- 0
@aaandrzeeey: C to jest kasztan bo jak napisałem jest to parę tabel, tylko opisuję to jako jedną dla uproszczenia a w rzeczywistości (tak z pamięci) to B jeden do wielu D, później każdy D jeden do wielu E, później każdy E jeden do wielu F, gdzie D+E+F składa się na moje C ( ͡° ͜ʖ ͡°)
I F zawiera pewnie z kilkadziesiąt milionów rekordów uzbieranych przez
I F zawiera pewnie z kilkadziesiąt milionów rekordów uzbieranych przez
- 0
Po drugie to chyba może lepiej było zacząć od B, a następnie pogrupować (bo masz wyciągnąć A)
@aaandrzeeey: Faktycznie okazało się to najlepszym rozwiązaniem.
- 2
#bazydanych #sql #programowanie jaka jest prosta i dobra baza in-memory #opensource jakby miała #plsql (mam przygotować dedykowany mini system MRP z wariantami, bardzo specyficzny :)
@kaczor: sprawdź MariaDB ale nie pamiętam czy jest in-memory
- 2
@kaczor: https://github.com/SeYoungLee/oredis klient redisa. Jak chcesz pełny PL/SQL to może postgres z ramdiskiem?
Od wersji Oracle DB 12c w SQL w konstrukcji WITH deklarować można funkcje do wykorzystania we właściwym zapytaniu.
I teraz tak. Mam zadeklarowaną taką funkcję. Bardzo prostą. Przyjmuje argument VARCHAR2, który umownie jest datą w formacie YYYY-MM-DD a sam kod to 1 (słownie jedna) linia:
Nie ma żadnych dwukropków.
Właściwe
I teraz tak. Mam zadeklarowaną taką funkcję. Bardzo prostą. Przyjmuje argument VARCHAR2, który umownie jest datą w formacie YYYY-MM-DD a sam kod to 1 (słownie jedna) linia:
RETURN TRUNC(TO_DATE(p_data, 'YYYY-MM-DD'), 'MM');Nie ma żadnych dwukropków.
Właściwe
mireczki, jak uzyskać taki efekt za pomocą jednego zapytania?
+-----------+---------+
|ilość |kategoria|
|przedmiotów| |
+-----------+---------+
+-----------+---------+
|ilość |kategoria|
|przedmiotów| |
+-----------+---------+
@simply_pretentious: CASE WHEN
- 1
@DarkAlchemy: no tak, dziękuję :D
konto usunięte via Android
- 1
- 2
@programistalvlhard: @lento01:
No więc tak, dodanie funkcji w środku specyfikacji rozkompilowało jakieś 530 innych pakietów. Po skompilowaniu wszystkiego, funkcję zakomentowałem, przekompilowałem i znów 530 pakietów się rozkompilowało. Znowu skompilowałem wszystko, funkcję odkomentowałem ale przeniosłem ją na koniec specyfikacji (na sam dół, jako ostatnią zadeklarowaną), skompilowałem. Tym razem mniej się rozkompilowało bo jakieś 330. Ktoś mi kiedyś wspominał żeby funkcje do specyfikacji dodawać na końcu i chyba miał rację.
No więc tak, dodanie funkcji w środku specyfikacji rozkompilowało jakieś 530 innych pakietów. Po skompilowaniu wszystkiego, funkcję zakomentowałem, przekompilowałem i znów 530 pakietów się rozkompilowało. Znowu skompilowałem wszystko, funkcję odkomentowałem ale przeniosłem ją na koniec specyfikacji (na sam dół, jako ostatnią zadeklarowaną), skompilowałem. Tym razem mniej się rozkompilowało bo jakieś 330. Ktoś mi kiedyś wspominał żeby funkcje do specyfikacji dodawać na końcu i chyba miał rację.
@TomaszWKS: Thanks, dobrze wiedziec :D
- 13
Jakby ktoś był zainteresowany to szukam następujących osób do pracy (Jak szukasz pracy w #it a nie łapiesz się do tych stanowisk to daj znać, coś wymyślimy!):
Programista Java – Trójmiasto + Wawa
Programista .net – Wawa
Programista COBOL – Wawa
Programista PL/SQL - Trójmiasto + Wawa
Programista Java – Trójmiasto + Wawa
Programista .net – Wawa
Programista COBOL – Wawa
Programista PL/SQL - Trójmiasto + Wawa
Cześć.
Mam tydzień żeby jako tako ogarnąć podstawy baz danych. Chodzi głównie o kwerendy SQL (to już w miare znam), ale też żeby mniej więcej wiedzieć o co chodzi i trochę poznać PL/SQL i zwłaszcza administracje baz danych.
Wiem, że temat na kilka książek, ale możecie podrzucić jakieś ciekawe i przystępne materiały. Tak jak pisałem, chodzi raczej o zapoznanie się z tematem, a nie pisanie ogromnych i skomplikowanych skryptów.
#bazydanych
Mam tydzień żeby jako tako ogarnąć podstawy baz danych. Chodzi głównie o kwerendy SQL (to już w miare znam), ale też żeby mniej więcej wiedzieć o co chodzi i trochę poznać PL/SQL i zwłaszcza administracje baz danych.
Wiem, że temat na kilka książek, ale możecie podrzucić jakieś ciekawe i przystępne materiały. Tak jak pisałem, chodzi raczej o zapoznanie się z tematem, a nie pisanie ogromnych i skomplikowanych skryptów.
#bazydanych
konto usunięte via iOS
- 1
@max1983: wpisz w Google blog Jakuba Otrząska bardzo przystępnie pisze o podstawach
@max1983: http://andrzejklusiewicz.blogspot.com może stąd?
Mirki,
Tabela 1
Kolumny: Data | Miejsce | Wyjście osoby
Tabela 2
Kolumny: Data | Miejsce | Wejście osoby
Jak
Tabela 1
Kolumny: Data | Miejsce | Wyjście osoby
Tabela 2
Kolumny: Data | Miejsce | Wejście osoby
Jak
- 1
@jackieboy: Tylko uważaj by nie mieć dwóch dat dla jednego miejsca bo ci źle wyjdzie.
- 1
@jackieboy: INNER JOIN to iloczyn kartezjański, jeśli dla danego dnia i miejsa masz 2 razy wejścia i 2 razy wyjścia to rezultatem jest 4 a nie 2. Na dodatek Count() liczy wiersze więc jeśli masz 1 do 1 to nie potrzebujesz żadnego agregatu, jeśli sumę wejść/wyjść to raczej Sum() a nie Count(). Może podaj przykładowe dane?
























Muszę to przyznać - jestem słabym programistą.
Mam 2,5 roczne doświadczenie w branży i do tej pory uważam się za słabego programistę. O ile proste rzeczy nie sprawiają mi problemów, to nie potrafię samodzielnie rozwiązywać bardziej zaawansowanych ticketów. Taki stan rzeczy bardzo mnie dobija. Od dłuższego czasu mam przez to doła. Oczywiście staram się rozwijać swoje umiejętności ale mam wrażenie, że niczego nowego się nie nauczyłem.
Czy ktoś z Was
@Harmonia: Na szczęście te predyspozycje nie są takie duże, jak to się propaguje w branży. Programista to nie jest lekarz, programista to taki blue collar worker przy komputerze. Krąży głupi mit, że musisz być geniuszem-pasjonatą, by osiągnąć sukces jako programista.
@AnonimoweMirkoWyznania: Tak, byłem. Potrzebowałem jeszcze 6-7 lat doświadczenia żeby zobaczyć, że nie jestem słabym programistą tylko mam wybujałe oczekiwania pod swoim adresem i chcę doświadczenia tu i teraz.
Generalnie prawda jest taka, że większość z nas to przeciętniacy. Jeśli ktoś uważa że jest nieprzeciętniakiem, albo ma samodzielne