16. juni 2003 - 22:08Der 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!
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; /
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...
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;
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.