Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

Firebird: inserire una procedura parametrica con ritorno di dati in una Join

Digital Innovation Partner

Firebird: inserire una procedura parametrica con ritorno di dati in una Join

Supponiamo di avere una procedura che richiede parametri e restituisce un result set di dati, per evitare di fare infinite subquery si penserebbe di poterla mettere in join tipo :

    select  a.idcontatto, t.val_added
    from anagrafiche a, test_function(a.idcontatto) t

ma questo sistema non funziona dato che all’interno della from non verrebbero elaborati i dati della prima tabella e avremmo un errore non formale ma di elaborazione.

Il problema si risolve semplicemente utilizzando una left join che prevede a livello di motore database di permettere l’elaborazione del result set di dati partendo da sisnistra, quindi nel nostro caso verrebbero analizzati per primi i dati della tabella “ANAGRAFICHE”. Quindi utilizzando la sintassi dell’esempio qui sotto otterremo il risultato aspettato:

    select  a.idcontatto, t.val_added
    from anagrafiche a
    left join test_function(a.idcontatto) t
    on 1=1

quindi se avessimo altre procedure da mettere in join semplicemente basterebbe fare altri “left join” come da esempio, e potremmo utilizzare come parametri anche i valori di output di un’altra procedura.

Ovviamente potrete obiettare che la left join ritorna sempre il record set delle tabelle a monte della left, ma nessuno ci vieta di utilizzare a fine delle join un sana “WHERE” e fare i controlli che ci servono per escludere i record indesiderati.

di seguito il semplice codice della procedura uutilizzata :

 CREATE PROCEDURE TEST_FUNCTION (
    VAL INTEGER)
RETURNS (
    VAL_ADDED INTEGER)
AS
begin
  /* Procedure Text */
  val_added = val + 1;
  suspend;
end

Lascia un commento