Skip to main content

Dynamic

Dynamic SQL is a programming technique that enables you to build SQL statements dynamically at runtime.

You can create more general purpose, flexible applications by using dynamic SQL because the full text of a SQL statement may be unknown at compilation. For example, dynamic SQL lets you create a procedure that operates on a table whose name is not known until runtime.

Oracle includes two ways to implement dynamic SQL in a PL/SQL application:

  • Native dynamic SQL, where you place dynamic SQL statements directly into PL/SQL blocks
  • Calling procedures in the DBMS_SQL package.

 

DBMS_SQL è un package Oracle che fornisce una interfaccia ideale per fare il parsing di istruzioni SQL dinamiche di data manipulation language (DML) o data definition language (DDL). Per esempio, è possibile lanciare una istruzione di DROP TABLE all'interno di una stored procedure usando un parametro come nome della tabella.

Oracle Online Docs

Si tratta di tecniche per mettono di scrivere il testo dell' SQL a runtime.

Tutto questo permette di scrivere codice d' uso generale, scalabile e riutilizzabile poichè il testo dell SQL non è conosciuto in fase di compilazione. Per esempio siamo in grado di scrivere una procedure che lancia istruzioni DML su una tabella il cui nome non è conosciuto fino a runtime.

Oracle mette a disposizione due sistemi per realizzare SQL dinamici:

  • Cursori parametrici
  • Il package DBMS_SQL e EXCE_SQL

Oracle 9i Docs

Uso di OPEN-FOR, FETCH, eCLOSE

Un SQL dinamico rappresenta una SELECT che resistuisce più righe può essere procvessato in modo nativo come segue:

  1. Uso un OPEN-FOR per associare la/le variabili al SQL dinamico. La clausula USING di OPEN-FOR specifica un 'bind' tra un parametro e un segnaposto all' interno dell SQL
  2. La clausula USING non può speicificare il valore NULL, un possibile workaround è l'uso di una variabile non inizializzata come quiExample 7-3
  3. Per dettagli sulla sintassi vai a OPEN-FOR Statement.
  4. Uso una FETCH per recuperare i record uno alla volta
  5. Per dettagli sulla sintassi vai a FETCH Statement
  6. Usate CLOSe per chiudere il ref-cursor
  7. Per dettagli sulla sitnassi CLOSE Statement.