Avatar billede stkol Nybegynder
18. november 2002 - 11:08 Der er 10 kommentarer og
1 løsning

PL/Sql udregning af 2 felter

Hej

Jeg skal have lavet et PL/SQL script som kan minus et felt fra et andet.

Jeg har følgende men får en fejl når jeg compilerer det :

####  SCRIPT START ####
function CF_1Formula return Number is

DECLARE
   
    diff PLS_INTEGER

begin
   
  diff := INVDOCHEADER.DOC_TOTALAMOUNT - INVDOCHEADER.DOC_AGENCYCOMMISION;

end;
####  SCRIPT START ####

Er der nogen der kan fortælle mig hvad der er galt, eller endnu bedre lave den om så den kan compileres? Jeg har ikke arbejdet med PL/SQL i over 2½ år, så jeg er på begynder nivau!

På forhånd mange tak *S

Stig :-)
Avatar billede psv Nybegynder
18. november 2002 - 11:13 #1
Du mangler da vist en:
  return Diff;
Avatar billede stkol Nybegynder
18. november 2002 - 11:19 #2
Hej psv

Hvor skal den return Diff; være?? jeg har prøvet at sætte den efter

diff := INVDOCHEADER.DOC_TOTALAMOUNT - INVDOCHEADER.DOC_AGENCYCOMMISION;

men den vil heller ikke compileres når den står der!
Avatar billede psv Nybegynder
18. november 2002 - 11:23 #3
Jamen så skal jeg da have at vide hvad Compileren siger... Ved jo ikke om det er INVDOCHEADER.DOC_TOTALAMOUNT der ikke er adgang til :-)
Avatar billede psv Nybegynder
18. november 2002 - 11:25 #4
Det her kompilerer for mig... Bare ret i linien "Result := 1;"...

create or replace function CF_1Formula return number is
  Result number;
begin
  Result := 1;
  return Result;
end CF_1Formula;
Avatar billede stkol Nybegynder
18. november 2002 - 11:27 #5
Den skriver :

Error 103 at line 3, column 2
  Encountered the symbol "DECLARE" when expecting one of the following:

    begin function package pragma procedure subtype type use
    <an identifier> <a double-quoted delimited-identifier> cursor
    form current external
Avatar billede psv Nybegynder
18. november 2002 - 11:31 #6
jamen så burde du da gøre som den siger og fjerne declare.. (Det burde jeg have set *S*)
Avatar billede stkol Nybegynder
18. november 2002 - 11:34 #7
OK nu har jeg lavet det som følger :

function CF_1Formula return Number is
  diff number;
begin
  diff := INVDOCHEADER.DOC_TOTALAMOUNT - INVDOCHEADER.DOC_AGENCYCOMMISION;
  return diff;
end CF_1Formula;

Men nu kommer den med følgende errors

Error 357 at line 4, column 24
  Table,View Or Sequence reference 'INVDOCHEADER.DOC_TOTALAMOUNT' not allowed in this text

og

Error 0 at line 4 column 3
  Statement ignored
Avatar billede psv Nybegynder
18. november 2002 - 11:43 #8
Hvordan skal vi vide hvad der er galt... Vi aner ikke hvad INVDOCHEADER.DOC_TOTALAMOUNT er og hvor den er defineret.

I øvrigt bør du nok skrive "create or replace"... Ellers kan du ikke rekompilere!!
Avatar billede stkol Nybegynder
18. november 2002 - 11:50 #9
Hvis jeg laver en Create or Replace på den kommer den med en fejl der siger only a function is allowed

INVDOCHEADER er et View

DOC_TOTALAMOUNT  er en felt type Number(18)

Er det nok???
Avatar billede psv Nybegynder
18. november 2002 - 11:54 #10
Ok - det du vil lave er lave reelt bare en select der udregner differencen. Det skal du da ikke bruge en function til? Desuden har du jo slet ikke udpeget hvilke rækker fra INVDOCHEADER du vil have tilbage? Du burde nok lave noget lignende:

select DOC_TOTALAMOUNT-DOC_AGENCYCOMMISION as diff
from INVDOCHEADER
where ???
Avatar billede stkol Nybegynder
18. november 2002 - 12:28 #11
Kanont!! Tusind tak for hjælpen, jeg troede at man skulle gøre det igennem en PL/Sql *S
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