Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PL/SQL - trudne początki
PHP_Addicted
post 16.11.2012, 18:06:08
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 2
Dołączył: 14.12.2011

Ostrzeżenie: (0%)
-----


Witam,

Miałbym prośbę o nakierowanie (ale nie gotowe rozwiązanie, bo tak się nie da nauczyć smile.gif ) jak rowzwiązać następujące problemy w PL/SQL.

Problem pierwszy:

mamy pewną tabelę, dajmy na to "piłka" o następujących kolumnach:
  1. (
  2. numer_pilki number(3) PRIMARY KEY,
  3. rozmiar_piłki VARCHAR(10) CHECK(rozmiar_piłki = "mala" OR rozmiar_piłki="duza"),
  4. numer_pojemnika NUMBER(2)
  5. );


I zasada wygląda następująco, że numer pilki jest przydzielany przy wkładaniu jej do pojemnika. Tu sobie poradziłem triggerem i sekwencją. Natomiast problem mam z drugim wymaganiem. Mamy n pojemników i wkładamy piłki do kolejnych pojemników. Przy czym każdy pojemnik może pomieścić 1 piłkę dużą i 2 małe. Gdy w danym pudełku (np. n) dajmy na to jest juz duża piłka to jest ona wkładana automatycznie do następnego pojemnika (n+1). Zastanawiam się, czy to jakąś pętlą rozwiązać? Nie rozumiem działania pętli w PL/SQL...

Problem drugi:

mamy tabelę z samo złączeniem np.
  1. ludzie
  2. (
  3. imie VARCHAR(20) PRMIMARY KEY,
  4. imie_matki VARCHAR(20) REFERENCES ludzie,
  5. imie_ojca VARCHAR(20) REFERENCES ludzie,
  6. zarobki NUMBER(6)
  7. )


I teraz potrzebuję policzyć sumę zarobków danej osoby wraz z jej dziećmi i wnukami. Udało mi się rozwiązać to dla osoby + jej dzieci. Natomiast nie wiem jak pobrac informacje o wnukach? Czy trzeba użyć tablic? Tabeli tymczasowej?


Będę bardzo wdzięczny za okazaną pomoc.

Ten post edytował PHP_Addicted 16.11.2012, 18:06:38
Go to the top of the page
+Quote Post
Method
post 19.11.2012, 13:53:04
Post #2





Grupa: Zarejestrowani
Postów: 177
Pomógł: 6
Dołączył: 14.01.2003
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Hej,

Problem 1.

Skoro dla zadanego pojemnika znamy ograniczenia Jedna piłka duza + Dwie małe to możesz je przeciez policzyć
Select count() dla duzej piłki z danego pojemnika + select count() dla malych pilek z tego samego pojemnika. Oczywiście można to zrobić bardziej lub mniej ładnie, skupmy sie jednak na problemie a nie na optymalizacji.

I teraz nie zostaje nam nic innego niz wkladanie piłek do pojemnika.
Skoro wiemy ile jest duzych piłek w pojemniku i wiemy ile jest malych parę IF'ów wystarczy do sterowania gdzie wkladamy nowa pilke (dużą lub mała).

Problem 2
Można użyć rekurencji, pętli, tablic tymczasowych rozwiązań jest mnóstwo.
  1. [/xml][xml]


--------------------
"zycia nie mierzy sie liczba oddechow,
ale liczba chwil, ktore zapieraja dech w piersi"
Go to the top of the page
+Quote Post
wiiir
post 6.12.2012, 20:06:47
Post #3





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


Problem 1 - ale bardzo rozumiem ale moze uzyj skladni MERGE
Problem 2 - uzyj connect by prior
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 06:46