procedura w oracle i select

0

Witam

Istnieje taka perspektywa:

create or replace view view_statklientow
AS
select imie, nazwisko, nazwa, ilosc, data_sprzed, (cena*ilosc) as kwota, (select status from praca.statusy where (cena*ilosc) between wydatkimin and wydatkimax) as status 
from praca.towary t,praca.klienci k, praca.sprzedaz s
where s.idklienta=k.idklienta and  s.idtowaru=t.idtowaru;

Czy możliwe jest stworzenie procedury wyswietlającej wyniki zapytania SELECT

select imie, nazwisko, nazwa, ilosc, data_sprzed, kwota, status
from
view_statklientow
where 
data_sprzed>'data1'

W procedurze parametrem wejsciowym IN ma byc 'data1' wprowadzana przy wywolywaniu procedury

begin
  nazwa_procedure('2010-01-25');
end;
/ 

wynikiem dzialania procedury powinien byc wynik zapytania select.

czy istnieje mozliwosc stworzenia takiej procedury i jak to zrobic?

uzywam pl/sql developer

0

czy mogę liczyć na bardziej precyzyjną odpowiedź, odnoszącą się do tego konkretnego przypadku??

powyższy post interpretuje w ten sposób, że przez procedurę tego się nie da wykonać, że należało by wykorzystać funkcję.

troszke poszperałem w necie i poczytałem o funkcjach.

create or replace function showstats(data1 in date) 
return co tu wpisac is
Result abc co tu wpisac;
begin
  SELECT imie, nazwisko, nazwa, ilosc, data_sprzed, kwota, status 
   INTO abc
   FROM view_statklientow
   WHERE data_sprzed > data1; 
   RETURN(abc); 
 END;
  return(Result);
end showstats;

czy dobrze kombinuje?? czy 'abc' może przechpwywać wiersze? i czy może ich przechowywać więcej niż jeden? może potrzebny by był loop?

0

powiedz mi, gdzie ta procedura miała by te dane wyświetlić?

0

przypuśćmy że wywołuje tą funkcję w oknie report window, i wyniki były by wyświetlane poniżej tak jak to się odbywa po zwykłym poleceniu SELECT

0

no to teraz skąd procedura ma wiedzieć, że to jest np. report window?
Generalnie procedury/funkcje w pl/sql operują na danych a nie wyświetlają ich. Jedynie mogą coś wyświetlić przez dbms_output. Co więcej procedury z definicji nic nie zwracają. Jeśli chcesz coś zwrócić to musisz użyć funkcji. Jak ją zadeklarować aby się dało zrobić z niej select masz w linku.
BTW po co zwykły select chcesz zamknąć w procedurze??

0
Misiekd napisał(a)

BTW po co zwykły select chcesz zamknąć w procedurze??

Może rzeczywiście to nie ma sensu :) Zapomnijmy na moment o funkcjach i procedurach.

Jest sobie jakaś perspektywa a własciwie jest ich kilkanaście ale ta jedna view_statklientow jest końcowym zbiorem danych. Uzytkownik przypuśćmy co miesiąc wyciąga dane z perspektywy view_statklientow ograniczając wyniki do wierszy w których jest jakaś data, późniejsza niż przez niego określona, czyli dochodzi warunek

where data_sprzed>'jakas data'

może po prostu niech wpisuje z konsoli:

select * from view_statklientow where data_sprzed>'konkretna data'

Ta perspektywa to tylko wymyślony prosty przykład na potrzeby zadawania pytań :)

a pytanie brzmi: Czy istnieje możliwość stworzenia funkcji którą użytkownik będzie wywoływał wpisawszy konkretny parametr w nawias, następnie funkcja zrobiłaby SELECT na perspektywie zawężając wyniki o nowy warunek w "where" i jak to zrobić. A może jest jakaś inna droga do tego celu?

0

nie da się tak, jeśli już to user musiał by wpisywać

SELECT * from TABLE(twoja_funkcja(parametr));
0

a
select twoja_funkcja(parametr) from dual;
nie zadziała przypadkiem tak jak kuba11 chce.

0

dla funkcji zwracających typy proste tak, ale nie dla funkcji zwracających rowset

1 użytkowników online, w tym zalogowanych: 0, gości: 1