Problem z procedurami i pakietami PL/SQL

Problem z procedurami i pakietami PL/SQL
PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Witam,
Już od paru dni mam taki problem kiedy tworze np. taki sprypt:

Kopiuj
declare 
oszczedzone_z_oplat oplaty.cena%TYPE;
kto_oszczedzil_z_oplat oplaty.kto_placi%TYPE;

begin
select max(min(budzet-cena)) into oszczedzone_z_oplat from mieszkancy_domu
join oplaty on mieszkancy_domu.imie_mieszkanca=oplaty.kto_placi group by
imie_mieszkanca;
select imie_mieszkanca into kto_oszczedzil_z_oplat from mieszkancy_domu
join oplaty on mieszkancy_domu.imie_mieszkanca=oplaty.kto_placi having 
min(budzet-cena)=oszczedzone_z_oplat group by imie_mieszkanca;
dbms_output.put_line(kto_oszczedzil_z_oplat||' najwiecej oszczedzil z oplat');
end;
/
 

To wszystko działa. Jednak kiedy tylko próbuje zrobić z tego procedurę to od razu przestaje działać:

Kopiuj
 
Create Procedure Test IS
oszczedzone_z_oplat oplaty.cena%TYPE;
kto_oszczedzil_z_oplat oplaty.kto_placi%TYPE;
begin
select max(min(budzet-cena)) into oszczedzone_z_oplat from mieszkancy_domu
join oplaty on mieszkancy_domu.imie_mieszkanca=oplaty.kto_placi group by
imie_mieszkanca;
select imie_mieszkanca into kto_oszczedzil_z_oplat from mieszkancy_domu
join oplaty on mieszkancy_domu.imie_mieszkanca=oplaty.kto_placi having 
min(budzet-cena)=oszczedzone_z_oplat group by imie_mieszkanca;
dbms_output.put_line(kto_oszczedzil_z_oplat||' najwiecej oszczedzil z oplat');
end test;
/

Nie moge znalezc w internecie czemu to nie dziala.
Proszę bardzo o pomoc to samo sie dzieje kiedy próbuję dołączyć ten kod jako część pakietu. Mam tak z większością rzeczy, które napisze w PL/SQL

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

Nie znam się tak dobrze na Oraclu - parę lat już w nim nie pisałem... Ale:

  1. czemu oplaty.cena%TYPE, a nie zwykłe np. Decimal? cena%TYPE, też do konca nie jest prawdą, bo budzet może mieć większą dokładność. A usiłujesz tam wstawić...
  2. Max(Min(budzet-cena)) ?? czy to na pewno jest OK?
  3. Masz group by imie_mieszkanca, a oszczedzone_z_oplat masz tylko jedno. Jeśli jest group by, to może być więcej niż 1 rekord.
  4. drugie zapytanie... Najpierw Having, a potem group by? Coś kręcisz...
  5. JA mam takie zalłożenie, że z procedur nic "nie wypluwam".
  6. end test; Na pewno OK? po end jakiś dopisek? Procedura to Test, a nie test. Oracle domyślnie jest CI...

Ale jak mówiłem, nie znam się na Oraclu.

pozdrawiaMM

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0
  1. normalna praktyka - po prostu jest takiego samego typu jak dana kolumna w danej tabeli
  2. to rzeczywiście głupota
  3. o ile oracle przepuszcza to nie ma błedu
  4. kwestia gustu
  5. przy kończeniu procedury musi być end nazwa_procedury;, wielkość liter nie ma znaczenia

a ode mnie: CO TO k%#$%#^ ZNACZY, ŻE "przestaje działać"?????? To nie forum wróżbiarskie!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.