Avatar billede kegel Nybegynder
16. oktober 2001 - 13:43 Der er 2 kommentarer og
1 løsning

Manglende returværdi fra funktion?


Jeg har nedenstående funktion som senere skal indgå i en select sætning:

function doSomething (pnkeyfield in number) return number is

cursor c_resultset(keyfield number) is
select SomeNumber
from  SomeTable
where  ID = keyfield;

loc_number SomeTable.SomeNumber%TYPE;
begin
  open c_resultset (pnkeyfield);
  fetch c_resultset
  into loc_number;
  close c_resultset;
  return loc_number; 
end;

Nuvel jeg forsøger herefter at lave min select sætning

select SomeAttribut
    , doSomeThing (ATable.keyfield) \"Functionsvalue\"
from  ATable

Problemet er at der ganske enkelt ikke kommer nogen værdi i kolonnen der skal indholde funktionsværdien. Sætter jeg derimod en konstantværdi ind i doSomeThing funktionens return statement, ja så får jeg altså en returværdi!

Blot for en god ordens skyld:

1) Ovenstående funktion er placeret i en package, men der burde i realiteten ikke betyde noget og min forespørgsel bliver som sagt udført.

2) Jeg har overvejet om der overhovedet er en returværdi i ovenstående cursor og jeg har derfor udført den select sætning der er i omtalte cursor. Jeg får en returværdi når jeg udfører selve select sætningen.

3) jeg har prøvet at definere en exception blok, men der optræder ingen exception overhovedet?!

4) Jeg har undersøgt om jeg faktisk får præcist en række tilbage vha. c_resultset%ROWCOUNT = <et eller andet tal>. Jeg får præcist en række tilbage.

Jeg er ganske enkelt løbet tør for ideer. Er der nogle som har et bud på årsagen?


Avatar billede teepee Nybegynder
16. oktober 2001 - 14:52 #1
Det tyder på at den værdi du tro at du indsætter IKKE er den rigtige, for ellers har du gjort alt det rigtige. Prøv at lave selecten UDEN funktionskaldet... er det nogle af disse værdier du indsætter som konstanter i din egen test?... og check ATable.keyfield er ikke et andet format end det number felt som er input for funktionen.
Avatar billede teepee Nybegynder
16. oktober 2001 - 15:08 #2
evt. en describe af dine to tabeller?
Avatar billede kegel Nybegynder
16. oktober 2001 - 15:20 #3
Jeg har nu fundet årsagen

Mit argument til cursoren er keyfield, men der er også en kolonne i tabellen der hedder keyfield! Selvom jeg bruger en tabel alias foran de forskellige attributter (men ikke på cursor parameteret) så opfatter den altså parameter variablen som en reference til tabellens attribut, suk .... hvor dum kan man være.

Jeg accepter dit svar teepee fordi den tvang mig til at se efter datatypen på tabellen - og der blev jeg opmærksom på at der også var en kolonne med dette navn.

Tak for hjælpen

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