Appunti sul PL/SQL

lunedì 6 aprile 2009 alle 06:37 | Pubblicato su PL/SQL | 1 commento
Tag: ,

Il PL/SQL come gli utenti Oracle sanno è il linguaggio di programmazione integrato nel motore DBMS Oracle che si integra anche con SQL. Una definizione più precisa e corretta non mi viene in mente.  Si tratta di un linguaggio procedurale che alcuni ritengono obsoleto e molto limitato, altri ritengono che sia validissimo e utilissimo. Secondo me la verità sta in mezzo, nel senso che è molto utile per determinate e precise tipologie di operazioni, in particolare io lo utilizzo solo per operazioni di caricamento, elaborazione massiva di dati, il cosidetto ETL del datawarehouse.

Francamente non mi capitano spessissimo lavori da fare in PL/SQL, per cui ho maturato una conoscenza del linguaggio che ritengo buona, ma ancora con qualche lacuna. Mi trovo spesso in difficoltà per alcuni limiti del PL/SQL e per mia mancanza di conoscenza approfondita dell’interzione fra motori  PL/SQL ed SQL .

Un esempio deriva da una questione emersa venerdì scorso su OraclePortal. Siccome da quella questione sono emersi due ottimi appunti ho deciso di fare un post qui dove ho facilità a ritrovare le cose.

La prima annotazione è la modalità delle chiamate delle funzioni PL/SQL, pur avendone parlato in passato, mi sfuggiva, fino a venerdì sera, una differenza fondamentale, ovvero che c’è una differenza tra il chiamare una funzione  PL/SQL da SQL, cioè inserendola in una query come ad esempio

SELECT funzione() from dual;

e chiamarla da un blocco PL/SQL, ad esempio;


begin
a := funzione();
end;

Una delle differenze più subdole è la modalità di passaggio dei parametri, nelle chiamate da SQL non è possibile utilizzare la chiamata di funzione con il passaggio dei parametri per nome, cosa che però all’interno di un blocco PL/SQL invece è lecita. Venerdì pomeriggio, un po’ frettolosamente, ho pensato che quello invece potesse essere il problema alla base della questione, cosa che invee non era, devo ringraziare il partecipante che ha chiarito il mio errore e spiegato la differenza, spero che mi rimanga in mente.

Il punto invece del problema sottoposto nel forum di OraclePortal invece era la gestione dei tipi dato. Francamente non ho nulla da aggiungere a quanto gia spiegato nelle due risposte che spiegano il problema e la soluzione. Una volta vista la spiegazione mi è diventato chiaro e mi ha fatto riflettere sul alcuni accorgimenti da utilizzare nella programmazione PL/SQL. Mi ha anche fatto venire in mente  un progetto a cui lavorai tre o quattro anni fa in cui creai un mostro, perché appunto per questi problemi di tipi, scrissi dei package che in sostanza avevano dei riferimenti incrociati, uno conteneva le definizioni dei tipi e le procedure principali (direi quelle pubbliche) mentre gli altri package contenevano delle procedure che riferivano i tipi definiti nel primo package e che venivano richiamate da una procedura sempre nel primo package, insomma un bel guazzabuglio. Non ricordo perché non feci un terzo package con la sola definizione del tipo …

1 commento »

RSS feed for comments on this post. TrackBack URI

  1. io mi iscrivo senza dubbio alcuno tra quelli che lo considerano validissimo e utilissimo🙂
    a parte il fatto che quando devo sviluppare un’applicazione che lavorerà su di un DB Oracle, tutto il middlweare tra l’applicazione front-end ed il DB lo scivo in PL/SQL per molte buone ragioni, svantaggi non ce ne sono..

    pensa solo ad AskTom per dare un’esempio, intendo quello precedente sviluppato da Tom interamente in PL/SQL che poi sarebbe diventata la base di APEX (progetto Marvel) e ne parla in un post sul sito stesso……..

    Molte volte, non so se succede anche a te, sento che questo o quell’altro non si puo fare in PL/SQL ed invece non è così

    Alessandro


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: