Avatar billede nlsaeg Nybegynder
13. januar 2004 - 00:36 Der er 4 kommentarer og
1 løsning

Eksekvere en funktion

Hej.
Jeg har en meget lille funktion, problemet er at jeg ikke er helt sikker på hvordan den skal eksekveres. Jeg kan få afviklet den ved at bruge select fun_OpretAukt(); men det holder ingen steder, da det er en insert-funktion, ikke select.


CREATE OR REPLACE FUNCTION fun_OpretAuktion (int,varchar,float,timestamp) RETURNS boolean AS '
    DECLARE
        saelgerid ALIAS FOR $1;
        navn ALIAS FOR $2;
        mindstepris ALIAS FOR $3;
        udloebsdato ALIAS FOR $4;
        postnr int;
    BEGIN
      SELECT bru_postnr INTO postnr FROM tbl_bruger WHERE bru_id=1;
          IF NOT FOUND THEN
            return false;
        ELSE
          INSERT INTO tbl_auktion(auk_saelgerid,auk_navn,auk_mindstepris,auk_udloebsdato,auk_postnr)
          VALUES(saelgerid,navn,mindstepris,udloebsdato,postnr);
          RETURN true;
        END IF;
    END;
' LANGUAGE 'plpgsql';
Avatar billede searchz Nybegynder
13. januar 2004 - 12:32 #1
Det holder da alle steder, hvis du læser din kode igennem returnerer din funktion jo også en boolean som du selecter når du kalder din funktion.
En funktion i PostGreSQL skal altid returnere en værdi.

Jeg går ud fra du tidligere har arbejdet med f. eks. MS SQL server?
Avatar billede nlsaeg Nybegynder
13. januar 2004 - 15:49 #2
Jeg tror at du misforstår mig. Man kunne forestille sig at en function f.eks. indeholdte fem insert-sætninger. Når en sådanne "insert-function" skulle eksekveres ville jeg ikke umiddelbart ønske at bruge select func_fem();
Jeg har ikke arbejdet med msSQL før, men dog læst nogle småting omkring stored procedures, og der så jeg bl.a. exec sp_func(asd,asd,asd); 
Det er noget i den retning jeg søger.
Avatar billede nlsaeg Nybegynder
13. januar 2004 - 18:05 #3
Nu har jeg forhørt mig et par steder, og det ser ud til at Det er måden at man gør det på i postgresql - Det andet ville nu engang se pænere ud ;-)
Avatar billede searchz Nybegynder
13. januar 2004 - 18:08 #4
Det eksempel du selv giver med EXEC PROC, var egentlig det der ledte mig på tanken om at du måske tidligere havde arbejdet med MS SQL SERVER.

Kigger du på din stored procedure returnerer du jo én værdi - en boolean, hvis det er sådan at du ikke skal bruge denne værdi, kan din funktion kaldes med

PERFORM fun_OpretAuktion (int,varchar,float,timestamp);

Det der så sker er at at den returnerede værdi så bare ignoreres.
Avatar billede nlsaeg Nybegynder
13. januar 2004 - 18:22 #5
Det er selvfølgelig altid rart at kunne sikre sig at funktionen blev udført som forventet - så på det punkt er select func() fint. Men det hele koger ned til, at det var mest en detajle der gik mig på - men nok om det.

Jeg har set lidt på PERFORM men jeg kan ikke umiddelbart få den til at virke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester