DIFFERENZE TRA SQL, SQL DINAMICO E PLSQL?

di il
1 risposte

DIFFERENZE TRA SQL, SQL DINAMICO E PLSQL?

Quali sono le principali differenze tra SQL, SQL DINAMICO E PLSQL? Di SQL dinamico non si trova nulla su internet

1 Risposte

  • Re: DIFFERENZE TRA SQL, SQL DINAMICO E PLSQL?

    Ciao,
    premetto che sono concetti molto ampi e quindi vanno approfonditi, ma cercherò di sintetizzare, sperando di riuscire ad evidenziare le differenze "concettuali" utilizzando un linguaggio molto semplice:
    • SQL
      Acronimo che sta per Structured-Query-Language ed è il linguaggio per l'iterazione "classica" con il DB. Lo stesso viene suddiviso in:
    • DML (Data Manipulation Language)
      Rappresentano le istruzioni di accesso e manipolazione dei dati negli oggetti esistenti dello schema (DELETE, INSERT, LOCK TABLE, MERGE, SELECT, UPDATE, ...)
    • DDL (Data Definition Language)
      Creazione/modifica/cancellazione delle strutture (CREATE TABLE, CREATE INDEX, ALTER TABLE, DROP VIEW, ...)
    • TCL (Transaction Control Language)
      Comandi per la gestione delle transazioni (COMMIT, ROLLBACK, SAVEPOINT)
  • PL/SQL
    È il linguaggio procedurale del DBMS Oracle (PL sta per Procedural ) ed è quindi un vero è proprio linguaggio di programmazione.
    Il concetto centrale di PL/SQL è il "blocco" (in inglese block) che viene suddiviso in:
    • Anonimus Block
      Un blocco anonimo contiene delle istruzioni che vengono eseguite all’interno di un’applicazione o in modo interattivo senza essere memorizzato (stored) nello schema del DB. Esempio:
      DECLARE
      	definizione variabili, costanti, cursori, ecc...
      BEGIN
      	logica del blocco
      EXCEPTION
      	gestione delle eccezioni
      END;
      /
    • Named (o Stored) Block
      Si tratta di blocchi PL/SQL precompilati che vengono memorizzati nel database (Procedure, Function, Trigger, ecc ...).
      Di seguito un esempio di Procedure
      CREATE PROCEDURE nome_procedura   
      IS {or AS} -- la clausola IS sostituisce DECLARE   
      	definizioni;    
      BEGIN    
      	 corpo_procedura;    
      EXCEPTION
      	gestione delle eccezioni
      END;
      /  
      
    La procedura creata potrà essere richiamata in altri blocchi utilizzandone il nome.

    Come accennato sopra, PL/SQL è un vero è proprio linguaggio di programmazione (a differenza di SQL) ed è quindi possibile utilizzare:
  • Controllo condizionale (es. IF-ELSE IF-ELSE-END IF)
  • Controllo iterativo (es. LOOP, FOR LOOP)
  • SQL DINAMICO
    Il Dynamic SQL consente di utilizzare codice SQL prodotto run time.
    Provo a fare un esempio molto semplice (giusto per afferrare il concetto anche se la procedure di esempio non avrà un senso di utilizzo) per evideziare la differenza tra SQL e Dynamic SQL:
    supponiamo di dover effettuare la DROP di una tabella.
    DROP TABLE T;
    Per poterlo fare con codice SQL hai necessità di conoscere il nome della tabella già in fase di scrittura del codice, ma se dovessi cancellare una tabella all'interno di una procedura ma il nome della tabella viene passato, per esempio, con un parametro?

    In questo caso ci viene in aiuto il Dynamic SQL:
    CREATE PROCEDURE CANCELLA_TABELLA (table_name IN VARCHAR2)
    AS
    	sql_istr VARCHAR2(100);
    BEGIN    
    	sql_istr := 'DROP TABLE ' || table_name;
    	EXECUTE IMMEDIATE (sql_istr );
    EXCEPTION
    	gestione delle eccezioni
    END;
    / 

    Come si può vedere, l'istruzione SQL sarà generata run time (durante l'esecuzione della procedura) e nel momento in cui scriviamo il codice non conosciamo ancora il nome della tabella da eliminare.
    Sarà poi possibile utilizzare la procedura in altri blocchi:
    
    BEGIN
    	CANCELLA_TABELLA ('T');
    	CANCELLA_TABELLA ('T_2');
    END;
    /
  • Come dicevo all'inizio, sono concetti che vanno approfonditi, ma spero di essere riuscito a toglierti qualche dubbio.
Devi accedere o registrarti per scrivere nel forum
1 risposte