Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Oracle] Usare una funzione come valore per un'altra funzione

    ciao!

    avrei bisogno di usare il valore di una funzione dentro un'altra funzione.
    in pratica:
    codice:
    SELECT
    FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'PACCHETTO') PACCHETTO,
    FN_B2B_DESC_ATRR_AMM('XXL', 'PACCHETTO', PACCHETTO) PACC_DESC,
    FROM MAT_ANAG 
    .................................................
    però mi esce:
    codice:
    ORA-00904: "PACCHETTO": identificativo non valido
    00904. 00000 -  "%s: invalid identifier"
    *Cause:    
    *Action:
    Errore alla riga: 12, colonna: 42
    però, se commento la riga che da errore, il valore di PACCHETTO esce ben valorizzato.
    come posso fare??

  2. #2
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ciao!

    avrei bisogno di usare il valore di una funzione dentro un'altra funzione.
    in pratica:
    codice:
    SELECT
    FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'PACCHETTO') PACCHETTO,
    FN_B2B_DESC_ATRR_AMM('XXL', 'PACCHETTO', PACCHETTO) PACC_DESC,
    FROM MAT_ANAG 
    .................................................
    però mi esce:
    codice:
    ORA-00904: "PACCHETTO": identificativo non valido
    00904. 00000 -  "%s: invalid identifier"
    *Cause:    
    *Action:
    Errore alla riga: 12, colonna: 42
    però, se commento la riga che da errore, il valore di PACCHETTO esce ben valorizzato.
    come posso fare??
    Ciao,
    probabilmente l'alias pacchetto non viene risolto allo stesso livello della query, per cui delle due l'una:

    o riscrivi la funzione pacchetto nella funzione che la usa
    codice:
    SELECT
    FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'PACCHETTO') PACCHETTO,
    FN_B2B_DESC_ATRR_AMM('XXL', 'PACCHETTO', FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'PACCHETTO') PACC_DESC,
    FROM MAT_ANAG
    oppure fai una subquery
    codice:
    select Q.PACCHETTO,
    FN_B2B_DESC_ATRR_AMM('XXL', 'PACCHETTO', PACCHETTO) PACC_DESC,
    FROM (
    SELECT
    FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'PACCHETTO') PACCHETTO
    FROM MAT_ANAG
    ) Q
    HTH
    Ultima modifica di sspintux; 11-07-2016 a 13:41 Motivo: ...

  3. #3
    ciao!

    ho provato a richiamare direttamente la funzione.
    così non ho errori, però mi esce sempre il valore 0 (quello messo per default nell'EXCEPTION):
    codice:
    create or replace FUNCTION FN_B2B_DESC_ATRR_AMM (
      DITTA_ATTRIN  In  CHAR,
        CODICE_ATTRIIN IN VARCHAR2,
        VALOREIN IN VARCHAR2
      )
        RETURN VARCHAR2 IS VAL VARCHAR2(100);
    --
    BEGIN
        SELECT DESC1024 INTO VAL
        FROM ATTREST_AMMESSI
        WHERE DITTA_ATTR = DITTA_ATTRIN
        AND CODICE_ATTR = CODICE_ATTRIIN
        AND VALORE = VALOREIN;
        RETURN(VAL);
        EXCEPTION 
            WHEN NO_DATA_FOUND 
            THEN VAL := '0';
        RETURN(VAL);
    END FN_B2B_DESC_ATRR_AMM;
    l'altra funzione (quella da cui prendere il parametro):
    codice:
    create or replace FUNCTION FN_B2B_TROVA_ART_ATTR (
      DITMATIN  In  CHAR,
      NPAMIN IN CHAR,
        CODICE_ATTRIIN IN VARCHAR2
      )
        RETURN VARCHAR2 IS VAL VARCHAR2(100);
    --
    BEGIN
        SELECT VALORE INTO VAL
        FROM MAT_ATTRIB_ESTESI
        WHERE DITMAT = DITMATIN
      AND NPAM = NPAMIN
        AND CODICE_ATTR = CODICE_ATTRIIN;
        RETURN(VAL);
        EXCEPTION 
            WHEN NO_DATA_FOUND 
            THEN VAL := '0';
        RETURN(VAL);
    END FN_B2B_TROVA_ART_ATTR;
    quindi anche i valori li ho messi dello stesso tipo.

    nella select ho messo questo:
    codice:
    FN_B2B_DESC_ATRR_AMM('XXL', 'PACCHETTO', FN_B2B_TROVA_ART_ATTR('XXL', MAT_ANAG.NPAM, 'PACCHETTO')) PACC_DESC,

  4. #4
    controllando bene i risultati, mi sono accorto che in verità pare funzionare.
    a quanto pare mancano dei dati che avevo dato per scontato ci fossero....


    grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.