Creare funzioni in Oracle

Mattepuffo's logo
Creare funzioni in Oracle

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!


Condividi

Commentami!