Dynamic SQL.

Slides:



Advertisements
Presentazioni simili
Cache Memory Prof. G. Nicosia University of Catania
Advertisements

Teoria e Tecniche del Riconoscimento
CREAZIONE UTENTE SU ORACLE1 Pagina delle risorse: crea utente oracle ( Password:… Dora in poi, in questi lucidi,
Microsoft SQL Server 2008 Utilizzo. Creazione DataBase CREATE DATABASE CREATE DATABASE Cinema.
Stored Procedure Function Trigger
DG Ricerca Ambientale e Sviluppo FIRMS' FUNDING SCHEMES AND ENVIRONMENTAL PURPOSES IN THE EU STRUCTURAL FUNDS (Monitoring of environmental firms funding.
SQL (Standard query language) Istruzioni per la creazione di una tabella: Create table ( tipo, (, [vincoli]) Primary key ( ) CHIVE PRIMARIA Foreign key(
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
Sequential Statements. – Il VHDL simula lo svolgersi in parallelo di varie operazioni – Loggetto fondamentale e il PROCESS – Un PROCESS contiene una serie.
Elementi di PL/SQL.
Un DataBase Management System (DBMS) relazionale client/server.
MySQL Esercitazioni. Ripasso Connessione a MySQL. Creazione delle basi di dati e delle tablelle. Inserimento dei dati. Interrogazioni.
Risore sul web (JavaScript) tm
UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA SQL Injection Prof. Stefano Bistarelli C Consiglio Nazionale delle Ricerche Iit Istituto.
UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della.
Basi di dati attive Paolo Atzeni.
SQL: Lezione 2 Esercitazione per il corso Basi di Dati Gabriel Kuper Nataliya Rassadko
SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
Sequence. CREARE UNA SEQUENCE CREATE SEQUENCE nome [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE]
Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
PRODOTTO CARTESIANO Otteniamo un prodotto cartesiano quando: viene omessa la condizione di join una condizione di join non è valida tutte le righe della.
FUNZIONI DI GRUPPO Le funzioni di gruppo operano su un set di record restituendo un risultato per il gruppo. AVG ([DISTINCT|ALL] n) media, ignora i valori.
Constraints.
Componenti dell’architettura Oracle
SQL per la definizione di basi di dati SQL non è solo un linguaggio di interrogazione (Query Language), ma Un linguaggio per la definizione di basi di.
Palermo, may 2010 F.Doumaz, S.Vinci (INGV-CNT- Gruppo di telerilevamento)
Corso di Basi di Dati Un esempio di RDBMS: Il tool MySQL
Microsoft Access Maschere.
JavaScript Lezione 5 Tipizzazione ed operazioni tra tipi diversi Istruzioni di input.
Filtered Index and Statistics Filtered Indexes Sergio Govoni
Moduli o Form I Moduli permettono all'utente di immettere informazioni...
Funzioni stringhe. chr Restituisce il carattere di un valore ascii dato. Per vedere lelenco dei codici ascii clicca QQQQ uuuu iiiiEsempio
Basi di Dati e Sistemi Informativi
Project Review Novembrer 17th, Project Review Agenda: Project goals User stories – use cases – scenarios Project plan summary Status as of November.
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
1 Basi di dati (Sistemi Informativi) Scuola di Dottorato in Scienze Veterinarie per la Salute Animale e la Sicurezza Alimentare a.a Ing. Mauro.
Operazione immissione persona Vogliamo implementare il seguente progetto: Immissione persona Anno N. Nome Cognome Errore:.... Controllo e Immissione Errore.
CREAZIONE UTENTE SU DATATOP. CREAZIONE UTENTE Andate su //datatop.di.unipi.it/webdb Login come utente: webdb password: ****** Administer -> User Manager.
SQL Developer Lanciare sqldeveloper (alias sul desktop) / c:\Oracle\sqldeveloper Associare tutti i tipi di file, se volete Tasto destro sulla spina “connection”
CREAZIONE UTENTE SU ORACLE1 Pagina delle risorse: crea utente oracle ( D’ora in poi, in questi lucidi, il vostro utente oracle.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
SQL*PLUS Worksheet Permette di:
ESERCIZIO PL/SQL e PSP.
FUNZIONI Dichiarazione: Definizione:
Operazione immissione persona Vogliamo implementare il seguente progetto: Immissione persona Anno N. Nome Cognome Errore:.... Controllo e Immissione Errore.
Il ciclo while.  Permette di ripetere un blocco di istruzioni fino a quando non si verifica un determinato evento  Il ciclo while può essere realizzato.
PLSQL 1.1 LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture.
Operazione immissione persona Vogliamo implementare il seguente progetto: Immissione persona Anno N. Nome Cognome Errore:.... Controllo e Immissione Errore.
ARCHITETTURA DI UN’APPLICAZIONE Interfaccia Logica dell’applicazione Business rules e vincoli Gestione dati SGBD Trigger, stored procedures PL/SQL (embedded)
Nozione ed uso Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso: –Gestione di vincoli di integrità: Per fallimento Per modifica.
UNITÀ LESSICALI Simboli, identificatori, costanti, commenti Simboli: Identificatori: lettere, numeri, $, _, #
TIPI RECORD Sintassi: –TYPE mioTipoRecord IS RECORD (field[,field]*); –field ::= nome tipo [ [NOT NULL] := expr ] I campi possono essere scalari, record,
PLSQL 1.1 LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture.
Elementi di PL/SQL. Pl/Sql Il PL/SQL (Procedural Language/Structured Query Language) è un linguaggio di programmazione procedurale di Oracle che costituisce.
PL/SQL Procedural Language/SQL estensione procedurale del linguaggio SQL.
ESERCIZIO PL/SQL e PSP. LO SCHEMA create table studenti ( nome VARCHAR2(15) not null, cognome VARCHAR2(15) not null, eta NUMBER );
TIPI RECORD Sintassi: –TYPE mioTipoRecord IS RECORD (field[,field]*); –field ::= nome tipo [ [NOT NULL] := expr ] I campi possono essere scalari o record.
UNITÀ LESSICALI Simboli, identificatori, costanti, commenti Simboli: Identificatori: lettere, numeri, $, _, #
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
CREAZIONE UTENTE SU ORACLE1
Operazione ricerca e selezione persone
ABAP Objects ALV Grid Mantova, 30 dicembre 2018.
Structured Query Language
Operazione ricerca e selezione persone
Operazione immissione persona
TIPI RECORD Sintassi: TYPE mioTipoRecord IS RECORD (field[,field]*);
Transcript della presentazione:

Dynamic SQL

Interrogazioni parametriche in PL/SQL procedure doIt( X in VarChar2 ) y VarChar2; begin select s.nome into y from Studenti s where Cognome = X; end;

Parametrizzazioni impossibili procedure doIt( X in VarChar2 ) y VarChar2; begin select s.nome into y from X s; select s.X into y from studenti s; for stud in ( select * from studenti order by X ) loop ... end loop; for stud in ( select * from studenti X ) end;

Dynamic SQL PL/SQL offre alcuni costrutti per l’esecuzione di codice PL/SQL preso in input come un valore di tipo VarChar2 Questi strumenti sono utilizzati per eseguire codice creato a run-time Questo aiuta a risolvere i problemi di parametrizzazione Meno controlli statici

EXECUTE IMMEDIATE EXECUTE IMMEDIATE esegue blocchi PL/SQL Begin <commands> End; oppure query SQL che ritornano una sola riga La sintassi è della forma: EXECUTE IMMEDIATE dynamic_string [INTO {define_variable[, define_variable]... | record}] [USING bind_argument[, bind_argument]...]

Esempio nome varchar2(20) := 'Bob'; cognome varchar2(20) := 'Elephant'; sql_stmt varchar2(250); plsql_block varchar2(250); persona persone%ROWTYPE; BEGIN EXECUTE IMMEDIATE 'CREATE TABLE auto (targa NUMBER, modello Varchar2(20))'; sql_stmt := 'INSERT INTO persone VALUES (:1, :2, :c)'; EXECUTE IMMEDIATE sql_stmt USING nome, cognome , 1970; sql_stmt := 'SELECT * FROM persone WHERE nome = ''Bob'' and cognome = ''Elephant'' '; EXECUTE IMMEDIATE sql_stmt INTO persona; plsql_block := 'BEGIN user.cercaPersona(:1,:2); END;'; EXECUTE IMMEDIATE plsql_block USING nome, cognome; END;

OPEN FOR OPEN … FOR esegue query multiriga e immette il risultato in un cursore (tipo REF CURSOR, weakly typed) La sintassi è della forma: OPEN cursor_variable FOR dynamic_string [USING bind_argument[, bind_argument]...];

Esempio d’uso di OPEN…FOR Cartella ese7 Compilare nell’ordine: Create.sql ModGUI.sql Ese7.sql Modificare host e user in Ese7.sql Test: http://oracle1.cli.di.unipi.it/pls/webdb/user.p_ese7.immettiparametri

Tipo del cursore TYPE EmpCurTyp IS REF CURSOR; pers EmpCurTyp; /* weakly typed cursor variable sqlString := ‘ select * from persone where (((:1 is null) Or (upper(rtrim(Nome))) like upper(rtrim(:2))) And ((:3 is null) Or (upper(rtrim(Cognome))) like upper(rtrim(:4))) And ((:5 is null) Or (AnnoNascita = :6)))'; if not(Ordine is null) then sqlString := sqlString ||' order by '||Ordine; end if; OPEN pers FOR sqlString USING IlNome,IlNome,IlCognome,IlCognome,LAnnoNascita,LAnnoNascita; loop FETCH pers INTO laPersona; EXIT WHEN pers%NOTFOUND; …. end loop;

Generazione di stringa/statement TYPE EmpCurTyp IS REF CURSOR; pers EmpCurTyp; /* weakly typed cursor variable sqlString := ‘ select * from persone where (((:1 is null) Or (upper(rtrim(Nome))) like upper(rtrim(:2))) And ((:3 is null) Or (upper(rtrim(Cognome))) like upper(rtrim(:4))) And ((:5 is null) Or (AnnoNascita = :6)))'; if not(Ordine is null) then sqlString := sqlString ||' order by '||Ordine; end if; OPEN pers FOR sqlString USING IlNome,IlNome,IlCognome,IlCognome,LAnnoNascita,LAnnoNascita; loop FETCH pers INTO laPersona; EXIT WHEN pers%NOTFOUND; …. end loop;

Esecuzione di statement TYPE EmpCurTyp IS REF CURSOR; pers EmpCurTyp; /* weakly typed cursor variable sqlString := ‘ select * from persone where (((:1 is null) Or (upper(rtrim(Nome))) like upper(rtrim(:2))) And ((:3 is null) Or (upper(rtrim(Cognome))) like upper(rtrim(:4))) And ((:5 is null) Or (AnnoNascita = :6)))'; if not(Ordine is null) then sqlString := sqlString ||' order by '||Ordine; end if; OPEN pers FOR sqlString USING IlNome,IlNome,IlCognome,IlCognome,LAnnoNascita,LAnnoNascita; loop FETCH pers INTO laPersona; EXIT WHEN pers%NOTFOUND; …. end loop;

Esercizio Completare l’interfaccia dell’esercizio precedente in modo da fornire un radio button per la scelta: Ordina in modo crescente o ascendente Permettere all’utente di scegliere i campi da visualizzare nel risultato tramite un insieme di check box (una per campo) Nella schermata risultato, in testa ad ogni colonna, aggiungere un bottone submit che, quando premuto, riordina rispetto a quella colonna