SET TERM ^ ;
CREATE OR ALTER PROCEDURE ZLECENIA_PACJENTA (
pacjent_id integer)
returns (
result varchar(10) character set win1250)
as
declare variable id_zlecenia integer;
begin
for select id from zlecenia where pacjent=:pacjent_id into :id_zlecenia
do
begin
if(id_zlecenia is null) then RESULT='NIE MA';
ELSE RESULT='MA';
suspend;
end
end^
SET TERM ; ^
GRANT SELECT ON ZLECENIA TO PROCEDURE ZLECENIA_PACJENTA;
GRANT EXECUTE ON PROCEDURE ZLECENIA_PACJENTA TO SYSDBA
1.
procedura pobiera jako argument id pacjenta (np z tabeli pacjenci) i sprawdza
czy w tabeli zlecenia istnieje pacjent o pobranym id.
Jezeli jest to zwraca 'MA' natomiast jezeli nie ma zwraca null,dlaczego?
Myslalem ze zwroci 'NIE MA'?
2.
jak w ibexpert (lub isqlu) zrobie select * from zlecenia_pacjenta('12345678');
to widzi mi te procedure zwraca wartosc
natomiast
jak zrobie select zlecenia_pacjenta(pacjent) from zlecenia;
to otrzymuje: "SQL error code = -804. Function unknown."
dlaczego? przeciez widze ja w procedurach?
co robie zle?
pozdr. mj
A od kiedy p�tla typu FOR wykonuje si�, gdy warunek jest fa�szywy? Skoro nie
znajduje rekordu spe�niaj�cego kryteria, to zawarto�� p�tli si� nigdy nie
wykona. Ustaw RESULT przed p�tl�.
--
S�awomir Szysz�o
Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych
FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/
Archiwum http://groups.google.com/groups?group=pl.comp.bazy-danych
On 2009-12-20, S�awomir Szysz�o <slas...@CIACHTO.list.pl> wrote:
> Dnia 2009-12-20 20:57, U�ytkownik Maciej Jurkiewicz napisa�:
> A od kiedy p�tla typu FOR wykonuje si�, gdy warunek jest fa�szywy? Skoro nie
> znajduje rekordu spe�niaj�cego kryteria, to zawarto�� p�tli si� nigdy nie
> wykona. Ustaw RESULT przed p�tl�.
>
Zostałeś bardzo dobrze zrozumiany, zastanów się ile przebiegów bedzie
miała pętla for jeżeli select zwróci zero rekordów (petla nie wykona się
wcale tak więc kod zawarty w tej pętli też się nie wykona). Sławomir Sz.
bardzo dobrze Ci odpowiedział, przypisz result przed pętlą.
Pozdrawiam
CREATE OR ALTER PROCEDURE ZLECENIA_PACJENTA (pacjent_id integer)
returns (result varchar(10) character set win1250)
as
begin
if exists(select * from zlecenia where pacjent = :pacjent_id) then
RESULT = 'NIE MA';
else
RESULT = 'MA';
suspend;
end
> Myslalem ze zwroci 'NIE MA'?
Nieprawda - nie da si� my�le� bez zrozumienia tematu. Ty nie rozumiesz.
> 2.
> jak w ibexpert (lub isqlu) zrobie select * from zlecenia_pacjenta('12345678');
> to widzi mi te procedure zwraca wartosc
> natomiast
> jak zrobie select zlecenia_pacjenta(pacjent) from zlecenia;
> to otrzymuje: "SQL error code = -804. Function unknown."
> dlaczego?
Pisa�em wcze�niej, bo nie rozumiesz jak to dzia�a po co i dlaczego tak
nie nale�y robi�.
> przeciez widze ja w procedurach?
> co robie zle?
OIDP, to powinno byďż˝ tak:
select (zlecenia_pacjenta(A.pacjent)) as CzyPacjentMaZlecenia
from zlecenia A
Ale to i tak ten kod jest... dziwny, chodzi mi o wo�anie procedury dla
ka�dego wiersza.
--
wloochacz