Avatar billede thomasthorup Nybegynder
16. juni 2003 - 22:08 Der er 5 kommentarer og
1 løsning

Funktioner i PL/SQL

Jeg har lavet en funktion, som bliver kompileret og oprettet, men jeg kan ikke få den til at køre! Såvidt jeg har forstået er det muligt at gemme en funktion i en fil og at lade Oracle kalde den derfra? Jeg har gemt funktionen i et textdoc med ext. SQL!
Avatar billede pgroen Nybegynder
17. juni 2003 - 05:50 #1
Øh, hvad mener du med at du ikke kan få den til at køre ?

- Hvad kommer der af fejlmeddelelser ?
Avatar billede thomasthorup Nybegynder
17. juni 2003 - 08:55 #2
Der kommer ingen fejlmeddelse, jeg får bare at vide at "PL/SQL-procedure er udført"!Det er muligt at jeg ikke har forstået det korrekt, men den funktion jeg har lavet burde, givet et employee number, hentet det totale salg ud for den givne employee? Funktionen ser således ud:

declare
    enum customers.cno%type;
    total number(10,2);
    status boolean;

    function total_emp_sales(emp_no in employees.eno%type)
    return number is
    sales number;
    begin
    select sum(price*qty)
    into sales
    from orders, odetails, parts
    where orders.eno=eno and
    orders.ono=odetails.ono and
    odetails.pno=parts.pno;
    return(sales);
end;

    begin
    enum:=1000;
    total:=total_emp_sales(enum);
    dbms_output.put_line('Total sales for employee'||
        enum||'is'|| total);
end;
/
Avatar billede pgroen Nybegynder
17. juni 2003 - 09:02 #3
Aha !

Funktionen virker sikkert helt efter hensigten - du mangler bare at skrive
  SET SERVEROUTPUT ON;
før du udfører det ovenstående, for at få SQL*Plus til at skrive outputtet fra
dbms_output...
Avatar billede thomasthorup Nybegynder
17. juni 2003 - 09:19 #4
Skal det tilføjes i den sidste begin del???
Avatar billede pgroen Nybegynder
17. juni 2003 - 09:25 #5
Næh, før din declare del...

I øvrigt ville du kunne opnå det samme ved at skrive noget i stil med:

CREATE OR REPLACE FUNCTION total_emp_sales (emp_no IN employees.eno%TYPE)
  RETURN NUMBER
IS
  sales  NUMBER;
BEGIN
  SELECT SUM (price * qty)
    INTO sales
    FROM orders, odetails, parts
    WHERE orders.eno = eno
      AND orders.ono = odetails.ono
      AND odetails.pno = parts.pno;

  RETURN (sales);
END;

SELECT 'Total sales for employee 1000 is ' || total_emp_sales (1000)
  FROM DUAL;
Avatar billede thomasthorup Nybegynder
17. juni 2003 - 09:34 #6
Super...
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