Creare funzioni in Oracle
In questo articolo vediamo un esempio di creazione di una funzione in Oracle.
Le funzioni possono essere molto utili per svolgere compiti molto specifici.
Rispetto ad una query "secca", inoltre, vengono cachate, e quindi sono anche più veloci.
Tenete in considerazione che una funzione può tornare un valore, non un record set.
Questa è una che uso in produzione:
CREATE FUNCTION FN_B2B_PREZZO_ARTICOLO_SCONTO(
DITTAIN IN CHAR,
NUMERATIN IN CHAR,
PERIODOIN IN CHAR,
NUMIN IN NUMBER,
SERIEIN IN CHAR,
MODELLOIN IN CHAR
)
RETURN NUMBER IS
VAL NUMBER(17, 5);
--
BEGIN
SELECT (PRZDIVISA - (PRZDIVISA * SCONTO1 / 100))
INTO VAL
FROM LIST_OFF_DETT LISTIN
INNER JOIN MAT_ANAG MAT ON MAT.NPAM = LISTIN.NPAM
INNER JOIN LIST_OFF_DETT_EXT EXT
ON LISTIN.NUMERAT = EXT.NUMERAT AND LISTIN.PERIODO = EXT.PERIODO AND LISTIN.NUM = EXT.NUM AND
LISTIN.SERIE = EXT.SERIE AND LISTIN.RIGA = EXT.RIGA
WHERE LISTIN.DITTA = DITTAIN
AND LISTIN.FVL = ' '
AND MAT.DITMAT = DITTAIN
AND MAT.FVL = ' '
AND EXT.DITTA = DITTAIN
AND EXT.FVL = ' '
AND LISTIN.NUMERAT = NUMERATIN
AND LISTIN.PERIODO = PERIODOIN
AND LISTIN.NUM = NUMIN
AND LISTIN.SERIE = SERIEIN
AND EXT.NUMERAT = NUMERATIN
AND EXT.PERIODO = PERIODOIN
AND EXT.NUM = NUMIN
AND EXT.SERIE = SERIEIN
AND MAT.CODINT = MODELLOIN
AND TO_CHAR(SYSDATE, 'YYYYMMDD') BETWEEN TO_CHAR(EXT.DA, 'YYYYMMDD') AND TO_CHAR(EXT.A, 'YYYYMMDD');
RETURN (VAL);
EXCEPTION
WHEN NO_DATA_FOUND
THEN VAL := 0;
RETURN (VAL);
END FN_B2B_PREZZO_ARTICOLO_SCONTO;
Come vedete è possibile passargli anche dei parametri.
Enjoy!
database oracle function sql
Commentami!