Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z zapytaniem
Forum PHP.pl > Forum > Bazy danych > Oracle
Czarnulson
Mam problem. Jestem poczatkujacy i stawiam pierwsze kroki w Oracle . Mam "podac oddzial, ktory sprzedal najwiecej uslug i dzieki ktoremu pracownikowi".

Mam nastepujace tabele:

Kod
___________
PRACOWNIK
----------------
Id
Imie
Nazwisko
PESEL
Id_oddzial

________
ODDZIAL
-----------
Id
Nazwa

_______
USLUGA
----------
id
id_pracownik
id_klient
data_od
data_do


Probowalem to rozwiazac w nastepujacy sposob:

Kod
SET SERVEROUTPUT ON

DECLARE

ZR_ODDZIAL ODDZIAL%ROWTYPE;
ZR_PRACOWNIK PRACOWNIK%ROWTYPE;

BEGIN

SELECT * INTO ZR_ODDZIAL FROM ODDZIAL WHERE ID IN(SELECT MAX(COUNT(ID_ODDZIAL)) FROM USLUGA U, PRACOWNIK P, ODDZIAL O
          WHERE P.ID = U.ID_PRACOWNIK AND P.ID_ODDZIAL = O.ID
          GROUP BY U.ID);
          
SELECT * INTO ZR_PRACOWNIK FROM PRACOWNIK WHERE ID LIKE(SELECT MAX(COUNT(ID)) FROM PRACOWNIK
          WHERE ID_ODDZIAL LIKE( ZR_ODDZIAL.ID)
          GROUP BY ID_ODDZIAL);
        
          
          dbms_output.put_line('ODDZIAL: ' || ZR_ODDZIAL.NAZWA);
          dbms_output.put_line('PRACOWNIK: ' || ZR_PRACOWNIK.NAZWISKO);
END;


Jednak kod ten nie dziala zbyt dobrze sad.gif

Bylbym wdzieczny za kazda pomoc
KILIUSZKIN
Spróbuj tak to zrobić. Nie sprawdzałem tego, ale powinno działać (po niewielkich przeróbkach):
  1. cursor znajdz_oddzial IS
  2. SELECT id, max(cnt) FROM ( SELECT o.id, count(u.id) cnt
  3. FROM oddzial o, pracownik p, uslugi u
  4. WHERE p.id_oddzial = o.id AND u.id_pracownik = p.id
  5. GROUP BY o.id );
  6.  
  7. cursor znajdz_prac(o_id) IS
  8. SELECT id, max(cnt) FROM ( SELECT p.id,count(u.id) cnt
  9. FROM oddzial o, pracownik p, uslugi u
  10. WHERE o.id=o_id AND p.id_oddzial=o.id AND u.id_pracownik = p.id
  11. GROUP BY p.id);
  12. --------------------------------
  13. o_id ODDZIAL.ID%TYPE;
  14. o_name ODDZIAL.NAZWA%TYPE;
  15. p_id PRACOWNIK.ID%TYPE;
  16. p_fname PRACOWNIK.IMIE%TYPE;
  17. p_name PRACOWNIK.NAZWISKO%TYPE;
  18. -----------------------------
  19. begin ------------------------------
  20. FOR znajdz_oddzial loop
  21. --------------------------
  22. begin ----------------------------
  23. o_id=znajdz_oddzial.id;
  24.  
  25. SELECT nazwa INTO o_name FROM oddzial WHERE id=o_id;
  26. dbms_output.put_line('ODDZIAL: ' || o_name);
  27.  
  28. FOR znajdz_prac(o_id) loop
  29. begin -----------------------------
  30. p_id=znajdz_prac.id;
  31. SELECT nazwisko, imie INTO p_name, p_fname FROM pracownik WHERE id=p_id;
  32. dbms_output.put_line('PRACOWNIK: ' || p_fname || ' ' || p_name);
  33. EXCEPTION WHEN OTHERS THEN
  34. RETURN 1; //obsługa błędów
  35. end;
  36. ---------------------
  37. end loop;
  38. EXCEPTION WHEN OTHERS THEN
  39. RETURN 1; //obsługa błędów
  40. end;
  41. -------------------
  42. end loop;
  43.  
  44. end;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.