Chciałby ktoś sobie dorobić i zrobić dla mnie kilka prostych (podobno) zadań z #oracle #plsql #sql ? Ja Oracle'a nie tykam, bo osobiście tym gardzę, więc chętnie komuś zlecę zrobienie :)
na PW podam szczegóły co konkretnie do zrobienia.
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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.
  • Odpowiedz
@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.
  • Odpowiedz
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

procedure xyz (zmien varchar2) is
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Kilgharrah:
W Oracle'u najczęściej używałem konwencji:

v_variable_name - dla zmiennych
p_parameter_name - dla parametrów funkcji/procedur

Generalnie takie kwestie powinny regulować standardy kodowania w firmie/projekcie. Popytaj starszych stażem.
  • Odpowiedz
@Qrystus: Dziękuję. Niekoniecznie. Są materiały do nauki w internecie, a sam zakres nie jest jakoś bardzo rozległy. Grunt to czytać uważnie zadania i odpowiedzi
  • Odpowiedz
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
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

konto usunięte via Wykop Mobilny (Android)
  • 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.
  • Odpowiedz
#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
kurazjajami - #sql #oracle #plsql


Wyżej w zapytaniu nad LR i LB wybieram zapytan...

źródło: comment_zLczeqbOrXseF2CIVQgkGHUUKvSuB0xD.jpg

Pobierz
  • 25
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

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.
  • 1
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

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
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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
  • Odpowiedz
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
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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
  • Odpowiedz
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:

RETURN TRUNC(TO_DATE(p_data, 'YYYY-MM-DD'), 'MM');
Nie ma żadnych dwukropków.

Właściwe
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@TomaszWKS: wygląda na jakiś internal error w tle, sprawdź wpisy w alert logu.
Może Toad ma jakieś ustawienia sesji które powodują problem, może spróbuj jeszcze:
alter session set query_rewrite_enabled = false;
  • Odpowiedz
Jak dodam do specyfikacji pakietu ABC nową funkcję, która przeciąża inną, już znajdującą się w specyfikacji to mogą rozkompilować się jakieś inne pakiety korzystające z ABC?

#oracle #plsql
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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ę.
  • Odpowiedz
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
  • 42
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Pytanie do osób u których w firmie korzysta się Toad for Oracle. Czy korzystacie z jakiegoś systemu kontroli wersji? Jeśli tak to z jakiego? Czy nie sprawia on problemów? Z jakiej wersji Toada korzystacie?

#oracle #toad #plsql #cvs
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

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
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Mirki,
Tabela 1
Kolumny: Data | Miejsce | Wyjście osoby
Tabela 2
Kolumny: Data | Miejsce | Wejście osoby

Jak
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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?
  • Odpowiedz