Home

Scheme: struttura del programma e campo di azione

image

Contents

1. newline set z potenza x y display x display display y display display z newline In alternativa si pu modificare la funzione potenza in modo che il ciclo do gestisca la dichiarazione e l incremento della variabile i define potenza x y define z 1 do i 1 i 1 gt i y set z z x E possibile usare anche un algoritmo ricorsivo define potenza x y if x 0 0 scheme esempi di programmazione x potenza x y 1 310 1 5 Radice quadrata Il problema della radice quadrata stato descritto nella sezione 282 2 5 F radicel scm Radice quadrata i radice lt x gt define radice x define z 1 define t 0 define uscita f do uscita set z z 1 set t z z if gt t x stato superato il valore massimo begin set 2 z 17 set uscita t Inizio del programma define x 0 define z 0 display Inserisci il numero intero positivo set x read newline set z radice x display La radice quadrata di display x display newline display z 310 1 6 Fattoriale Il problema del fattoriale stato descritto nella sezione 282 2 6 F fattorialel scm Fattoriale t 3507 3508 Scheme esempi di programmazione fattoriale lt x gt define fattoriale x
2. L 0 3631 322 2 Modello relazionale i iirerriicissrrriaieiiniad t atini ia 3632 322 3 Gestione delle relazioni aissssirisisiridsssisd risit irrin r Aaina 3635 322 4 Riferimenti si E E E A rai 3641 323 Introduzione a SOL srssessas os artk KENDES EN PERLE ERE ES EESSI E EEEE DENEA 3642 323 1 Concetti fondamentali nsssasiscrresisssssaaia kek OSESE EAER KEERA ESANA 3642 323 2 Tipidi dall papi t hreet ae lap 3642 323 3 Operatori funzioni ed espressioni L Li 3646 323 4 Tabelle crinali ada a 3648 323 5 Inserimento eliminazione e modifica dei dati 3652 323 6 Interrogazioni di tabelle L LL 3654 323 7 Trasferimento di dati in un altra tabella 3661 323 5 Viste eresi in eiea aieia colin 3662 323 9 Controllare gli accessi LL 3662 323 10 Controllo delle transazioni LL 3664 323 11 COON iii ann 3664 323 12 Riferimenti pissossla tp pair EE E ET 3666 324 PostgreSQL struttura e preparazione 3667 324 1 Struttura dei dati nel file system 0 0 3667 324 2 Impostazione cliente servente e amministrazione 3669 324 3 Accesso e autenticazione L i 3675 324 4 Configurazione nella distribuzione GNU Linux Debian 3677 324 5 Gestione delle basi di dati tersiar a k kanne iaia 3679 324 6 Accesso a una base di dati errereen eneo 3680 324 7 Manutenzione delle basi di dati
3. nenene enn 3684 324 8 Maneggiare i file delle basi di dati a 3685 324 9 Riferimenti ae E EEG 3691 325 PostgreSQL il linguaggio 00 3692 325 1 Prima di mare css pale pri 3692 325 2 Tipi di dati e rappresentazione LL Li 3692 929 5 FUNZIONI ita a 3694 323 4 Esempi Comuni sirene 3695 325 5 Controllo delle transazioni csscsisrressikinest tratan ERENER 3701 325 6 Cursori 325 7 Particolarit di PostgreSQL nu 325 8 Riferimenti 326 PostgreSQL accesso attraverso PgACCESS LL 326 1 Accesso alla base di dati i ode 326 2 Gli oggetti secondo PgACCESSs LL 326 3 Tabelle 326 4 Interrogazioni e Viste LL 326 5 Stampe 326 6 Riferimenti 327 PostgreSQL accesso attraverso WWW SQL 0 nnne 327 1 Principio di funzionamento rrr enru n 327 2 Preparazione delle basi di dati e accesso LL enen 327 3 Linguaggio di WWW SQL LL 327 4 Istruzioni 327 5 Riferimenti 328 Le funzioni e i trigger in PostgreSQL un esercitazione didattica 328 1 Lo scenario la base di dati biblioteca 328 2 Imnclasse al lavoro i i e i 328 3 Riferimenti Indice analitico del volume 3630 3701 3702 3705 3706 3706 3707 3708 3709 3711 3713 3714 3714 3714 3715 3720 3724 3725 3725 3725 3731 3732 Capitol
4. azione predefinita i V La riga letta appartiene a uno dei gruppi selezionati NO S lt 2 i V Esegue le elaborazioni previste per questa riga L azione predefinita di SED l emissione del contenuto dell area transitoria per cui se non venisse fornita alcuna direttiva a SED si otterrebbe almeno la riemissione completa dello stesso file ricevuto in ingresso sed pippo txt L esempio mostra proprio l avvio dell eseguibile sed allo scopo di interpretare una direttiva nulla fornendo il file pippo txt in ingresso Il risultato la riemissione del contenuto di questo file attraverso lo standard output Per impedire che questa azione si compia automaticamente si utilizza l opzione n ovve ro quiet o silent In questo modo compito delle direttive del programma di elaborazione il richiedere espressamente l emissione della riga elaborata 3586 SED introduzione SED dispone di due aree transitorie per le elaborazioni una che contiene la riga letta che gi stata indicata l altra definita come hold space viene gestita eventualmente attraverso le direttive del programma di elaborazione interpretato da SED L utilizzo di questa seconda area di memoria non viene mostrato in questo capitolo Dal momento che SED un programma storico dei sistemi Unix bene tenere presente le li mitazioni che potrebbe avere in
5. tutto quello che vi appare dopo viene ignorato La conclusione del funzionamento di psql si ottiene con il comando q gt q Invio 324 6 1 psql psql opzioni base_di_dati psql un programma frontale front end interattivo per l invio di istruzioni SQL e l emis sione del risultato corrispondente Si tratta di un cliente come gli altri di conseguenza richie de la presenza di postmaster per instaurare una connessione con una copia del servente postgres psql pu funzionare in modo interattivo come gi accennato oppure pu eseguire le istruzioni contenute in un file Questo pu essere fornito attraverso l opzione f oppure pu provenire dallo standard input attraverso una pipeline psql pu funzionare solo in abbinamento a una base di dati determinata In questo senso se non viene indicato il nome di una base di dati nella riga di comando psql tenta di utilizzarne una con lo stesso nome dell utente Per la precisione si fa riferimento alla variabile di ambiente USER P Alcune opzioni c istruzione_SQL Permette di fornire un istruzione SQL gi nella riga di comando ottenendone il risultato at traverso lo standard output e facendo terminare subito dopo l esecuzione di psql Questa opzione viene usata particolarmente in abbinamento a q d base_di_dati Permette di indicare il
6. Quello che si vede l esempio del file predefinito con alcuni ritocchi per adattarlo alle partico larit locali importante sottolineare che per motivi di sicurezza l accesso tramite la rete viene impedito inizialmente per cui occorre abilitare la cosa in modo esplicito attraverso la direttiva PGALLOWTCPIP yes come si vede dall esempio stesso PostgreSQL struttura e preparazione 3679 324 5 Gestione delle basi di dati Per poter gestire una base di dati occorre prima crearla Ci si ottiene normalmente attraverso lo script createdb avviato con i privilegi adatti cio quelli di un utente a cui ci consentito Nello stesso modo attraverso lo script dropdb si pu eliminare un intera base di dati PostgreSQL non distingue tra lettere maiuscole e minuscole quando si tratta di nominare le basi di dati le relazioni le tabelle o gli oggetti a seconda della definizione che si preferisce utilizzare e gli elementi delle relazioni Tuttavia in certi casi si verificano degli errori inspie gabili dovuti alla scelta dei nomi che in generale conviene indicare sempre solo con lettere minuscole 324 5 1 Creazione di una base di dati La creazione di una base di dati in pratica la creazione di una serie di file all interno di una directory con lo stesso nome usato per identificare la base di dati stessa Questa operazione ha luogo utilizzando una struttura di partenza gi predisposta di solito
7. 3686 PostgreSQL struttura e preparazione Si pu osservare che l utente postgres ha tutti gli attributi booleani attivi usecreatedb usetrace usesuper usecatupd e questo per permettergli di compiere tutte le opera zioni all interno delle basi di dati In particolare l attributo usecreatedb permette all utente di creare una base di dati e usesuper permette di aggiungere utenti In effetti osservando l esempio della figura l utente tizio ha praticamente gli stessi privilegi dell amministratore postgres 324 8 1 2 Catalogo pg_shadow Il catalogo pg_shadow il contenitore delle informazioni sugli utenti a cui si accede normal mente tramite la vista pg_user Il suo scopo quello di conservare in un file pi sicuro perch non accessibile agli utenti comuni i dati delle parole d ordine degli utenti che intendono usare le forme di autenticazione basate su queste Per il momento nella documentazione di Postgre SQL non viene spiegato come usarlo n se le parole d ordine indicate devono essere in chiaro o cifrate in qualche modo L esempio della figura 324 2 mostra gli stessi utenti a cui non viene abbinata alcuna parola d ordine La consultazione della tabella si ottiene con il comando SQL templatel gt SELECT FROM pg_shadow Figura 324 2 Esempio di un catalogo pg_shadow usename usesysid usecreatedb usetrace usesuper useca
8. lt SQL WHILE espressione gt lt SQL DONE gt La struttura iterativa che si vede nello schema permette di delimitare uno spazio da interpretare ripetitivamente finch l espressione condizionale introduttiva continua a restituire il valore Vero o un valore numerico diverso da zero lt SQL SET contatore 10 gt lt SQL WHILE Scontatore gt 0 gt 3720 PostgreSQL accesso attraverso WWW SQL lt P gt Il contatore ha raggiunto il livello lt SQL PRINT contatore gt lt P gt lt SQL SETEXPR contatore contatore 1 gt lt SQL DONE gt L esempio mostra l inizializzazione di una variabile denominata contatore al valore iniziale 10 quindi inizia un ciclo iterativo che si arresta quando tale variabile raggiunge lo zero A ogni ciclo viene visualizzato il contenuto della variabile che subito dopo viene ridotto di un unit 8 Nell ambito di un iterazione possono essere usate delle istruzioni per interrompere il ciclo in corso o per interrompere tutta l iterazione lt SQL CONTINUE gt lt SQL BREAK gt La prima della due istruzioni interrompe il ciclo attuale facendo riprendere immediatamente l iterazione mentre il secondo interrompe l iterazione del tutto Esiste anche un altro tipo di iterazione il cui scopo la scansione delle righe ottenute dall interrogazione di una base di dati lt SQL PRINT_LO
9. lt SQL SETDEFAULT nome_variabile valore_da_assegnare gt L istruzione lt SOL SETDEFAULT gt permette di stabilire un valore predefinito per una variabile a differenza di lt SOL SET gt la variabile non viene modificata se esiste gi e ha un valore L esempio seguente definisce la variabile contatore solo se necessario inizializzandola con il valore 10 lt SQL SETDEFAULT contatore 10 gt Elenco variabili lt SQL DUMPVARS gt L istruzione lt SQL DUMPVARS gt emette l elenco delle variabili esistenti assieme al valo re che contengono Pu essere usato per scopo diagnostico quando si cerca di capire cosa succede realmente 327 4 1 Apertura e chiusura di una connessione e accesso a una base di dati L interrogazione di una base di dati deve essere preceduta dalla connessione a un servente DBMS e dalla selezione di una base di dati inoltre al termine delle interrogazioni si passa normalmente alla chiusura di una connessione in pratica secondo lo schema seguente xa Si si SOL CONNECT gt SQL DATABASE nome della_base_di_dati gt SQL CLOSE gt In breve lt SOL CONNECT gt serve a iniziare una connessione con un servente per l accesso a una base di dati lt SOL DATABASE gt serve a indicare la base di dati specifica presso il servente lt SOL CLOSE gt chiude la connessione e Accesso a
10. vite40 01 01 1999 1200 EER vite30 01 01 1999 800 vite30 02 01 1999 1000 vite30 03 01 1999 2000 NES rond50 03 01 1999 500 r Il join naturale delle relazioni Movimenti e Articoli basato sulla coincidenza del con tenuto dell attributo Codice genera una relazione in cui appaiono tutti gli attributi delle due relazioni di origine con l eccezione dell attributo Codice che appare una volta sola figura 322 7 Tabella 319 10 Il join naturale tra le relazioni Articoli e Movimenti Codice Data Carico Scarico Descrizione lb I 3 Ga vite40 01 01 1999 1200 Vite 4 mm vite30 01 01 1999 800 Vite 3 mm vite30 02 01 1999 1000 Vite 3 mm lesa vite30 03 01 1999 2000 Vite 3 mm rond50 03 01 1999 500 Rondella 5 mm T Nel caso migliore ogni tupla di una relazione trova una tupla corrispondente dell altra nel ca so peggiore nessuna tupla ha una corrispondente nell altra relazione L esempio mostra che tutte le tuple della relazione Movimenti hanno trovato una corrispondenza nella relazione Articoli mentre solo alcune tuple della relazione Articoli hanno una corrispondenza dall altra parte Queste tuple quelle che non hanno una corrispondenza sono dette penzolanti o dangling e di fatto vengono perdute dopo il jo
11. 3550 Basic introduzione 313 5 5 END STOP La conclusione o l interruzione del programma pu essere indicata esplicitamente utilizzando l istruzione END oppure l istruzione STOP La prima corrisponde all interruzione dovuta a una conclusione normale la seconda serve a generare un messaggio di errore e si presta per l interruzione del programma in presenza di situazioni anomale 313 6 Input e output L input e l output del Basic tradizionale molto povero riguardando prevalentemente l acquisizione di dati da tastiera e l emissione di testo sullo schermo 313 6 1 PRINT PRINT operando i L istruzione PRINT permette di emettere sullo schermo una stringa corrispondente agli operandi utilizzati come argomenti Eventuali valori numerici vengono convertiti in stringhe automatica mente Gli operandi possono essere elencati utilizzando la virgola o il punto e virgola Gli esempi seguenti sono equivalenti LO PRINT 1234 saluti 10 PRINT 1234 saluti 10 A 1234 20 PRINT A saluti 10 A 1234 20 M saluti 30 PRINT A M Se come operando si vuole utilizzare il risultato di un espressione di qualunque tipo pu esse re necessario l uso di parentesi tonde come nell esempio seguente in cui si vuole emettere il risultato del coseno di zero 10 PRINT COS 0 313 6 2 INPUT INPUT invito variabile variabile
12. e Ricerca del K 1 esimo elemento di una lista Si tratta di una funzione di libreria di Sche me denominata list ref in pratica l indice k viene usato in modo da indicare il primo elemento con il numero zero define list ref x k si limita a restituire il primo elemento ottenuto dalla funzione list tail car list tail x k e Scansione di una lista in modo da restituire un altra lista contenente i valori restituiti dalla chiamata di una funzione data per ogni elemento della lista Si tratta di una semplificazione della funzione di libreria map in questo caso con la possibilit di indicare una sola lista di valori di partenza define mapl f x i f la funzione da applicare agli elementi della lista x if null x la lista vuota e restituisce un altra lista vuota altrimenti compone la lista da restituire cons car x mapl f cdr x e Descrizione della funzione di libreria append define append x y if null x se la lista x vuota restituisce la lista y y altrimenti costruisce la lista in modo ricorsivo cons car x append cdr x y e Descrizione della funzione di libreria reverse define reverse x if null x se la lista x vuota non c nulla da invertire a altrimenti compone l inversione con una chiamata ricorsiva append reverse cdr x list car x Scheme liste e vettori 349
13. La funzione index cerca la stringa indicata come secondo parametro nella stringa indicata come primo cominciando da sinistra Se trova la corrispondenza restituisce la posizione iniziale di questa altrimenti restituisce zero index Tizio zio L espressione mostrata come esempio restituisce il valore tre corrispondente al primo carattere in cui si ottiene la corrispondenza della stringa zio in Tizio length stringa La funzione length restituisce la lunghezza della stringa fornita come parametro oppure in sua mancanza la lunghezza di 0 ovvero del record attuale Si osservino gli esempi length Tizio AWK introduzione 3607 Restituisce il valore cinque dal momento che la stringa composta da cinque caratteri length 10 5 Dal momento che il parametro della funzione un espressione numerica prima calcola il valore di questa espressione ottenendo il numero 50 quindi lo trasforma in stringa e restituisce il valore due In pratica il numero 50 espresso in stringa lungo due caratteri match stringa regexp La funzione match cerca una corrispondenza per l espressione regolare fornita come secon do parametro con la stringa che appare come primo parametro L espressione regolare dovrebbe poter essere fornita in forma costante senza che questo fatto venga inteso come un confronto implicito con il record attuale
14. 323 2 3 1 Costanti data orario Le costanti che rappresentano informazioni data orario sono espresse come le stringhe delimitate tra apici Il sistema DBMS potrebbe ammettere pi forme differenti per l inserimento di queste ma i modi pi comuni dovrebbero essere quelli espressi dagli esempi seguenti 1999 12 31 12 31 1999 31 12 1999 Questi tre esempi rappresentano la stessa data il 31 dicembre 1999 Per una questione di unifor mit dovrebbe essere preferibile il primo di questi formati corrispondente allo stile ISO 8601 Anche gli orari che si vedono sotto sono aderenti allo stile ISO 8601 in particolare per il fat to che il fuso orario viene indicato attraverso lo scostamento dal tempo universale invece che attraverso una parola chiave che definisca il fuso dell ora locale 112 30 50 1 00 112 30 50 10 123305507 12 30 Il primo di questa serie di esempi rappresenta un orario composto da ore minuti e secondi oltre all indicazione dello scostamento dal tempo universale per ottenere il tempo universale deve essere sottratta un ora Il secondo esempio mostra un orario composto da ore minuti secondi e centesimi di secondo Il terzo e il quarto sono rappresentazioni normali in particolare nell ultimo stata omessa l indicazione dei secondi 1999 12 31 12305041007 C1999 12 31 12 30 50 L07 3646 Introduzione a SQL 1 999 12 31 12730750 999 12 34 12 30 Gli esempi mostrano la ra
15. 315 2 Fasi di preparazione La predisposizione di un programma per Gettext potrebbe essere fatta in modo pi o meno au tomatico attraverso strumenti specifici oppure si pu procedere in modo pi semplice anche se pi oneroso dal punto di vista del tempo impiegato Qui si intende mostrare questo modo pi semplice per permettere al lettore di comprendere il concetto La documentazione di Gettext di per s molto dettagliata Per prima cosa il sorgente C deve essere predisposto attraverso l inclusione di alcuni file di intestazione quindi le stringhe vengono inglobate dalla funzione gettext Quello che segue il classico programma che visualizza un messaggio ed esce si suppone che si tratti del file ciao include lt stdio h gt int main Ecco come deve essere trasformato printf Hello world n include lt stdio h gt include lt libintl h gt include lt locale h gt define PACKAGE ciao define LOCALEDIR var tmp GNU GPL 3556 Gettext introduzione 3557 int main setlocale LC_ALL bindtextdomain PACKAGE LOCALEDIR textdomain PACKAGE printf gettext Hello world n Le funzioni bindtextdomain e textdomain utilizzano come argomenti delle macro co stanti manifeste in modo da generalizzare il funzionamento e rendere esterna la definizio ne di queste componenti A parte questi particolari si nota che print f non ha
16. Come si vede dal modello sintattico la funzione Lambda relativamente semplice il primo argomento un blocco contenente l elenco dei nomi locali dei parametri formali gli argomenti successivi sono le espressioni che costituiscono il corpo della funzione Non si dichiara il nome della funzione dal momento che lambda restituisce la funzione stessa che verr identificata ammesso che lo si voglia fare dalla variabile a cui questa viene assegnata 3488 Scheme struttura del programma e campo di azione All inizio del corpo delle espressioni che descrivono il contenuto della funzione che si dichiara si possono inserire delle dichiarazioni ulteriori attraverso la funzione define Sotto vengono proposti alcuni esempi che dovrebbero lasciare intendere in quante situazioni si pu utilizzare una dichiarazione di funzione attraverso Lambda dichiara la variabile f e la inizializza temporaneamente al valore zero define 0 assegna a f una funzione che esegue la somma dei suoi due argomenti set f lambda x y x y calcola la somma tra 4 e 5 restituendo 9 4 5 L esempio che appare sopra mostra in che modo si possa dichiarare una funzione in qualunque situazione in cui si pu assegnare un valore a una variabile dichiara direttamente la funzione f define f inizializza f con una funzione che esegue la somma dei suoi due argomenti lambda x y corpo de
17. printf comando Utilizzando l operatore gt si ridirigono i dati verso un file che viene azzerato inizialmente oppure viene creato per l occasione con l operatore gt gt si accodano dati a un file gi esistente con l operatore si inviano dati allo standard input di un altro comando importante osservare che i file e i comandi in questione vanno indicati in una stringa Si osservino gli esempi seguenti annota il secondo campo nel file tmp prova print 2 gt tmp prova accoda il secondo campo nel file tmp prova print 2 gt gt tmp prova definisce un comando per riordinare i dati e salvarli nel file tmp prova comando sort gt tmp prova seleziona alcuni campi e poi invia al comando di riordino print 2 4 5 comando 319 4 3 Strutture di controllo di flusso Il linguaggio AWK offre alcune strutture di controllo di flusso comuni agli altri linguaggi di programmazione In particolare come nel linguaggio C possibile raggruppare alcune istruzioni delimitandole con le parentesi graffe Le strutture di controllo permettono di sottoporre l esecuzione di una parte di codice alla veri fica di una condizione oppure permettono di eseguire dei cicli sempre sotto il controllo di una condizione La parte di codice che viene sottoposta a questo controllo pu essere un istruzione singola oppure un gruppo di istruzioni Nel secondo caso necessar
18. Rappresenta una sequenza indeterminata di caratteri La presenza di valori indeterminati impone la presenza di operatori di confronto in grado di determinarne l esistenza La tabella 323 7 riassume gli operatori ammissibili in questi casi Tabella 323 7 Espressioni di verifica dei valori indeterminati Operatori Descrizione espressione IS NULL Restituisce Vero se l espressione genera un risultato indeterminato espressione IS NOT NULL Restituisce Vero se l espressione non genera un risultato indeterminato Infine occorre considerare una categoria particolare di espressioni che permettono di verificare l appartenenza di un valore a un intervallo o a un elenco di valori La tabella 323 8 riassume gli operatori utilizzabili Tabella 323 8 Espressioni per la verifica dell appartenenza di un valore a un intervallo o a un elenco Operatori e operandi Descrizione opl IN elenco Vero se il primo operando contenuto nell elenco opl NOT IN elenco Vero se il primo operando non contenuto nell elenco opl BETWEEN op2 AND op3 Vero se il primo operando compreso tra il secondo e il terzo opl NOT BETWEEN op2 AND op3 Vero se il primo operando non compreso nell intervallo 323 4 Tabelle SQL tratta le relazioni attraverso il modello tabellare di conseguenza si adegua tutta la sua filosofia e il modo di esprimere i concetti nella sua documentazione Le tabelle di SQL vengono definite
19. do lt i y set i i y set z z 1 f Inizio del programma define x 0 define y 0 define z 0 display Inserisci il set x read newline display Inserisci il set Y read set z dividi x y display x display newline primo numero intero positivo secondo numero intero positivo display y display display z I In alternativa si pu modificare la funzione dividi in modo che il ciclo do gestisca la dichiarazione e il decremento della variabile i Per la precisione la variabile z non pu essere dichiarata nello stesso modo perch serve anche al di fuori del ciclo define dividi x y define z 0 do i x i y lt i y set z z 1 3506 Scheme esempi di programmazione 310 1 4 Elevamento a potenza Il problema dell elevamento a potenza tra due numeri positivi attraverso la moltiplicazione stato descritto nella sezione 282 2 4 F potenzal scm Eleva a potenza I i potenza lt x gt lt y gt define potenza x y define z 1 define i 1 do gt i y set zZ z x set i i 1 Inizio del programma define x 0 define y 0 define z 0 display Inserisci il primo numero intero positivo set x read newline display Inserisci il secondo numero intero positivo set y read
20. molto importante anche la possibilit di definire degli intervalli che stata saltata volutamente nella descrizione precedente di queste espressioni 316 4 Corrispondenza con un elemento di collazione Se si hanno difficolt a indicare dei caratteri in un espressione tra parentesi quadre potrebbe essere opportuno indicarli attraverso l elemento di collazione corrispondente Supponendo che nella localizzazione utilizzata esista l elemento di collazione identificato dal simbolo di col lazione lt a gt mancando la possibilit di usare il carattere corrispondente questo si potrebbe esprimere nella forma a In generale possibile indicare un carattere singolo all interno dei delimitatori e J come se fosse un elemento di collazione Per esempio a perfettamente uguale all espressione a In questo modo si pu usare la tecnica di rappresentazione degli elementi di collazione quando il contesto rende difficile l indicazione di qualche carattere Espressioni regolari standard 3577 necessario ribadire che il simbolo di collazione pu apparire solo all interno di un espressione tra parentesi quadre Per fare un esempio pratico trovandoci in una localizzazione adatta volendo scrivere un espressione regolare che corrisponda alla sottostringa sch len non potendo rap presentare il carattere a si dovrebbe scrivere sch a len dove
21. rappresenta effettivamente l elenco di tutti i nomi delle colonne della tabella Movimenti Quando si utilizzano funzioni di questo tipo occorre considerare che l elaborazione si riferisce alla tabella virtuale generata dopo la selezione posta da WHERE La funzione COUNT pu essere descritta attraverso la sintassi seguente COUNT COUNT DISTINCT ALL lista_colonne Utilizzando la forma gi vista quella dell asterisco si ottiene solo il numero delle righe della tabella L opzione DISTINCT seguita da una lista di nomi di colonne fa in modo che venga no contate le righe contenenti valori differenti per quel gruppo di colonne L opzione ALL implicita quando non si usa DISTINCT e indica semplicemente di contare tutte le righe Introduzione a SQL 3659 Il conteggio delle righe esclude in ogni caso quelle in cui il contenuto di tutte le colonne selezionate indefinito NULL Le altre funzioni aggreganti non prevedono l asterisco perch fanno riferimento a un espressione che genera un risultato per ogni riga ottenuta dalla selezione SUM DISTINCT ALL espressione MAX DISTINCT ALL espressione MIN DISTINCT ALL espressione AVG DISTINCT ALL espressione In linea di massima per tutti questi tipi di funzioni aggreganti l espressione deve generare un risultato numerico sul quale calcolare la sommat
22. 322 3 2 Ridenominazione degli attributi L elaborazione dei dati contenuti in una relazione pu avvenire previa modifica dei nomi di alcuni attributi La modifica dei nomi genera di fatto una nuova relazione temporanea per il tempo necessario a eseguire l elaborazione conclusiva Le situazioni in cui la ridenominazione degli attributi pu essere conveniente possono essere varie Nel caso delle operazioni sugli insiemi visti nella sezione precedente la ridenominazione pu rendere compatibili relazioni i cui attributi pur essendo compatibili hanno nomi differenti 322 3 3 Selezione proiezione e join La selezione e la proiezione sono operazioni che si eseguono su una sola relazione e generano una relazione che contiene una porzione dei dati di quella di origine La selezione permette di estrarre alcune tuple dalla relazione mentre la proiezione estrae parte degli attribuiti di tutte le tuple Il primo caso quello della selezione non richiede considerazioni particolari mentre la proiezione ha delle implicazioni importanti Attraverso la proiezione utilizzando solo parte degli attributi si genera una relazione in cui si potrebbero perdere delle tuple a causa della possibilit che risultino dei doppioni Per esempio si consideri la relazione mostrata nella figura 322 4 Introduzione ai DBMS 3637 Figura 322 4 Relazione Utenti UID Nominativo Cognome Nome Ufficio Utenti LIRICA DIRSI III A IZ A EEA
23. Bywater BASIC 313 1 1 Numerazione delle righe La caratteristica tipica di un programma Basic quella di avere le righe numerate Infatti non gestendo procedure e funzioni l unico modo per accedere a una subroutine quella di fare ri ferimento alla riga in cui questa inizia In pratica le istruzioni iniziano con un numero di riga progressivo seguito da almeno uno spazio quindi continuano con l istruzione vera e propria 110 PRINT ciao a tutti 120 PRINT come va Si pu intendere che questa dipendenza dalla numerazione delle righe costituisca poi un proble ma per il programmatore perch il cambiamento di questa numerazione implica la perdita dei riferimenti alle subroutine 313 1 2 Istruzioni Le istruzioni Basic oltre al fatto di iniziare con il numero di riga non hanno altre caratteristi che particolari Generalmente utilizzano una riga e non richiedono la conclusione finale con un qualche simbolo di interpunzione E interessante notare invece che i commenti vanno espressi con l istruzione REM seguita da qualcosa che poi viene ignorato e che le righe vuote non sono ammissibili in generale anche se iniziano regolarmente con il numero di riga La natura del linguaggio Basic tale per cui le istruzioni e i nomi delle variabili dovrebbero essere espressi sempre utilizzando le sole lettere maiuscole 313 1 3 Esecuzione di un programma L esecuzione di un programma Basic dipende dal modo stabilito
24. INSENSITIVE serve a stabilire che il risultato dell inter rogazione che si scandisce attraverso il cursore non deve essere sensibile alle variazioni dei dati originali la parola chiave SCROLL indica che possibile estrarre pi righe simultaneamente attraverso il cursore DECLARE Mio_cursore CURSOR FOR SELECT Presenze Giorno Presenze Ingresso Presenze Uscita Indirizzi Cognome Indirizzi Nome FROM Presenze Indirizzi WHERE Presenze Codice Indirizzi Codice L esempio mostra la dichiarazione del cursore Mio_cursore abbinato alla selezione delle colonne composte dal collegamento di due tabelle Presenze e Indirizzi dove le righe devono avere lo stesso numero di codice Per attivare questo cursore lo si deve aprire come nell esempio seguente OPEN Mio_cursore 323 11 2 Scansione La scansione di un interrogazione inserita in un cursore avviene attraverso l istruzione FETCH Il suo scopo quello di estrarre una riga alla volta in base a una posizione relativa o assoluta al e ETCH NEXT PRIOR FIRST LAST ABSOLUTE RELATIVE n FROM cursore INTO variabile L Le parole chiave NEXT PRIOR FIRST LAST permettono rispettivamente di ottenere la ri ga successiva quella precedente la prima e l ultima Le parole chiave ABSOLUTE e RELATIVE sono seguite da un numero corrispondente alla
25. Zz al termine restituisce il valore contenuto nella variabile z indicazione del primo argomento W indicazione del secondo argomento A 307 3 Ricorsione Si intuisce la possibilit di Scheme di scrivere funzioni ricorsive Non dovrebbe essere difficile arrivare a questo risultato senza spiegazioni particolari L esempio seguente mostra il calcolo del fattoriale attraverso una funzione ricorsiva define fattoriale n i n 0 then 1 else n fattoriale n 1 Si intuisce che una funzione senza nome come nel caso di quella dichiarata con Lambda senza assegnarla a una variabile non pu essere resa ricorsiva a meno di definire una sotto funzione ricorsiva al suo interno L esempio seguente una variante di quello precedente in cui viene utilizzata una dichiarazione lambda define fattoriale lambda n if n 0 then 1 else n fattoriale n 1 307 4 let let e letrec Le funzioni let let e Letrec hanno lo scopo di circoscrivere un ambiente all interno del quale pu essere inserita una serie indefinita di espressioni istruzioni prima delle quali vengono dichiarate delle variabili il cui campo di azione locale rispetto a quell ambito let variabile inizializzazione corpo let variabile inizializzazione corpo letrec variabile inizializzazione corpo 3490 Sc
26. array Considerato che per AWK l eliminazione di un array precisamente l eliminazione di tutti i suoi elementi si potrebbe fare anche come viene mostrato nello schema seguente for variabile in array delete array variabile 3614 AWK funzioni e array 320 2 4 Indici numerici e indici nulli Gli indici di un array AWK sono delle stringhe quindi se si usano dei numeri questi vengono convertiti in stringa utilizzando la stringa di formato contenuta nella variabile lt CONVEMT Finch si usano indici numerici interi non sorgono problemi nel momento in cui si utilizzano valori non interi la conversione pu risentire di un troncamento o di un approssimazione derivata dalla conversione In altri termini due indici numerici differenti potrebbero puntare di fatto allo stesso elemento perch la trasformazione in stringa li rende uguali L indice di un array potrebbe essere anche una variabile mai usata prima In tal caso la variabile contiene la stringa nulla Nel caso in cui questa variabile venga poi trattata in modo numerico incrementando o decrementando il suo valore per creare e fare riferimento a elementi dell array che si vogliono raggiungere con indici pseudo numerici bisogna tenere presente che esiste anche l elemento con indice Se si tenta di raggiungerlo con l indice 0 si fallisce nell intento 1 rigal n 0 n END for i n 1 i gt
27. da considerare come un tipo speciale di stringa l espressione regolare costante Questa una stringa delimitata all inizio e alla fine da una barra obliqua normale Per esempio ciao un espressione regolare che corrisponde alla sottostringa ciao Anche le espressioni regolari costanti ammettono l uso di sequenze di escape e precisamente le stesse che si possono usare per le stringhe In generale un espressione regolare costante pu essere usata alla destra di un espressione di comparazione in cui si utilizza l operatore o t Nelle altre situazioni salvo i pochi casi in cui un espressione regolare costante pu essere indicata come parametro di una funzione AWK sottintende che questa esprima la comparazione con il record attuale ovvero con 0 319 3 2 Espressioni regolari Le espressioni regolari di AWK sono quelle estese ovvero quelle definite da POSIX come ERE Tuttavia la grammatica effettiva di queste dipende dalla realizzazione dell interprete particolare di cui si dispone In generale dovrebbero essere disponibili gli operatori riassunti nella tabella tenendo presente che le espressioni regolari di AWK ammettono la presenza di sequenze di escape per rappresentare caratteri che non potrebbero essere indicati altrimenti la tabella 319 2 Tabella 319 3 Elenco degli operatori standard delle espressioni regolari estese Operatore Descrizione Protegge il carattere seg
28. do i 0 i 1 gt i z display elemento display i Scheme esempi di programmazione 3511 display vector set vettore i read newline display Inserire il valore da cercare set x read newline set i ricerca vettore x 0 z 1 display Il valore cercato si trova nell elemento display i newline Esiste anche una soluzione ricorsiva che viene mostrata di seguito define ricerca vettore x a zZ if gt a z La corrispondenza non stata trovata if x vector ref vettore a ricerca vettore x a 1 z 310 2 2 Ricerca binaria Il problema della ricerca binaria all interno di un array stato descritto nella sezione 282 3 2 F ricerca_binarial scm Ricerca Binaria ricerca lt vettore gt lt x gt lt ele inf gt lt ele sup gt define ricerca vettore x a zZ define m truncate a z 2 if or lt ma gt m z Non restano elementi da controllare l elemento cercato non c sil if lt x vector ref vettore m Si ripete la ricerca nella parte inferiore ricerca vettore x a m 1 if gt x vector ref vettore m Si ripete la ricerca nella parte superiore ricerca vettore x m 1 z Se x uguale a vettore m l obiettivo stato trovato m 3512 Scheme esempi di programmazione i Inizio del programma define DIM 100 define vettore ma
29. il carattere predefinito e che la parola chiave BOTH anche predefinita SELECT LIRIM Cigg f t f Restituisce la stringa Ciao SELECT RTRIM Clag r Restituisce la stringa Ciao PostgreSQL il linguaggio 3695 325 4 Esempi comuni Nelle sezioni seguenti vengono mostrati alcuni esempi comuni di utilizzo del linguaggio SQL limitato alle possibilit di PostgreSQL La sintassi non viene descritta salvo quando la differenza tra quella standard e quella di PostgreSQL importante Negli esempi si fa riferimento frequentemente a una tabella di indirizzi il cui contenuto visibile nella figura 325 1 Figura 325 1 La tabella Indirizzi Codice Cognome Nome Indirizzo Telefono usata in molti esempi del capitolo Indirizzi Codice Cognome Nome Indirizzo Telefono J a a a 1 Pallino Pinco Via Biglie 1 0222 222222 2 Tizi Tizio Via Tazi 5 0558 555555 3 Cai Caio Via Caini 1 10888 888888 4 Semproni Sempronio Via Sempi 7 10999 999999 325 4 1 Creazione di una tabella La tabella di esempio mostrata nella figura325 1 potrebbe essere creata nel modo seguente CREATE TABLE Indirizzi Codice integer Cognome char 40 Nome char 40 Indirizzo varchar 60 Telefono varchar 40 Quando si inseriscono i valori per una riga pu capitare che venga omesso l inserimento di alcune c
30. per ricostruire le relazioni che compongono la base di dati la base di dati stessa deve es sere ricreata manualmente Tanto per chiarire subito il senso della cosa se si utilizza pg_dump nel modo seguente pg _dump mio_db gt mio_db dump si ottiene il file di testo mio_db dump Questo file va verificato ricercando la presenza even tuale di segnalazioni di errore che vengono generate in presenza di dati che non possono essere riprodotti fedelmente eventualmente il file pu anche essere modificato se si conosce la sintassi dei comandi che vengono inseriti in questo script Per fare in modo che le relazioni della base di dati vengano ricreate e caricate si pu utilizzare psql nel modo seguente psql e mio_db lt mio_db dump Alcune opzioni d In condizioni normali pg_dump salva i dati delle relazioni le tabella secondo l SQL in una forma compatibile con il comando COPY che per non compatibile con lo standard SQL Con l opzione d utilizza il comando INSERT tradizionale D Come con l opzione d con l aggiunta dell indicazione degli attributi le colonne secondo P SQL in cui vanno inseriti i dati In pratica questa opzione permette di generare uno script pi preciso e dettagliato f file Permette di definire un file diverso dallo standard output che si vuole generare con il risultato dell elaborazione
31. 2 HECTOR MALOT SENZA FAMIGLIA x 1 2 DRAMMATICO 2 14000 1990 vio biblioteca gt insert into libri n_inv autore titolo gt Ccollocazione soggetto cod_ed prezzo anno_ed nvio biblioteca gt values 3 LOUISE MAY ALCOTT gt PICCOLE DONNE CRESCONO X 1 3 ROMANTICO 1 10000 11991 mio biblioteca gt insert into libri n_inv autore titolo gt Ccollocazione soggetto cod_ed prezzo anno_ed nvio biblioteca gt values 4 MARY E MAPES DODGE gt PATTINI D ARGENTO XxX 1 4 FANTASTICO 2 13000 1987 Invio A questo punto se si inseriscono i dati nella tabella prestiti ci si pu trovare nella situa zione di avere a prestito lo stesso libro pi volte contemporaneamente Naturalmente si riesce a sperimentare facilmente tale situazione con qualche prova Per esempio se viene digitato biblioteca gt insert into prestiti n_inv cod ut data p vio Le funzioni e i trigger in PostgreSQL un esercitazione didattica 3729 biblioteca gt values 2 3 2001 1 1 mio si inserisce una riga sulla tabella prestiti Se si digita ancora biblioteca gt insert into prestiti n_inv cod ut data p Ivio biblioteca gt values 2 1 2001 1 1 mvio ci si trova con un libro che dato a prestito all utente di codice 3 e contemporaneamente al
32. Modulo il resto della divisione tra il primo e il secondo operando Eleva il primo operando alla potenza del secondo Calcola la radice quadrata dell operando Calcola il seno dell operando Calcola il coseno dell operando Calcola la tangente dell operando Calcola l arcotangente dell operando Calcola il logaritmo naturale dell operando Calcola il valore assoluto dell operando Le parentesi tonde possono essere utilizzate per indicare esplicitamente l ordine dell elaborazio ne delle espressioni 313 3 2 Espressioni stringa L unico tipo di espressione che restituisce una stringa a partire da stringhe il concatenamento che si ottiene con l operatore stringa_l stringa_2 313 3 3 Espressioni logiche Le espressioni logiche si possono realizzare a partire da dati numerici da dati stringa e dal risultato di altre espressioni logiche La tabella 313 2 mostra gli operatori fondamentali Tabella 313 2 Elenco degli operatori utilizzabili nelle espressioni logiche Le metavariabili indicate rappresentano gli operandi e la loro posizione Operatore e operandi Descrizione opl 0p2 I due numeri o le due stringhe sono uguali opl lt 0p2 Il primo operando minore del secondo opl gt op2 Il primo operando maggiore del secondo opl lt op2 Il primo operando minore o uguale al secondo opl gt op2 Il primo operando maggiore o uguale al secondo op
33. Nome Indirizzo Telefono VALUES 01 Pallino PINGO y Via Biglie 1 10222 222222 In questo stesso modo si pu evitare di compilare il contenuto di una colonna particolare in dicando espressamente solo le colonne che si vogliono fornire le altre colonne riceveranno il valore predefinito o NULL in mancanza d altro Nell esempio seguente viene indicato solo il codice e il nominativo INSERT INTO Indirizzi Codice Cognome Nome VALUES 01 Pallino Pinco i 325 4 4 Eliminazione di una tabella Una tabella pu essere eliminata completamente attraverso l istruzione DROP L esempio seguente elimina la tabella degli indirizzi degli esempi precedenti DROP TABLE Indirizzi PostgreSQL il linguaggio 3697 325 4 5 Interrogazioni semplici L esempio seguente emette tutto il contenuto della tabella degli indirizzi gi vista negli esempi precedenti SELECT FROM Indirizzi Seguendo l esempio fatto in precedenza si dovrebbe ottenere l elenco riportato sotto equivalente a tutto il contenuto della tabella codice cognome nome indirizzo telefono L Pallino Pinco Via Biglie I 0222 222222 2 Tizi Tizio Via Tazi 5 0555 Db5555 3 Cal Caio Via Caini 1 0888 888888 4 Semproni Sempronio Via Sempi 7 0999 999999 Per ottenere un elenco ordinato in base al cognome e al nome in caso di ambiguit lo stesso comando si completa nel modo seguente SELECT FROM Indi
34. PostgreSQL HOWTO lt http www linux org Hocsdp howto HOWTO INDEX howtos htm gt Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capisoto I2O PostgreSQL il linguaggio PostgreSQL un ORDBMS ovvero un Object relational DBMS cio un DBMS relazionale a oggetti La sua documentazione utilizza terminologie differenti a seconda delle preferenze dei rispettivi autori In generale si possono distinguere tre modalit riferite a tre punti di vista la programmazione a oggetti la teoria generale sui DBMS e il linguaggio SQL Le equivalenze dei termini sono riassunte dall elenco seguente classi istanze attributi e tipi di dati contenibili negli attributi e relazioni tuple attributi e domini e tabelle righe colonne e tipi di dati contenibili nelle colonne In questo capitolo si intende usare la terminologia tradizionale dei DBMS relazioni corrispon dente a quella delle prime versioni del linguaggio SQL tabelle righe colonne Nello stesso modo la sintassi delle istruzioni interrogazioni SQL che vengono mostrate limitata alle fun zionalit pi semplici sempre compatibilmente con le possibilit di PostgreSQL Per una visione pi estesa delle funzionalit SQL di PostgreSQL conviene consultare la sua documentazione a cominciare da sql 1 per finire con il manuale dell utente che contiene diversi esempi molto utili 325 1 Prima di iniziare Per far
35. REVOKE La prima permette a un gruppo di utenti di eseguire operazioni determinate la seconda toglie dei privilegi GRANT ALL SELECT INSERT UPDATE DELETE RULE ON tabella TO PUBLIC GROUP gruppo utente REVOKE ALL SELECT INSERT UPDATE DELETE RULE ON tabella L FROM PUBLIC GROUP gruppo utente La sintassi delle due istruzioni simile basta fare attenzione a cambiare la parola chiave TO con FROM I gruppi e gli utenti sono nomi che fanno riferimento a quanto registrato all interno del DBMS solo che attualmente potrebbe non essere possibile la gestione dei gruppi L esempio seguente toglie a tutti gli utenti PUBLIC tutti i privilegi sulle tabelle delle presenze e degli indirizzi successivamente vengono ripristinati tutti i privilegi solo per l utente daniele PostgreSQL il linguaggio 3701 REVOKE ALL ON Presenze Indirizzi FROM PUBLIC GRANT ALL ON Presenze Indirizzi TO daniele 325 5 Controllo delle transazioni PostgreSQL ha una gestione delle transazioni leggermente diversa da quanto stabilito dall SQL Per la precisione occorre dichiarare esplicitamente l inizio di una transazione con l istruzione BEGIN w EGIN WORK L esempio seguente mostra il caso in cui si voglia isolare l inserimento di una riga nella tabella Indirizzi all int
36. Tabella 309 1 Elenco di alcune funzioni per l apertura e la chiusura dei file oltre che per il controllo dei flussi di file predefiniti Funzione Descrizione open input file str_nome_ file Apre il file nominato e restituisce la porta in ingresso open output file str_nome_file Apre il file nominato e restituisce la porta in uscita port oggetto Vero se si tratta di una porta input port oggetto Vero se si tratta di una porta in ingresso output port oggetto Vero se si tratta di una porta in uscita close input port porta Chiude la porta in ingresso close output port porta Chiude la porta in uscita define porta i open input file mio_file port porta i gt t output port porta i gt f input port porta i gt t close input port porta i In condizioni normali sono sempre disponibili una porta in ingresso e una in uscita in modo predefinito Si tratta generalmente di standard input e standard output Questi flussi di file prede finiti potrebbero essere diretti verso altri file Tuttavia questo non viene mostrato eventualmente si pu approfondire il problema leggendo R RS 309 2 Ingresso dei dati L ingresso dei dati ovvero la lettura avviene attraverso due funzioni fondamentali read char e read La prima legge un carattere alla volta la seconda interpreta ci che legge in forma di dati Scheme In pratica read legge ogni volta ci che riesce a i
37. cgi bin www pgsql interne pgsql REMOTE_ADDR 127 0 0 1 QUERY_STRING PATH_TRANSLATED var www interne pgsql PATH_INFO interne pgsql HTTP_USER_AGENT Lynx 2 8 lrel 2 libwww FM 2 14 HTTP_HOST localhost GATEWAY_INTERFACE CGI 1 1 DOCUMENT_ROOT var www T EE 327 3 2 Strutture di controllo Attraverso le istruzioni di WWW SQL si possono realizzare le strutture di controllo che sono comuni nei linguaggi di programmazione E prevista la struttura condizionale e il ciclo iterativo lt SQL IF espressione gt lt SOL ELSIF espressione gt lt 1 sot ELSE gt lt SQL ENDIF gt La struttura condizionale che si vede nello schema permette di delimitare uno spazio da filtrare in base all esito delle espressioni condizionali coinvolte Per esempio lt SQL IF NUM_ROWS 10 gt lt P gt Il numero delle righe uguale a 10 lt P gt lt SQL ELSE gt lt P gt Il numero delle righe non corrisponde a quanto previsto lt P gt lt SQL ENDIF gt in questo modo si condiziona la visualizzazione di una frase in base al fatto che la variabile NUM_ROWS contenga o meno il valore 10 E importante osservare che l espressione usata come condizione di controllo potrebbe resti tuire un risultato numerico e non logico In tal caso lo zero corrisponde a Falso mentre qualunque altro valore corrisponde a Vero
38. esempio i campi definiti attraverso i modelli gli elementi FORM si traducono in variabili per WWW SQL Per verificare il funzionamento di questo programma supponendo di avere colloca to il file variabili pgsqgl nella directory iniziale dei documenti HTML offer ti dal servente HTTP basta puntare il navigatore sull indirizzo http localhost cgi bin www pgsqgl variabili pgsqgl sempre ammettendo che l indirizzo http localhost cgi bin www pgsqgl corrisponda all avvio del programma CGI che costituisce in pratica WWW SQL Quello che si ottiene dovrebbe essere un modulo HTML molto semplice dove si pu inserire un testo Inviando il modulo compilato dovrebbe essere restituito lo stesso modulo con la stringa iniziale aggiornata dove viene mostrato che stato recepito il dato inserito nella figura 327 1 si vede che era stata inviata la stringa Saluti Figura 327 1 Risultato dell interpretazione del file variabili pgsql attraverso WWW SQL J 167 Bookmarks Location http localhost cgi bin mw pgsql variabili pgsql var Saluti l Back Forward Reload Home Search Netscape Print Security Stap dial Esempio sul funzionamento delle variabili con WWW SQL var Saluti Submit Query I sorgenti di WWW SQL possono essere compilati in modo differente In particolare si pu distinguere tra due tipi di scansione il tipo vecchio non permette l uso di istruzioni che preve dono un i
39. hanoi lt n anelli gt lt piolo iniziale gt lt piolo finale gt define hanoi n pl p2 f gt n 0 begin hanoi n 1 pl 6 pl p2 begin display Muovi l anello display n display dal piolo display pl display display p2 newline hanoi n 1 6 pl p2 p2 F Inizio del programma define n 0 Scheme esempi di programmazione 3515 define pl 0 define p2 0 display Inserisci il numero di pioli set n read newline display Inserisci il numero del piolo iniziale da 1 a 3 set pl read newline display Inserisci il numero del piolo finale da 1 a 3 set p2 read newline hanoi n pl p2 310 3 3 Quicksort L algoritmo del Quicksort stato descritto nella sezione 282 4 3 F qsortl scm Quicksort Dichiara il vettore a cui faranno riferimento tutte le funzioni Il vettore non viene passato alle funzioni tra gli argomenti per semplificare le funzioni soprattutto nel caso di part che deve restituire anche un altro valore define DIM 100 define vettor make vector DIM inverti elementi lt indice 1 gt lt indice 2 gt define inverti elementi a z define scambio 0 set scambio vector ref vettore a vector set vettore a vector ref vettore z vector set vettore z scambio part lt ele inf gt lt ele sup gt d
40. vicino possibile all SQL trascurando quasi tutto il resto In queste sezioni si descrivono alcune istruzioni particolari che si ritengono importanti da un punto di vista operativo bench siano estranee all SQL 325 7 1 Importazione ed esportazione dei dati PostgreSQL fornisce un istruzione speciale per permettere l importazione e l esportazione dei dati da e verso un file di testo normale Si tratta di CoPY la cui sintassi semplificata quella seguente PostgreSQL il linguaggio 3703 COPY tabella FROM file STDIN USING DELIMITERS delimitatore COPY tabella TO file STDOUT USING DELIMITERS delimitatore Nella prima delle due forme si importano i dati da un file o dallo standard input nel secondo si esportano verso un file o verso lo standard output Ogni riga del file di testo corrisponde a una riga della tabella gli attributi sono separa ti da un carattere di delimitazione che in mancanza della definizione tramite la clausola USING DELIMITERS un carattere di tabulazione In ogni caso anche se si specifica tale clau sola pu trattarsi solo di un carattere In pratica ogni riga organizzata secondo lo schema seguente attributo_1xattributo_2x xattributo_N Nello schema x rappresenta il carattere di delimitazione che come si pu vedere non viene inserito all inizio e alla fine Quando l istruzione COPY viene u
41. y Nell ambito dei cicli possibile usare l istruzione break per interrompere il ciclo con un uscita forzata 311 4 Utilizzo di BC L interprete del linguaggio BC l eseguibile bc che si utilizza secondo la sintassi seguente bc 1 filebc L interprete legge ed esegue tutti i file indicati come argomento della riga di comando alla fine legge lo standard input L interprete termina di funzionare quando il flusso dello standard input termina oppure quando incontra l istruzione quit In questo modo un programma che si deve concludere deve contenere l istruzione quit oppure deve essere fornito attraverso lo standard input 3530 BC L opzione 1 serve a ottenere da BC la disponibilit delle funzioni di libreria standard elencate nella tabella 311 5 inoltre la variabile scale viene impostata al valore 20 mentre in condizioni normali il suo valore predefinito zero Lo standard POSIX non prevede l uso del simbolo come commento per cui non possibile realizzare degli script se non sfruttando delle estensioni di realizzazioni speciali In pratica ci possono essere realizzazioni di BC che consentono di scrivere programmi che iniziano in modo simile a quello seguente eventualmente con l aggiunta dell opzione 1 a cui poi si aggiungono i permessi di esecuzione ma ci non possibile se si vogliono scrivere programmi standard po
42. 1 t q lt inizio gt lt fine gt Prima riempire l array 1l1 poi chiamare la funzione q 312 3 4 Permutazioni L algoritmo ricorsivo delle permutazioni stato descritto nella sezione 282 4 4 permuta b i v lt lista gt lt inizio gt lt fine gt define v 1 1 a z auto j for j a j lt z j 1031 return p lt lista gt lt inizio gt lt fine gt lt max_array gt define p 1 1 a z d auto k auto t if z a gt 1 Inizia un ciclo di scambi tra l ultimo elemento uno degli altri contenuti nel segmento di array 4 for k z k gt a k Scambia i valori s 1 k 1 K 1 z 1 z s Esegue una chiamata ricorsiva per permutare un segmento pi piccolo dell array 7 t p 1 a z 1 d Scambia i valori s 1 k 1 K 1 z 1 z s return Visualizza la situazione attuale dell array n t v 1 0 d return BC esempi di programmazione 3541 Permutazioni t p lt lista gt lt inizio gt lt fine gt lt max_array gt Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org 3542 BC esempi di programmazione 313 Basic 313 1 313 2 313 3 313 4 313 5 313 6 314 Basic 314 1 314 2 314 3 314 4 314 5 314 6 314 7 Parte Ixi Basic MEO ilaria Struttura fondamentale e o E E E a E E E EATE
43. 2000 2003 Daniele Giacomini daniele swlibero org Capitoto 23 Introduzione a SQL SQL l acronimo di Structured query language e identifica un linguaggio di interrogazione ge stione per basi di dati relazionali Le sue origini risalgono alla fine degli anni 1970 e questo giustifica la sua sintassi prolissa e verbale tipica dei linguaggi dell epoca come il COBOL Allo stato attuale data la sua evoluzione e standardizzazione l SQL rappresenta un riferimento fondamentale per la gestione di una base di dati relazionale A parte il significato originale dell acronimo SQL un linguaggio completo per la gestione di una base di dati relazionale includendo le funzionalit di un DDL Data description language di un DML Data manipulation language e di un DCL Data control language Data l et e la conseguente evoluzione di questo linguaggio si sono definiti nel tempo diversi livelli di standard I pi importanti sono SQL89 e SQL92 noti anche come SQL2 e SQL3 Il livello SQL3 ancora in corso di definizione L aderenza dei vari sistemi DBMS allo standard SQL2 non mai completa e perfetta per questo sono stati definiti dei sottolivelli di questo standard per definire il grado di compatibilit di un DBMS Si tratta di entry SQL intermediate SQL e full SQL Si pu intendere che il primo sia il livello di compatibilit minima e l ultimo rappresenti la compatibilit totale Lo standard di fatto rappresentato
44. 323 6 4 Condizioni La condizione che esprime la selezione delle righe pu essere composta come si vuole purch il risultato sia di tipo logico e i dati a cui si fa riferimento provengano dalle tabelle di partenza Quindi si possono usare anche altri operatori di confronto funzioni e operatori booleani bene ricordare che il valore indefinito rappresentato da NULL diverso da qualunque altro valore compreso un altro valore indefinito Per verificare che un valore sia o non sia indefinito si deve usare l operatore IS NULL oppure IS NOT NULL 323 6 5 Aggregazioni L aggregazione una forma di interrogazione attraverso cui si ottengono risultati riepilogativi del contenuto di una tabella in forma di tabella contenente una sola riga Per questo si utilizzano delle funzioni speciali al posto dell espressione che esprime le colonne del risultato Queste fun zioni restituiscono un solo valore e come tali concorrono a creare un unica riga Le funzioni di aggregazione sono COUNT SUM MAX MIN AVG Per intendere il problema si osservi l esempio seguente SELECT COUNT FROM Movimenti WHERE lt synellipsis gt In questo caso quello che si ottiene solo il numero di righe della tabella Movimenti che soddisfano la condizione posta dopo la parola chiave WHERE qui non stata indicata L asteri sco posto come parametro della funzione COUNT
45. 3365 Perl binmode 3354 Perl chdir 3353 Perl chmod 3349 Perl chomp 3354 Perl chop 3355 Perl chown 3350 Perl chr 3366 Perl close 3355 Perl cos 3365 Perl defined 3367 3564 Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl Perl W 0X 6 00 delete die 3370 do 3370 eof 3355 espressioni 3313 espressioni regolar eval l 337 exec 3362 exists 3368 exit 3371 exp 3365 fent 1 3356 fild 3339 filend 3356 flock 3356 fox 3318 foreac getd 3357 glob 3353 hasti 3311 hex 336 i fi 3316 int ioctl keys kill link liste 3307 log lstat m 3332 mkdir 3 oct open operato ord pips 3359 POP print printf push a 43331 qg 3331 qw 3332 qx 3331 read 3359 readlink 3350 rename 3351 require 03371 rmdir 3354 s 3333 scalar 3367 SS HE w U ON w oN W W Ni 4 r WU WI UW NIO NO a ISEE Q I W W N VI S Jia i W S W 0S W D
46. Debian viene usato l utente apposito www data questo nome particolare non pu essere in serito negli utenti di PostgreSQL a causa del fatto che contiene un trattino per cui occorre agire in modo differente ma questo verr descritto in seguito in occasione della descrizione dell istruzione lt SQL CONNECT gt 327 3 Linguaggio di WWW SQL WWW SQL interpreta un file HTML alla ricerca di istruzioni secondo il formato schematizzato di seguito lt SQL comando argomento gt Come si vede queste istruzioni assomigliano a dei commenti per l HTML ma anche se non lo sono realmente di solito i navigatori ignorano dei marcatori di questo tipo Tuttavia questa si pu considerare solo come una misura di sicurezza dal momento che questi file non dovrebbero essere raggiunti direttamente ma solo attraverso l intermediazione di WWW SQL Le istruzioni di WWW SQL rappresentano un linguaggio di programmazione semplice ma ef ficace per lo scopo che ci si prefigge Si osservi che il comando una parola chiave che rap presenta il tipo di azione che si intende svolgere inoltre gli argomenti possono essere presenti o meno in funzione del comando Gli argomenti di un comando possono essere racchiusi tra apici doppi all interno di queste stringhe si possono indicare delle variabili da espandere e si possono usare anche delle sequenze di escape per rappresentare simboli speciali
47. Gli operatori logici sono elencati nella tabella 323 5 3648 Introduzione a SQL Tabella 323 5 Elenco degli operatori logici Operatore e operandi Descrizione NOT op Inverte il risultato logico dell operando opl AND op2 Vero se entrambi gli operandi restituiscono il valore Vero opl OR op2 Vero se almeno uno degli operandi restituisce il valore Vero Il meccanismo di confronto tra due operandi numerici evidente mentre pu essere meno evi dente con le stringhe di caratteri Per la precisione il confronto tra due stringhe avviene senza tenere conto degli spazi finali per cui le stringhe ciao e ciao dovrebbero risultare uguali attraverso il confronto di uguaglianza con l operatore Con le stringhe tuttavia si possono eseguire dei confronti basati su modelli attraverso gli ope ratori IS LIKE e IS NOT LIKE Il modello pu contenere dei metacaratteri rappresentati dal trattino basso _ che rappresenta un carattere qualsiasi e dal simbolo di percentuale che rappresenta una sequenza qualsiasi di caratteri La tabella 323 6 riassume quanto affermato Tabella 323 6 Espressioni sulle stringhe di caratteri Espressioni e modelli Descrizione stringa IS LIKE modello Restituisce Vero se il modello corrisponde alla stringa stringa IS NOT LIKE modello Restituisce Vero se il modello non corrisponde alla stringa _ Rappresenta un carattere qualsiasi
48. Nella sezione precedente si accennato alle chiavi Questo concetto merita un po di attenzione In precedenza stato affermato che una relazione contiene una raccolta di tuple che contano per il loro contenuto e non per la loro posizione In questo senso non ammissibile una relazione contenente due tuple identiche Una chiave di una relazione un gruppo di attributi che permette di identificare univocamente le tuple in essa contenute per questo tali attributi devono contenere dati differenti per ogni tupla Stabilendo quali attributi devono costituire una chiave per una certa relazione si comprende intuitivamente che questi attributi non possono mai contenere un valore indeterminato Nella definizione di relazioni collegate attraverso dei riferimenti l oggetto di questi riferimen ti deve essere una chiave per la relazione di destinazione Diversamente non si otterrebbe un riferimento univoco a una tupla particolare 322 3 Gestione delle relazioni Prima di affrontare l utilizzo pratico di una base di dati relazionale attraverso un linguaggio di manipolazione dei dati opportuno considerare a livello teorico alcuni tipi di operazioni che si possono eseguire con le relazioni Inizialmente stato affermato che una relazione un insieme di tuple Dalla teoria degli insiemi derivano molte delle operazioni che riguardano le relazioni 322 3 1 Unione intersezione e differenza Quando si maneggiano relazioni contenenti
49. a si sostituisce al carattere 4 avendo definito che il simbolo di collazione per questo lt a gt 316 4 2 Corrispondenza con una classe di equivalenza Nell ambito della sequenza di collazione della localizzazione che si usa alcuni elementi possono essere considerati equivalenti ai fini dell ordinamento Questi elementi costituiscono una classe di equivalenza All interno di un espressione tra parentesi quadre per fare riferimento a un ele mento qualunque di una certa classe di equivalenza basta indicare uno di questi tra i delimitatori e Per esempio se si suppone che le lettere e ed appartengono alla stessa classe di equivalenza per indicare indifferentemente una di queste basta la notazione e 3 Per indicare effettivamente una classe di equivalenza in un espressione regolare occorre ri cordare che questa va inserita all interno di un espressione tra parentesi quadre In pratica l espressione regolare che corrisponde indifferentemente alla stringa e o e Si osservi che in alternativa si poteva scrivere anche e 316 4 3 Corrispondenza con una classe di caratteri Nell ambito della localizzazione sono definiti alcuni gruppi di caratteri attraverso l uso di parole chiave standard Per esempio alpha definisce l insieme delle lettere alfabetiche digit de finisce l insieme dell
50. aiutooooo ecc mentre l espressione regolare aiuto pu corrispondere alla sottostringa aiut oppure aiuto Le espressioni regolari BRE e ERE permettono l utilizzo di un altra forma pi precisa e generalizzata per esprimere la ripetizione di qualcosa Nel caso di BRE si usano i modelli n n n m mentre nel caso di ERE si usano forme equivalenti senza le barre oblique inverse n n n m Si tenga presente che n rappresenta un numero non negativo mentre m se utilizzato deve essere un numero maggiore di n Nella prima delle tre forme si intende indicare la ripetizione di n volte esatte l elemento pre cedente nella seconda si intendono almeno n volte nella terza si intendono tante ripetizioni da n am In generale per garantire che un espressione regolare sia portabile occorre che il limite massimo rappresentato da m non superi 255 316 4 Espressioni tra parentesi quadre Si accennato all uso delle espressioni tra parentesi quadre per indicare la scelta tra un elenco di caratteri o tra tutti i caratteri esclusi quelli dell elenco Un espressione del genere si traduce sempre nella corrispondenza con un carattere singolo All interno di un espressione del genere si possono utilizzare forme particolari per indicare un carattere attraverso un simbolo di collazione una classe di equivalenza oppure attraverso una classe di caratteri
51. cerca all interno della stringa fornita come ultimo parametro oppure all interno del record attuale tutte le corrispondenze con l espressione regolare indicata come primo parametro Quindi sostituisce quelle corrispondenze con la stringa fornita come secondo parametro In pratica si tratta di una variante di sub in cui la sostituzione avviene in modo globale Valgono tutte le altre considerazioni fatte sulla funzione sub substr stringa inizio lunghezza La funzione substr restituisce una sottostringa di quanto fornito come primo parametro prendendo ci che inizia dalla posizione del secondo parametro per una lunghezza pari al terzo parametro oppure fino alla fine della stringa di partenza substr ciao come stai 6 4 L espressione dell esempio restituisce la stringa come tolower stringa La funzione tolower restituisce la stringa fornita come parametro trasformata utilizzando solo lettere minuscole toupper stringa La funzione toupper restituisce la stringa fornita come parametro trasformata utilizzando solo lettere maiuscole 319 5 Variabili predefinite La tabella 319 10 riepiloga le variabili predefinite principali di AWK In particolare sono state escluse quelle che riguardano la gestione degli array Tabella 319 10 Elenco delle variabili predefinite principali di AWK Variabile Descrizi
52. dell avvio dell interprete attraverso l opzione v che gi stata descritta I nomi delle variabili sono sensibili alla differenza che c tra la collezione alfabetica maiusco la e quella minuscola In particolare si pu osservare che convenzionalmente i nomi di tutte le variabili predefinite sono espressi con lettere maiuscole mentre le variabili definite all interno del programma tendono a essere espresse utilizzando prevalentemente lettere minuscole All interno di un programma AWK i riferimenti ai campi del record attuale si fanno attraverso la forma n dove n rappresenta il campo n esimo Il riferimento a un campo pu essere otte nuto anche utilizzando il risultato di un espressione quando questa preceduta dal dollaro In particolare ammissibile anche l assegnamento di un valore a un campo per quanto questo sia una pratica sconsigliabile dal momento che questo fatto non ha alcun significato nei confronti dei dati originali 319 3 4 Operazioni e operatori Gli operatori usati per le espressioni numeriche sono pi o meno gli stessi del linguaggio C Per quanto riguarda le stringhe previsto il concatenamento che si ottiene senza alcun operatore esplicito affiancando variabili o costanti stringa Inoltre dovendo gestire le espressioni regolari si aggiungono due operatori speciali per il confronto di queste con delle stringhe La tabella 319 5 raccoglie l elenco degli operatori dispo
53. display Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capitolo 310 scheme esempi di programmazione Questo capitolo raccoglie solo alcuni esempi di programmazione in parte gi descritti in altri capitoli Lo scopo di questi esempi solo didattico utilizzando forme non ottimizzate per la velocit di esecuzione 310 1 Problemi elementari di programmazione LL LL 3502 310 1 1 Somma tra due numeri positivi L LL 3502 310 1 2 Moltiplicazione di due numeri positivi attraverso la somma 3504 310 1 3 Divisione intera tra due numeri positivi LL Li 3505 310 1 4 Elevamento a potenza 0 3506 310 1 5 Radice quadrata aiar 3507 310 1 6 Fattomale sciita papale 3507 310 1 7 Massimo comune divisore L LL 3508 310 1 8 INUTMErOprmMO iii eine o 3509 310 2 SCAnisione di Array iii ciare ria ai rane 3510 310 2 1 Ricerca seQuenziale i e ar 3510 310 2 2 Ricerca binaria sirio oraria 3511 310 3 Algoritmi tradizionali LL 3512 310 3 1 BUBDIESOtt ini da 3512 310 3 2 Torre di HaDol vs cirio riaprire 3514 3103 3 QUICKSOTT 2 eil 3515 310 34 Permmutazioni iis ina 3517 310 1 Problemi elementari di programmazione In questa sezione vengono mostrati alcuni algoritmi elementari portati in Scheme Per la spiega zione degli algoritmi se non sono gi conosciuti occorre leggere quanto riportato nel capito
54. fa riferimento a un azione predefinita che in pratica fa s che venga emessa attraverso lo standard output ogni riga che supera il criterio di selezione Praticamente come se venisse usata l azione print Per essere precisi dal momento che in AWK il concetto di predefinito pu riguardare diversi livelli si tratta dell azione print 0 In pratica se si unisse il criterio di selezione predefinito e l azione predefinita si avrebbe 1 print che riemette attraverso lo standard output tutti i record che legge dai file in ingresso Bisogna ricordare per che almeno una delle due parti deve essere indicata esplicitamente o il criterio di selezione o l azione 319 1 2 Campi Si accennato al fatto che il testo analizzato da un programma AWK viene visto generalmente come qualcosa composto da record suddivisi in campi I record vengono individuati in base a un codice che li separa corrispondente di solito al codice di interruzione di riga per cui si ottiene l equivalenza tra record e righe I campi sono separati in modo analogo attraverso un altro codice opportuno Eccezionalmente quando il codice indicato per individuare la suddivisione in campi lt SP gt cio lo spazio normale diventa indifferente la quantit di spazi utilizzati tra un campo e l altro inoltre possibile utilizzare anche i caratteri di tabulazione Se per il codice che definisce la fine di un record e l inizio di que
55. l opzione e oppure a uno script vero e proprio Elaborazioni banali sed prova txt Legge il file prova txt e lo riemette tale e quale dal momento che non stato specificata alcuna direttiva per il programma di elaborazione sed n p prova txt Si ottiene lo stesso risultato dell esempio precedente perch prima viene usata l opzione n con cui si inibisce la riemissione predefinita delle righe lette ma poi si specifica una direttiva contenente il comando p applicato a tutte le righe del flusso in ingresso Selezione delle righe sed n 1 10 p prova txt Emette solo le prime 10 righe del file sed 81 d prova txt Elimina le righe pi lunghe di 80 caratteri sed d prova txt Elimina tutte le righe vuote sed INIZIO FINE d prova txt Elimina tutte le righe comprese negli intervalli delimitati da righe contenenti esclusivamente la stringa INIZIO e FINE sed n INIZIO FINE p prova txt Emette tutte le righe comprese negli intervalli delimitati da righe contenenti esclusivamente la stringa INIZIO e FINE SED introduzione 3591 sostituzione del contenuto delle righe sed s andato venuto prova txt Sostituisce in ogni riga la prima occorrenza della stringa andato con la stringa venuto sed s andato venuto g prova txt Sostituisce tutte le
56. l utente di codice 1 il che assurdo assumendo il fatto che un libro non possa essere preso a prestito da pi utenti contemporaneamente La soluzione proposta utilizza le funzioni e i trigger di PostgreSQL Per la realizzazione delle funzioni si mostra qui l uso del linguaggio Plpgsgl che prima di poter essere utilizzato deve essere associato esplicitamente Questa operazione richiede l uso del comando createlang come si vede nell esempio seguente postgres createlang plpgsql h localhost d biblioteca gt pglib usr lib pgsql In questo caso si intende che il file pipgsgl so sia contenuto nella directory usr lib pgsql 328 2 1 Le funzioni Successivamente si passa alla scrittura della funzione che viene mostrata sotto con l aiuto di un programma per la creazione e la modifica di file di testo come VI per esempio generando il file funzione_controlla plpgsql l create function inserisci prestito char 5 char 5 date returns boolean as declare numero_inventario alias for 1 codice_utente alias for 2 data_prestito alias for 3 data_restituzione date prestito record begin data_restituzione 2050 1 1 select into prestito from prestiti where n_inv numero_inventario and data_r data_restituzione if found then raise exception Wil libro gi a prestito return SETte else insert into prestiti n_inv cod_ut data_p values numero_inventario codice
57. opl op2 Esponente il primo operando elevato alla potenza del secondo x valore Assegna alla variabile il valore alla destra espressione Le parentesi tonde richiedono la precedenza nella valutazione dell espressione opl op2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 Alcune realizzazioni tradizionali di BC non pi standard secondo POSIX consentono l uso di operatori simili al tipo op descritti nella tabella ma invertiti nell ordine 0p Ci crea un problema nella valutazione di alcuni tipi di espressione per esempio a 1 pu significare l assegnamento del valore 1 alla variabile a oppure l assegnamento di a 1 Per evitare ambiguit in queste condizioni conviene usare le parentesi a 1 3528 BC Tabella 311 2 Elenco degli operatori di assegnamento obsoleti che qualche realizzazione di BC potrebbe usare ancora Operatore e operandi Descrizione opl 0p2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 Gli operatori di confronto determinano la relazione tra due operandi e possono essere utilizzati esclusivamente in alcuni contesti precisi Vengono elencati gli operatori disponibili nella tabella 311 3 Tabella Elenco degli operatori di confronto Le metavariabili indicate rappresentan
58. ovvero si considera un confronto con il record attuale AWK introduzione 3601 319 3 5 Conversione tra stringhe e numeri Come gi stato descritto AWK gestisce solo due tipi di dati stringhe e numeri reali In base al contesto i numeri vengono convertiti in stringhe e viceversa solitamente in modo abbastanza tra sparente In particolare una stringa che non possa essere interpretata come un numero equivale a Zero In generale il concatenamento di stringhe impone una trasformazione in stringa mentre l uso di operatori aritmetici impone una trasformazione in numero Si osservi l esempio uno 1 due 2 uno due 3 Si tratta di tre istruzioni in sequenza dove le prime due assegnano un valore numerico ad al trettante variabili mentre l ultima fa qualcosa di incredibile concatena le due variabili che di conseguenza vengono trattate come stringhe generando la stringa 12 quindi la stringa viene riconvertita in numero a causa dell operatore che richiede la somma con il numero tre Alla fine il risultato dell ultima espressione il numero 15 La conversione da numero a stringa banale quando si tratta di numeri interi dal momento che il risultato una stringa composta dalle stesse cifre numeriche che si utilizzano per rappresentare un numero intero Al contrario in presenza di numeri con valori decimali entra in gioco una conversione per mezzo della funzione sprint f equival
59. preferito e puntare sull indirizzo http localhost cgi bin www pgsqg1 Ma non ba sta dal momento che il programma in questione ha bisogno di interpretare un file HTML speciale dal quale restituisce poi un risultato Per capire come funziona la cosa prima ancora di avere af frontato lo studio del linguaggio specifico di WWW SQL si pu provare con un file HTML nor male si supponga di avere a disposizione il file http localhost index html per fare in modo che WWW SQL lo analizzi basta indicare PURI http localhost cgi bin www pgsgl index htm1 Il risultato identico all originale ma per arrivare a questo si passa attraverso l elaborazione del programma CGI dimostrando cos il suo funzionamento Volendo se il proprio programma servente HTTP Apache possibile rendere la cosa pi ele gante attraverso una configurazione opportuna del file srm conf si veda a questo proposi to il capitolo su Apache Per esempio si potrebbe fare in modo che i file che terminano con l estensione pgsql vengano elaborati automaticamente attraverso il programma CGI in questione Action www pgsql cgi bin www pgsql AddHandler www pgsql pgsql Tuttavia occorre considerare che alcune installazioni di Apache sono state predisposte in mo do da impedire l utilizzazione dell istruzione Action Se dopo le modifiche di questo file il servizio di Apache non si riavvia ci potrebbe essere un sintomo di questo problema
60. s input type TYPE INPUT_FILE REPORT_FILE n Gettext introduzione 3561 n s help n y s version n va Check for HTTP and FTP URI inside a text n aTa Options n help display this help and exit n version display version information and exit n input type TYPE define the input type n standard input is a simple text file n m html sgml input is a typical SGML file n Li texi texinfo input is a Texinfo source file n Xn Arguments n URE aihh INPUT_FILE the input file n Xn REPORT_FILE a file that is generated with the reported n A errors n program_name program_ name program_name Ma questo non viene riconosciuto da xgettext che riesce a prelevare solo la prima riga urichk 55 c format msgid Usage s input type TYPE INPUT_FILE REPORT_FILE n msgstr In queste situazioni eccezionali occorre intervenire a mano nel file PO sia la prima volta che si crea il file sia tutte le volte successive in cui lo si aggiorna 315 5 1 Alleviare gli inconvenienti di un modulo in pi Scrivere un programma Perl che faccia uso di Gettext significa costringere a installare il modulo Perl gettext Purtroppo una delle cose che complicano di pi l utilizzo di programmi Perl sono i moduli aggiuntivi necessari che devono essere installati perfettamente come previsto Questo potrebbe sembrare un problema secondario invece non l
61. senso di questa si tenta almeno di mostrare la cosa in modo intuitivo Nello stesso modo in cui si pu dichiarare una variabile si pu dichiarare una funzione In questo senso tali dichiarazioni possono anche essere ricorsive all interno di una funzione letrec Viene mostrato un esempio tratto da R RS letrec dichiara le variabili che in realt sono funzioni predicati dichiara la funzione pari pari lambda n if zero n il numero pari t altrimenti si prova a vedere se dispari dispari n 1 dichiara la funzione dispari dispari lambda n if zero n il numero dispari altrimenti si prova a vedere se pari pari n 1 fine della dichiarazione delle variabili verifica che il numero 88 pari chiamando la funzione pari dichiarata all inizio pari 88 Scheme struttura del programma e campo di azione 3491 la chiamata restituisce il valore t e di conseguenza questo il valore restituiti da tutto Le variabili pari e dispari vengono inizializzate assegnando loro una funzione dichia rata con Lambda e il loro scopo quello di verificare che l argomento sia rispettivamente un numero pari o dispari pari 2 gt t dispari 2 gt f Tali variabili e di conseguenza queste funzioni hanno effetto solo nell ambito della dichiara zione letrec al termine della quale diventano se
62. si potrebbero indicare gli indici come nell esempio seguente dove si assegna un valore all elemento ideale 1 10 elenco 1 s 10 123 La lettera s che si vede solo una stringa scelta opportunamente in modo che l indice che si ottiene non si possa confondere con qualcosa che non si vuole In questo caso l indice reale la stringa 1s10 AWK offre un supporto a questo tipo di finzione multidimensionale Per farlo esiste la variabile SUBSEP che viene usata per definire il carattere di separazione Questo carattere generalmente lt FS gt che si esprime in esadecimale come 1C s e in ottale come 34s corrispondente per AWK alla sequenza di escape 034 Quando si fa riferimento a un elemento di un array in cui l indice sia composto da una serie di valori separati con una virgola AWK intende che questi valori debbano essere concatenati con il contenuto della variabile SUBSEP Per esempio elenco 1 10 123 come se fosse stato scritto elenco l SUBSEP 10 123 In generale non opportuno modificare il valore di questa variabile dal momento che si tratta di un carattere decisamente inusuale allo scopo di garantire che non si possano formare degli indici uguali per elementi che dovrebbero essere differenti Per verificare se un elemento di un array del genere esiste si pu utilizzare lo stesso trucco indice_1 indice_2 in array Appunti di informatica libera 20
63. standard output Si tratta di due funzioni che per possono essere usate anche in forma di ope ratori print e printf La prima di queste due permette l emissione di una o pi stringhe mentre la seconda permette di definire una stringa in base a un formato indicato emettendone poi il risultato In pratica printf si comporta in modo analogo alla funzione omonima del linguaggio C print print espressione_l L espressione_ n print espressione_1 E espressione_1 a Quelli che si vedono sono gli schemi sintattici della funzione o istruzione print Se non vengono specificati degli argomenti ovvero dei parametri si ottiene l emissione del testo del record attuale Se invece vengono indicati degli argomenti questi vengono emessi in sequenza inserendo tra luno e l altro il carattere definito dalla variabile OFS Output field separator che di solito corrisponde a uno spazio normale In tutti i casi il testo emesso da print termina con l inserimento del carattere contenuto nella variabile ORS Output record separator che di solito corrisponde al codice di interruzione di riga In altri termini nel primo caso viene emessa la stringa corrispondente al concatenamento 0 ORS nel secondo e nel terzo viene emessa la stringa corrispondente al concatenamento espressione_1 OFS espressione_2 OFS espressionen ORS printf stringa di formato esp
64. x i set j x j i if 30 set np f set i i 1 np i Inizio del programma define x 0 display Inserisci un numero intero positivo set x read i primo x display un numero primo display Non un numero primo i 3510 Scheme esempi di programmazione newline 310 2 Scansione di array In questa sezione vengono mostrati alcuni algoritmi legati alla scansione degli array portati in Scheme dove vengono usati i vettori di questo linguaggio Per la spiegazione degli algoritmi se non sono gi conosciuti occorre leggere quanto riportato nel capitolo 310 2 1 Ricerca sequenziale Il problema della ricerca sequenziale all interno di un array stato descritto nella sezione 282 3 1 ricerca_sequenzialel scm Ricerca Sequenziale ricerca lt vettore gt lt x gt lt ele inf gt lt ele sup gt i leccare Loi ili a define ricerca vettore x a z define risultato 1 do i i 1 gt 1 z if x vector ref vettore i set risultato i risultato Inizio del programma define DIM 100 define vettore make vector DIM define x 0 define i 0 define z 0 display Inserire la quantit di elementi display DIM display al massimo set z read newline if gt z DIM set z DIM display Inserire i valori del vettore newline
65. 0 1080 LET I X 1090 IF I lt Y THEN GOTO 1130 1100 LET I I Y 1110 LET Z Z 1 1120 GOTO 1090 1130 PRINT X Y Z 1140 END 1150 REM 314 4 Elevamento a potenza Il problema dell elevamento a potenza tra due numeri positivi attraverso la moltiplicazione stato descritto nella sezione 282 2 4 1000 RE 1010 REM exp bas 1020 REM Eleva a potenza 1030 RE 1040 RE 1050 INPUT Inserisci il primo valore X 1060 INPUT Inserisci il secondo valore Y 1070 LET Z 1 1080 FOR I 1 TO Y 1090 LET Z Z X 1100 NEXT 1110 PRINT X Y Z 1120 END 1130 REM 314 5 Radice quadrata Il problema della radice quadrata stato descritto nella sezione 282 2 5 1000 RE 1010 REM radice bas 1020 REM Radice quadrata intera 1030 RE 1040 RE 1050 INPUT Inserisci il valore X 1060 LET Z 0 1070 LET T 0 1080 REM Inizio del ciclo di calcolo 1090 LET T Z Z 1100 IF T gt X THEN GOTO 1130 1110 LET Z Z 1 1120 GOTO 1080 1130 REM Riprende il flusso normale 1140 LET Z Z 1 1150 PRINT radq X Z 1160 END 1170 REM Basic esempi di programmazione 3553 314 6 Fattoriale Il problema del fattoriale stato descritto nella sezione 282 2 6 1000 RE 1010 REM fatt bas 1020 REM Fattoriale 1030 RE 1040 RE 1050 INPUT Inserisci il valore X 1060 LET Z X 1070 FOR I X 1 TO 1 ST
66. 0 i print rigali Si intuisce che il programma AWK che si vede nell esempio serva ad accumulare tutte le righe lette nell array riga quindi a scandire lo stesso array per emettere il testo di queste righe Se si osserva con attenzione di capisce che la prima riga non pu essere ottenuta Infatti la variabile n viene utilizzata subito la prima volta quando il suo contenuto iniziale la stringa nulla successivamente viene incrementata facendo s che quella stringa nulla venga intesa come uno zero ma intanto stato creato l elemento riga Alla fine della lettura di tutti 1 record viene scandito nuovamente l array trattandolo come se contenesse elementi da zero a n 1 Tuttavia dal momento che l elemento riga 0 non esiste perch al suo posto c invece riga che non viene raggiunto si perde la prima riga 320 2 5 Trasformare una stringa delimitata in un array E molto importante considerare la possibilit di convertire automaticamente una stringa in un array attraverso la funzione interna split split stringa array la separatore In pratica il primo parametro la stringa da suddividere il secondo l array da creare nel caso esista gi vengono eliminati tutti i suoi elementi il terzo il carattere o l espressione regolare che si utilizza per separare gli elementi all interno della lista Se non viene indicato
67. 2000 2003 Daniele Giacomini daniele swlibero org 3520 Scheme esempi di programmazione Parte lx BC linguaggio aritmetico a precisione arbitraria SII BC ilaele ae E 3522 311 1 Base di numerazione urr rrrr rreren 3522 311 2 Approssimazione iii ria cia a 3523 311 3 Linguaggio di programmazione errr 3524 3114 Utilizzo di BC snai tanta ira dedita Vida leda 3529 311 5 BC nella realizzazione GNU rerne 3530 311 6 Riferimenti A ii 3530 312 BC esempi di programmazione Li 3531 312 1 Problemi elementari di programmazione LL 3532 312 2 SCANSIONE di array siriana pa 3536 312 3 Algoritmi tradizionali 0 3537 3521 Capito O BC BC un interprete di un linguaggio aritmetico che fa parte della tradizione dei sistemi Unix tanto da essere codificato anche nello standard POSIX Come linguaggio non ha nulla di speciale ma la sua facilit di utilizzo in modo interattivo e la sua diffusione lo rendono molto comodo e utile L utilizzo pi conveniente di BC probabilmente quello a riga di comando come calcolatrice tenendo conto che questa sua caratteristica pu anche essere sfruttata utilmente all interno di script di shell L esempio seguente mostra un utilizzo interattivo per comprendere di cosa si tratta almeno a prima vista bcel Invio 255 63 3737 512 nvio 30737871360 Ctrl d Quello che si vede nell esempio la moltiplicazione di tr
68. 4 k Ec aaa WD AN AMOS O v aO NK WI WI un O W W oN O 3565 Perl scalare 3303 Perl seek 3360 Perl select 3360 Perl sin Perl sleep Perl splice 3 Perl sprintf Perl sqrt 3366 Perl stat Perl stringhe 3330 Perl subroutine 3322 Perl symlink Perl system Perl tell Perl time Perl times Perl tr A 3334 Perl umask 3364 Perl unless 3316 Perl unlink 3352 Perl unti 1 3317 Perl utime 03357 Perl variabili predefinite 3303 Perl warn 3371 Perl whild 3317 Perl y Perl x 3348 programmazione programmazione Java 3413 programmazione Perl 3301 programmazione pseudocodifica 3152 programmazione Scheme 3465 3485 3492 Quicksort 3162 3237 3293 3384 3453 3515 3539 ricerca binaria 3158 Scheme 3458 3465 3485 3492 3499 3502 kawarc scn 3461 p2crd 3248 CLASSPATH 3435 3460 P2CRC 3248 POSIXLY_CORREC W W Di W SS N O W w oy 0 U W n 8 W ON D 3566 Appunti di informatica libera 2003 01 01 Volume VI Linguaggi di programmazione specifici 3567 Appunti Linux Copyright 1997 2000 Daniele Giacomini Appunti di informatica libera Copyright 2000 2003 Daniele Giacomini Via Morganella Est 21 I 31050 Ponzano Veneto TV daniele swlibero org Le informazioni contenute in questa opera posson
69. 45e 10 123 45e 10 FLOAT n Come FLOAT REAL Come FLOAT DOUBLE PRECISION Come FLOAT DATE 31 12 1999 12 31 1999 1999 12 31 TIME 15 55 27 15 59 TIMESTAMP 1999 12 31 15 55 27 1999 12 31 15 55 274 1 INTERVAL INTERVAL 15 55 27 INTERVAL 15 HOUR 59 MINUTE INTERVAL 15 HOUR BOOLEAN T y yes it true 0 n no YE Y false In particolare le costanti stringa possono contenere delle sequenze di escape rappresentate da una barra obliqua inversa seguita da un simbolo La tabella 325 3 mostra le sequenze di escape tipiche Tabella 325 3 Sequenze di escape utilizzabili all interno delle stringhe di caratteri costanti Escape Significato n newline r return b backspace Y _ 3694 325 3 Funzioni PostgreSQL il linguaggio PostgreSQL come altri DBMS SQL offre una serie di funzioni che fanno parte dello standard SQL assieme ad altre non standard che per sono ampiamente diffuse e di grande utilit Le tabelle 325 4 e 325 5 ne riportano alcune Tabella 325 4 Funzioni SQL riconosciute da PostgreSQL Funzione Descrizione POSITION stringa_1 IN stringa_2 SUBSTRING stringa FROM n FOR m TRIM LEADINGITRAILING BOTH x FROM stringa Posizione di stringa_1 in stringa_2 Sottostringa da
70. Articoli Codice L interrogazione simultanea di pi tabelle si presta anche per elaborazioni della stessa tabella pi volte In tal caso diventa obbligatorio l uso degli alias Si osservi il caso seguente SELECT Indl Cognome Ind1l Nome FROM Indirizzi AS Indl Indirizzi AS Ind2 WHERE Indl Cognome Ind2 Cognome AND Indl Nome lt gt Ind2 Nome Il senso di questa interrogazione che utilizza la stessa tabella degli indirizzi per due volte con due alias differenti quello di ottenere l elenco delle persone che hanno lo stesso cognome avendo 3658 Introduzione a SQL per un nome differente Esiste anche un altra situazione in cui si ottiene l interrogazione simultanea di pi tabelle l unione Si tratta semplicemente di attaccare il risultato di un interrogazione su una tabella con quello di un altra tabella quando le colonne finali appartengono allo stesso tipo di dati Vv ELECT specificazione_della_colonna_1 specificazione_della_colonna_N FROM specificazione_della_tabella_1 specificazione_della_tabella_N WHERE condizione UNION SELECT specificazione_della_colonna_1 specificazione_della_colonna_N FROM specificazione_della_tabella_1 specificazione_della_tabella_N WHERE condizione Lo schema sintattico dovrebbe essere abbastanza esplicito si uniscono due istruzioni SELECT in un risultato unico attraverso la parola chiave UNION
71. Basi di dati concetti linguaggi e architetture McGraw Hill e James Hoffmann Introduction to Structured Query Language lt hitp www higheroft comPhigherofisgL_intro pd gt SQL Standard Home Page lt iitp Mvww jcc comPsgI_stnd himi gt SQL Reference Page ISO IEC 9075 1992 Database Language SQL lt www contrib andrew cmu edu shadow sql html gt lt www contrib andrew cmu edu shadow sql sq11992 txt gt Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capitato OLA PostgreSQL struttura e preparazione PostgreSQL un DBMS Data base management system relazionale esteso agli oggetti In questo capitolo si vuole introdurre al suo utilizzo e accennare alla sua struttura senza affrontare le particolarit del linguaggio di interrogazione Il nome lascia intendere che si tratti di un DBMS in grado di comprendere le istruzioni SQL anche se per il momento l aderenza a quello standard solo parziale 324 1 Struttura dei dati nel file system PostgreSQL a parte i programmi binari gli script e la documentazione colloca i file di gestio ne delle basi di dati a partire da una certa directory che nella documentazione originale viene definita PGDATA Questo il nome di una variabile di ambiente che pu essere utilizzato per informare i vari programmi di PostgreSQL della sua collocazione tuttavia di solito questo mec ca
72. ELEMOND SPA VIA ROMA 17 02 7820012 mio 3728 Le funzioni e i trigger in PostgreSQL un esercitazione didattica biblioteca gt insert into utenti cod ut nome cognome Stelefono indirizzo citta vio biblioteca gt values 1 LUCA BONALDO 0422 401582 gt VIA CORNARE 14 TREVISO nmvio biblioteca gt insert into utenti cod ut nome cognome Stelefono indirizzo citta vio biblioteca gt values 2 LUIGI GOBBO 049 4582270 gt VIA MANIN 72 PADOVA Invio biblioteca gt insert into utenti cod ut nome cognome Vtelefono indirizzo citta vio biblioteca gt values 3 SIMONE PRIAMO 0422 478791 gt VIALE M GRAPPA 1 TREVISO Invio biblioteca gt insert into utenti cod ut nome cognome Vtelefono indirizzo citta vio biblioteca gt values 4 MAURO MENEGAZZI 049 987756 gt VIA EVEREST 7 PADOVA Invio biblioteca gt insert into libri n_inv autore titolo gt collocazione soggetto cod_ed prezzo anno_ed nvio biblioteca gt values 1 STELLIO MARTELLI amp RACCONTI MITOLOGICI X 1 1 STORICO 1 7000 1992 nvio biblioteca gt insert into libri n_inv autore titolo gt Ccollocazione soggetto cod_ed prezzo anno_ed nvio biblioteca gt values
73. I file di questa si trovano all interno di pase template1l 324 1 1 Opzioni per la definizione della directory PGDATA attraverso la riga di comando Tutti i programmi che compongono il sistema di PostgreSQL che hanno la necessit di sapere dove si trovano i dati oltre al meccanismo della variabile di ambiente PGDATA permettono di indicare tale directory attraverso un opzione della riga di comando I programmi pi importanti precisamente postmaster e createdb riconoscono l opzione D Come si pu intuire l utilizzo di questa opzione o di un altra equivalente per gli altri programmi fa in modo che l indicazione della variabile PGDATA non abbia effetto PostgreSQL software libero con licenza speciale 3667 3668 PostgreSQL struttura e preparazione 324 1 2 Amministratore Una particolarit di PostgreSQL sta nella definizione dell amministratore di questo servizio In pratica potrebbe trattarsi di una persona diversa dall amministratore del sistema l utente root corrispondente di solito all utente postgres Quando la propria distribuzione GNU Linux gi predisposta per PostgreSQL l utente postgres dovrebbe gi essere stato previsto non importa il numero UID che gli sia sta to abbinato ma quasi sicuramente la parola d ordine dovrebbe essere impossibile come nell esempio seguente postgres 100 101 PostgreSQOL Server var lib pgsql bin
74. Importante mettere sempre la parentesi iniziale del gruppo dei parametri attaccata al nome della funzione stessa funzione elenco_parametri I parametri sono separati attraverso delle virgole tenendo conto che in linea di principio si pos sono omettere quelli finali si possono omettere tutti i parametri a partire da una certa posizione I parametri che non vengono forniti sono equivalenti a stringhe nulle in certi casi ci sono fun zioni predisposte per riconoscere la mancata indicazione di tali informazioni che cos gestiscono attribuendo valori predefiniti Come nel linguaggio C il passaggio dei parametri avviene per valore salvo eccezioni per cui i parametri in una chiamata possono essere delle espressioni pi o meno articolate che vengono valutate senza un ordine preciso prima della chiamata stessa Di seguito vengono descritte brevemente le funzioni interne predefinite di AWK In particolare le funzioni numeriche comuni sono elencate nella tabella 319 9 Tabella 319 9 Elenco delle funzioni numeriche principali Funzione Descrizione atan2 y x Arcotangente di y x in radianti cos x Coseno di x espresso in radianti exp x Funzione esponenziale e int x Parte intera di un numero reale log x Logaritmo naturale base e rand Numero casuale compreso tra zero e uno sin x Seno di x espresso in radianti sqrt x Radice quadrata di x index stringa sottostringa_cercata
75. La dichiarazione di una lista avviene nello stesso modo in cui si dichiara una variabile normale define variabile lista_costante Tuttavia occorre tenere presente che una lista pu essere interpretata come la chiamata di una funzione e come tale verrebbe intesa in questa situazione Per evitare che ci avvenga la si indica attraverso un espressione costante cio la si fa precedere da un apostrofo o la si inserisce in una funzione quote L esempio seguente dichiara la lista Lis composta dall elenco dei numeri interi da uno a sei define lis 1 2 3 4 5 6 In questo caso se la lista non venisse indicata con l apostrofo si otterrebbe la valutazione della lista stessa prima dell inizializzazione della variabile lis provocando un errore dal momento che l oggetto 1 uno non esiste 308 1 2 Caratteristiche esteriori di una lista Le caratteristiche esteriori di una lista sono semplicemente la lunghezza espressa in numero di elementi e il fatto che contengano o meno qualcosa Per verificare queste caratteristiche so no disponibili due funzioni null e length che richiedono come argomento una lista Si osservino gli esempi seguenti dichiara la lista lis define lis 1 2 3 4 5 6 verifica se la lista lis vuota null lis gt f calcola la lunghezza della lista length lis gt 6 Se fosse stata fornita la lista in modo letterale senza l
76. RUN RUNI Invio Ciao Mondo L esempio seguente genera lo stesso risultato di quello precedente ma con l uso di variabili 10 A Ciao 20 B Mondo 30 PRINT A B L esempio seguente genera lo stesso risultato di quello precedente ma con l uso del concatenamento di stringa 10 A Ciao 20 B Mondo 30 PRINT AS BS L esempio seguente mostra l uso di una costante e di una variabile numerica 10 A Ciao 20 B Mondo 30 N 1000 40 PRINT N volte A B Il risultato che si ottiene dovrebbe essere il seguente 1000 volte Ciao Mondo Basic introduzione 3549 313 5 Strutture di controllo del flusso Il Basic un linguaggio di programmazione molto povero dal punto di vista delle strutture di controllo In modo particolare sono assenti funzioni e procedure Per fare riferimenti a porzioni di codice occorre sempre indicare un numero di riga attraverso le istruzioni GOTO O GOSUB 313 5 1 GOTO GOTO riga Si tratta dell istruzione di salto incondizionato e senza ritorno In pratica l esecuzione del pro gramma prosegue dalla riga indicata come argomento perdendo ogni riferimento al punto di origine 313 5 2 GOSUB GOSUB riga Si tratta dell istruzione di salto incondizionato con ritorno L esecuzione del programma prose gue dalla riga indicata come argomento e quando poi viene incontrata l istruzione RETURN il progra
77. attribuito NULL corrispondente al valore indefinito La sintassi necessaria a creare una tabella contenente le indicazioni sui valori predefiniti da utilizzare la seguente 3650 Introduzione a SQL CREATE TABLE nome_tabella nome_colonna tipo DEFAULT espressione L L esempio seguente crea la stessa tabella gi vista nell esempio precedente specificando come valore predefinito per l indirizzo la stringa di caratteri sconosciuto CREATE TABLE Indirizzi Codice integer Cognome char 40 Nome char 40 Indirizzo varchar 60 DEFAULT sconosciuto Telefono varchar 40 323 4 3 Vincoli interni alla tabella Pu darsi che in certe situazioni determinati valori all interno di una riga non siano ammissibili a seconda del contesto a cui si riferisce la tabella I vincoli interni alla tabella sono quelli che possono essere risolti senza conoscere informazioni esterne alla tabella stessa Il vincolo pi semplice da esprimere quello di non ammissibilit dei valori indefiniti La sintassi seguente ne mostra il modo CREATE TABLE nome_tabella nome_colonna tipo NOT NULL L L esempio seguente crea la stessa tabella gi vista negli esempi precedenti specificando che il codice il cognome il nome e il telefono non possono essere indeterminati CREATE TABLE Indirizzi Codice integer NO
78. che altrimenti avrebbero un altro significato Le parole chiave che costituiscono le istruzioni di WWW SQL possono essere scritte indipen dentemente utilizzando lettere maiuscole o minuscole Inoltre lo spazio dopo il delimitatore iniziale lt e lo spazio prima del delimitatore finale gt sono facoltativi Naturalmente lo stesso discorso pu valere per un utente fittizio diverso realizzato appositamente per il controllo della gestione del servizio HTTP 3716 PostgreSQL accesso attraverso WWW SQL Per iniziare subito con un esempio che faccia capire la logica di funzionamento di WWW SQL si osservi il programma seguente rappresentato dal file variabili pgsql A HTML gt lt HEAD gt lt TITLE gt Esempio sul funzionamento delle variabili con WWW SQL lt TITLE gt lt HEAD gt BODY gt Hl gt Esempio sul funzionamento delle variabili con WWW SQL lt H1 gt A N lt P gt lt SQL PRINT var var gt lt P gt lt p gt lt FORM ACTION variabili pgsgl METHOD GET gt lt INPUT NAME var gt lt INPUT TYPE submit gt lt form gt lt p gt lt BODY gt L unica istruzione per WWW SQL lt SOL PRINT gt con la quale si vuole ottenere la vi sualizzazione di una stringa tra apici doppi Si osservi che var il riferimento alla variabile var che viene espanso come parte della valutazione della stringa Come si pu intuire leggendo l
79. dall interprete prescelto L inter prete tradizionale obbliga a caricare il programma con il comando LOAD e ad avviarlo attraverso il comando RUN Bywater BASIC GNU GPL 3544 Basic introduzione 3545 313 2 Interprete tradizionale L interprete Basic tradizionale una sorta di shell che riconosce una serie di comandi interni oltre alle istruzioni Basic vere e proprie In pratica attraverso l invito di questa shell si possono eseguire singole istruzioni Basic oppure comandi utili a gestire il file di un programma completo Per esempio avviando il Bywater BASIC si ottiene quanto segue bwbasic nvio bwBASIC In pratica bwBASIC rappresenta l invito L esempio seguente mostra l inserimento di alcune istruzioni Basic allo scopo di eseguire la moltiplicazione 6 7 DWBASIC A 6 nvio bWBASIC B 7 nvio bWBASIC C A BI Invio bwBASIC PRINT CIInvio 42 313 2 1 Comandi tipici dell interprete L interprete Basic tipico mette a disposizione alcuni comandi che risultano essenziali per la gestione di un programma Basic e LIST riga_iniziale riga_finale Elenca le righe del programma selezionate dagli intervalli indicati come argomento Se non viene indicato alcun argomento la visualizzazione viene fatta a partire dalla prima riga se viene indicata solo la riga iniziale la visualizzazione riguarda esclusivamente quella riga L esempio seguente serve a visualizz
80. dati nella tabella permette di leggere le righe in ordine in base a una certa colonna filtrando eventualmente le righe in base a una condizione Si stabilisce questo mettendo il nome di una colonna nella casella Sort field e mettendo l espressione della condizione di filtro nella casella Filter conditions se poi si seleziona il pulsante grafico ReLoap si riottiene il contenuto ordinato e filtrato in base alle preferenze indicate 326 4 Interrogazioni e viste possibile realizzare facilmente dei modelli di interrogazione e delle viste attraverso la selezione delle voci oveRIEs e virws Nel primo caso si tratta di interrogazioni SQL che vengono me morizzate da PgAccess e richiamate a piacere mentre nel secondo si tratta di viste vere e proprie A livello operativo con PgAccess le due cose sono praticamente identiche per cui si passa gene ralmente per la creazione di un interrogazione SQL che poi eventualmente si salva come vista La figura 326 6 mostra la definizione dell interrogazione Nominativi abbinata al comando SELECT Cognome Nome FROM Indirizzi scritto manualmente dall utilizzatore 3710 PostgreSQL accesso attraverso PgAccess Figura 326 6 Finestra per la creazione di un interrogazione Query name Nominativi _ Save this query as a view Save query definition Execute query Visual designer Close e Nome Cognome FROM Indirizzi Nell
81. del giorno 01 01 1999 e le eventuali antecedenti DELETE FROM Presenze WHERE Giorno lt 01 01 1999 3700 PostgreSQL il linguaggio 325 4 1 Creazione di una nuova tabella a partire da altre L esempio seguente crea la tabella mia_prova come risultato della fusione della tabella degli indirizzi e delle presenze come gi mostrato in un esempio precedente SELECT Presenze Giorno Presenze Ingresso Presenze Uscita Indirizzi Cognome Indirizzi Nome INTO TABLE mia_prova FROM Presenze Indirizzi WHERE Presenze Codice Indirizzi Codice 325 4 12 Inserimento in una tabella esistente L esempio seguente aggiunge alla tabella dello storico delle presenze le registrazioni vecchie che poi vengono cancellate INSERT INTO PresenzeStorico PresenzeStorico Codice PresenzeStorico Giorno PresenzeStorico Ingresso PresenzeStorico Uscita cp ELECT Presenze Codice Presenze Giorno Presenze Ingresso Presenze Uscita FROM Presenze WHERE Presenze Giorno lt 1999 01 01 DELETE FROM Presenze WHERE Giorno lt 1999 01 01 325 4 13 Controllare gli accessi a una tabella Quando si creano delle tabelle in una base di dati tutti gli altri utenti che sono stati registrati nel sistema del DBMS possono accedervi e fare le modifiche che vogliono Per controllare questi accessi l utente proprietario delle tabelle cio colui che le ha create pu usare le istruzioni GRANT e
82. di pg_dump h host Permette di specificare il nodo a cui connettersi per l interrogazione del servente Postgre SQL In pratica se l accesso consentito possibile scaricare una base di dati gestita presso un nodo remoto p porta Nel caso in cui postmaster sia in ascolto su una porta TCP diversa dal numero 5432 corrispondente al valore predefinito si pu specificare con questa opzione il numero corretto da utilizzare 5 Scarica soltanto la struttura delle relazioni senza occuparsi del loro contenuto In pratica serve per poter riprodurre vuote le tabelle SQL t nome_tabella Utilizzando questa opzione indicando il nome di una tabella SQL si ottiene lo scarico di quell unica tabella cu 3690 PostgreSQL struttura e preparazione Fa in modo che psql richieda il nominativo utente e la parola d ordine all utente prima di tentare la connessione L uso di questa opzione indispensabile quando il servente impone una forma di autenticazione definita attraverso la parola chiave password E Include le informazioni sui permessi e la propriet delle tabelle GRANT REVOKE 324 8 5 Copia spostamento e aggiornamento di tutte le basi di dati in Modo indipendente dalla piattaforma Per copiare o trasferire tutte le basi di dati del sistema di PostgreSQL si pu utilizzare pg_dumpall che in
83. di rectory bin l opzione in modo che il file stesso venga inteso correttamente come un programma di elaborazione nel secondo oltre a questo viene aggiunta l opzione n con la quale si inibisce l emissione predefinita delle righe dopo ogni ciclo di elaborazione Per quanto riguarda le direttive contenute nei file queste utilizzano una riga per ognuna dove le righe bianche o vuote vengono ignorate assieme ai commenti che iniziano con il simbolo I bene osservare che in uno script del genere non possibile fare riferimento alle variabili di ambiente SED introduzione 3587 direttiva_di_elaborazione direttiva_di_elaborazione Le direttive fornite attraverso la riga di comando sono solitamente istruzioni singole per cui volendo aggiungerne delle altre si utilizzano pi opzioni e sed e direttiva_di_elaborazione e direttiva_di_elaborazione file_in_ingresso Tuttavia di solito possibile indicare pi direttive con una sola opzione e separandole con un punto e virgola sed e direttiva_di_elaborazione direttiva_di_elaborazione file_in_ingresso L uso di pi direttive nella riga di comando con o senza il punto e virgola sconsigliabile in generale dal momento che dovendo scrivere un programma di elaborazione complesso prefe ribile usare un file trasformandolo eventualmente in uno script come stato mo
84. di righe La cancellazione di righe da una tabella un operazione molto semplice Richiede solo l in dicazione del nome della tabella e la condizione in base alla quale le righe devono essere cancellate DELETE FROM tabella WHERE condizione Se la condizione non viene indicata si cancellano tutte le righe 323 6 Interrogazioni di tabelle L interrogazione di una tabella l operazione con cui si ottengono i dati contenuti al suo interno in base a dei criteri di filtro determinati L interrogazione consente anche di combinare assieme dati provenienti da tabelle differenti in base a delle relazioni che possono intercorrere tra queste 323 6 1 Interrogazioni elementari La forma pi semplice di esprimere la sintassi necessaria a interrogare una sola tabella quella espressa dallo schema seguente SELECT espress_col_1 L espress_col_N FROM tabella WHERE condizione In questo modo possibile definire le colonne che si intendono utilizzare per il risultato mentre le righe si specificano eventualmente con la condizione posta dopo la parola chiave WHERE Introduzione a SQL 3655 L esempio seguente mostra la proiezione delle colonne del cognome e nome della tabella di indirizzi gi vista negli esempi delle altre sezioni senza porre limiti alle righe SELECT Cognome Nome FROM Indirizzi Quando si vuole ottenere una selezione composta dalle stesse colonne de
85. download lt http inux pueste it filearea A ppuntiLinux gt David Pisa david iglu cc uniud it e direct reading lt http www informasiti com Appunti HTML gt download lt http www informasiti com fAppunti gt Claudio Neri Sincro Consulting neri c sincroconsulting com GNU distributions e GNU Linux Debian lt http backages debian org appunti informatica libera gt Massimo Dal Zotto dz cs unitn it Italian magazine s CD ROM inter punto net lt http www interpuntonet it gt Michele Dalla Silvestra nds swlibero org Internet News lt http finews tecnet it gt Francesco Facconi francescofacconi libero it Fabio Ferrazzo fabio fr tiscalinet it Linux Magazine lt http www edmaster ifprodottiMinux ult tiv html gt Emmanuele Somma esomma ieee org La diffusione di questa opera incoraggiata in base ai termini della licenza The spread of this work is encouraged under the terms of the license 3569 Parte lxiii Linguaggi per la comparazione xsr ii irene paia 316 Espressioni regolari standard L LL 317 Confronto sintetico tra le espressioni regolari reali LL Parte lxiv Linguaggi per la scansione di file di testo 318 SED introduzione 319 AWK introduzione 320 AWK funzioni e array Parte Ixy Linguagti macio rilievi 321 M4 introduzione Parte Ixvi DBMS e SQL 322 Introduzione ai DBMS 323 Introduzi
86. eseguibile m4 la cui sintassi per l avvio pu essere semplificata nel modo rappresentato dallo schema seguente m4 opzioni file_da_elaborare Il file da elaborare pu essere fornito come argomento oppure attraverso lo standard input il risultato viene emesso attraverso lo standard output e gli errori eventuali vengono segnalati attraverso lo standard error Per iniziare a comprendere il funzionamento di M4 si osservi il testo seguente Ciao come stai dnl Che domanda Questo un commento dnl S Oggi una giornata stupenda Supponendo di avere scritto questo in un file precisamente prova m4 lo si pu rielaborare con M4 in uno dei due modi seguenti sono equivalenti m4 prova m4 m4 lt prova m4 In entrambi i casi quello che si ottiene attraverso lo standard output il testo seguente Ciao come stai Questo un commento dnl S Oggi una giornata stupenda Tutto ci che M4 non riesce a interpretare come una macro rimane inalterato Anche se il simbolo di commento previsto e corrisponde a a meno che siano state usate opzioni o istruzioni particolari icommenti non vengono eliminati servono solo a evitare che il testo sia interpretato da M4 L unico commento che funzioni in modo simile a quello dei linguaggi di programmazione co muni la macro dnl stata usata nella prima riga con la quale viene eliminato il testo a partire da quel
87. invito variabile L variabile a Attraverso questa istruzione possibile inserire un valore in una variabile o una serie di valori in una serie di variabili Se viene indicata la stringa dell invito questa viene visualizzata prima di attendere l inserimento da parte dell utente altrimenti viene visualizzato semplicemente un punto interrogativo Se si indica un elenco di variabili queste devono essere dello stesso tipo tutte numeriche o tutte stringa e il loro inserimento viene atteso in modo sequenziale da parte dell utente L esempio seguente rappresenta l inserimento di una stringa senza invito e di una coppia di numeri con invito 10 INPUT A 20 INPUT Inserisci la coppia di numeri X Y Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capitolo O 14 Basic esempi di programmazione In questo capitolo si raccolgono solo alcuni esempi molto semplici di programmazione in Basic Infatti questo linguaggio di programmazione non si presta per la rappresentazione di algoritmi complessi 314 1 Somma tra due numeri positivi L LL 3551 314 2 Moltiplicazione di due numeri positivi attraverso la somma 3551 314 3 Divisione intera tra due numeri positivi LL 3552 3144 Elevamentoa potenza iaia 3552 314 5 Radice Quadrat u ii iii ria agi 3552 3146 Fattomale 2 0 ai io ear e ria 3553 314 7 Ricerca sequenziale s
88. istruzione lt SQL PRINT gt ripe tuta per tutte le righe di un interrogazione a partire da quella corrente L esempio seguente mostra la visualizzazione dei primi due campi di tutte le righe di un interrogazione a cui si fa riferimento con il nome Q lt SQL SEEK Q 0 gt lt SQL PRINT_ROWS Q lt P gt Cognome 0 0 lt P gt n lt P gt Nome 0 1 lt P gt n gt L esempio seguente mostra la realizzazione di un modulo per la selezione di un articolo attraverso l invio del codice corrispondente A questo proposito si suppone che la pri ma colonna del risultato dell interrogazione a cui si fa riferimento con il nome ELENCO corrisponda al codice dell articolo mentre la seconda corrisponda a una sua descrizione lt p gt lt FORM ACTION ordine pgsql gt lt SELECT NAME codice gt lt SQL PRINT_ROWS ELENCO lt OPTION NAME ELENCO 0 gt ELENCO 1 gt lt SELECT gt lt INPUT TYPE submit gt lt FORM gt lt p gt Dal momento che si fa riferimento alle prime due colonne la stessa cosa avrebbe potuto essere realizzata con l istruzione lt SQL QSELECT gt nel modo seguente lt p gt lt FORM ACTION ordine pgsql gt lt SQL OSELECT ELENCO codice gt lt INPUT TYPE submit gt lt FORM gt lt p gt 327 5 Riferimenti e James Henstridge WWW SOL lt http www daa com au james www bqliwww Sql html gt Appunti di informatica libera 2003 01 01 Copyright 2
89. join un operazione in cui due o pi relazioni vengono unite a formare una nuova relazione Questo congiungimento implica la creazione di tuple formate dall unione di tuple provenienti dalle relazioni di origine Se per semplicit si pensa solo alla congiunzione di due relazioni si va da una congiunzione minima in cui nessuna tupla della prima relazione risulta abbinata ad altre tuple della seconda fino a un massimo in cui si ottengono tutti gli abbinamenti possibili delle tuple della prima relazione con quelle della seconda Tra questi estremi si pone la situazione tipica quella in cui ogni tupla della prima relazione viene collegata solo a una tupla corrispondente della seconda Il join naturale un tipo particolare di congiunzione in cui le relazioni oggetto di tale operazione vengono collegate in base ad attributi aventi lo stesso nome Per osservare di cosa si tratta vale la pena di riprendere l esempio della gestione di magazzino gi descritto in precedenza Nella figura 322 6 ne viene mostrata nuovamente solo una parte 3638 Introduzione ai DBMS Figura 322 6 Le relazioni Articoli e Movimenti dell esempio sulla gestione del magazzino Articoli Codice Descrizione lame Si cr e on n it ct fn pn i pn di pn E Pai nai vite30 Vite 3 mm vite40 Vite 4 mm dado30 Dado 3 mm a dado40 Dado 4 mm rond50 Rondella 5 mm Movimenti Codice Data Carico Scarico n s S I
90. l ultimo argomento viene utilizzato il contenuto della variabile FS come si pu intuire Dal momento che questo tipo di operazione analoga alla separazione in campi di un record anche in questo caso se il carattere di separazione uno spazio lt sSP gt gli elementi vengono individuati tra delimitatori composti da sequenze indefinite di spazi e tabulazioni Il primo elemento dell array creato in questo modo ha indice 1 il secondo ha indice 2 continuando cos di seguito fino all elemento n esimo split uno due tre elenco AWK funzioni e array 3615 L esempio che si vede crea o ricrea l array elenco con tre elementi contenenti le stringhe uno due e tre In pratica come se si facesse quanto segue elenco 1 uno elenco 2 due elenco 3 tre Se non c alcuna corrispondenza tra il carattere o l espressione regolare che si utilizzano come ultimo argomento viene creato solo l elemento con indice 1 nel quale viene inserita tutta la stringa di partenza 320 2 6 Array pseudo multidimensionali Gli array di AWK sono associativi pertanto non ha senso parlare di dimensioni in quanto disponibile un solo indice Tuttavia gestendo opportunamente le stringhe si possono individuare idealmente pi dimensioni anche se ci non vero nella realt Supponendo di voler gestire un array a due dimensioni con indici numerici
91. le di ambiente PGTZ assegnandole gli stessi valori che si possono utilizzare per l istruzione SET TIME ZONE PostgreSQL il linguaggio 325 8 Riferimenti 3705 e sql 1 The PostgreSQL Development Team PostgreSQL User s Guide lt file Ji usr sharefdoc postgresqlfuserfindex htm gt file usr share doc nostgresgl user ps gt A Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capitolo 26 PostgreSQL accesso attraverso PgAccess PgAccess un componente di una libreria Tcl Tk LibPgTcl A volte viene distribuito come un pacchetto autonomo che comunque dipende dalla libreria indicata oppure viene incluso nel lo stesso pacchetto della libreria PgAccess un programma frontale che utilizza l interfaccia grafica per accedere alle funzionalit di PostgreSQL Prima di poter utilizzare qualunque programma frontale per PostgreSQL occorre ricorda re di configurare correttamente PostgreSQL stesso in modo che questo consenta gli accessi previsti PgAccess costituito in pratica dall eseguibile pgaccess che si utilizza senza argomenti e si presenta inizialmente come si vede nella figura 326 1 Figura 326 1 Finestra iniziale di PgAccess quando viene avviato per la prima volta dall utente Database Object Help New Open Design Tables Queries Views Sequences Functions Reports Forms Scripts Mentre lo si usa PgA
92. liste la funzione cons crea una lista a partire dalle sue parti car e cdr cons elemento_car lista_cdr In altri termini cons aggiunge un elemento all inizio della lista indicata come secondo argomento Si osservi l esempio cons 0 1 2 3 4 5 6 gt 0 1 2 3 4 5 6 Le tre funzioni car cdr e cons si completano a vicenda in base alla relazione schematizzata dalla figura 308 2 Se viene fornita una lista come primo argomento della funzione car questa viene inserita come primo elemento della lista risultante cons 0 1 2 1 2 3 4 5 6 gt 0 1 2 1 2 3 4 5 6 Figura 308 2 Relazione che lega le funzioni car cdr e cons In particolare x e y sono liste non vuote a un elemento ipotetico di una lista cons car x cdr x x car cons a y a cdr cons a y y Altri modi per creare una lista sono dati dalle funzioni list e append list elemento append lista lista La funzione list restituisce una lista composta dai suoi argomenti se non si vuole che questi siano valutati prima occorre ricordare di usare l apostrofo la funzione append restituisce una lista composta dagli elementi delle due liste indicate come argomento se le liste vengono fornite in modo letterale occorre ricordare di usare l apostrofo per evitare che vengano va
93. mitatori La corrispondenza con il carattere o con l espressione regolare rappresenta ci che viene considerato il separatore dei campi Di solito la variabile FS contiene il carat tere lt SP gt ovvero lo spazio che costituisce una situazione particolare la separazione tra i campi ottenuta inserendo qualunque spazio orizzontale lt SP gt 0 lt HT gt di qualunque lunghezza Questa eccezione permette di leggere agevolmente 1 listati tabellari in cui i dati sono incolonnati in qualche modo attraverso spaziature pi o meno ampie 319 6 Esempi Gli esempi che vengono mostrati qui sono molto banali e sono tratti prevalentemente da Effective AWK Programming di Arnold D Robbins Tuttavia qui sono mostrati come script autonomi utilizzando una notazione che potrebbe sembrare ridondante ma che pu essere utile per non confondere il principiante Trattandosi di script autonomi questi ricevono 1 dati in ingresso solo attraverso lo standard input usr bin awk f 1 if length 0 gt max max length 0 END print max Questo esempio serve a trovare la riga di lunghezza massima di un file di testo normale In pratica viene scandito ogni record e viene memorizzata la sua lunghezza se questa risulta superiore all ultima misurazione effettuata Alla fine viene emesso il contenuto della variabile che stata usata per annotare questa informazione usr bin awk f length 0 gt 80 print 0 Qu
94. modo tale da poter iniziare a creare delle basi di dati Per questo sono necessari alcuni file detti cataloghi e una base di dati di partenza templatel 324 8 1 Cataloghi del DBMS I cataloghi di PostgreSQL sono delle tabelle del DBMS che non appartengono ad alcuna base di dati e servono per gestire il DBMS stesso Normalmente non si dovrebbe accedere a tali tabelle direttamente ma solo tramite script o programmi specifici Tuttavia ci sono situazioni in cui ci potrebbe essere necessario tenendo conto poi che la documentazione di PostgreSQL fa spesso riferimento a queste per cui conviene almeno saperle consultare Dal momento che PostgreSQL consente di accedere a delle tabelle solo dopo avere specificato la base di dati a queste si accede attraverso templatel in pratica con un comando simile a quello seguente postgres psql d templatel 324 8 1 1 Catalogo pg_user Il catalogo pg_user una vista del catalogo pg_shadow che contiene le informazioni sugli utenti di PostgreSQL La figura 324 1 mostra un esempio di come potrebbe essere composta La consultazione della tabella si ottiene con il comando SQL templatel gt SELECT FROM pg_user Figura 324 1 Esempio di un catalogo pg_user usename usesysid usecreatedb usetrace usesuper usecatupd passwd valuntil corso sleale postgres 100 t It lt lt XX Xx X Sat Jan 31 nobody 991E it It ARA tizio 1001 t lt lt lt EKEKKAAAKA
95. n per m caratteri Ripulisce all inizio e alla fine del testo Tabella 325 5 Alcune funzioni riconosciute dal linguaggio di PostgreSQL SUBSTR stringa n m LTRIM stringa x RTRIM stringa x Esempi SELECT POSITION o IN Topo Restituisce il valore due SELECT POSITION ino IN Cognome Funzione Descrizione UPPER stringa Converte la stringa in caratteri maiuscoli LOWER stringa Converte la stringa in caratteri minuscoli INITCAP stringa Converte la stringa in modo che le parole inizino con la maiuscola Estrae la stringa che inizia dalla posizione n lunga m caratteri Ripulisce la stringa a sinistra Left trim Ripulisce la stringa a destra Right trim FROM Indirizzi Restituisce un elenco delle posizioni in cui si trova la stringa ino all interno della colonna Cognome per tutte le righe della tabella Indirizzi SELECT SUBSTRING Daniele FROM 3 FOR 2 Restituisce la stringa ni SELECT TR LEADING 7 FROM C0iao Restituisce la stringa Ciao SELECT TR TRAILING FROM Diao Restituisce la stringa Ciao SELECT TR BOTH FROM Ciao Restituisce la stringa Ciao SELECT TR BOTH FROM Ciao 139 Restituisce la stringa Ciao SELECT TRIM Ciao Esattamente come nell esempio precedente dal momento che lo spazio normale
96. occorrenze della stringa andato con la stringa venuto sed s prova txt Aggiunge quattro spazi all inizio di ogni riga del file sed s i VEN CV ENEG iN 1 3 etc passwd Seleziona solo il primo e il terzo campo del file etc passwd in pratica preleva il nominativo e il numero UID Raggruppamenti bin sed nf P w registro L esempio mostra l unione di due comandi riferiti allo stesso gruppo di righe tutte Lo scopo quello di emettere le righe attraverso lo standard output e di annotarle anche in un file denominato registro Si osservi il fatto che la parentesi graffa di chiusura deve essere indicata da sola come si vede nell esempio e di conseguenza pu essere opportuno fare altrettanto per quella di apertura sed n e p e w registro prova txt Questo esempio fa la stessa cosa di quello precedente con la differenza che i comandi sono stati separati in due direttive riferite allo stesso gruppo di righe inoltre si elaborano le righe del file prova txt 318 6 Riferimenti e Sed tutorials lt http cs smith eduj 250f00 sed html gt jfranklil Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capitolo O 19 AWK introduzione AWK un linguaggio di programmazione nato fondamentalmente per l analisi e la rielaborazione di file d
97. op2 Vero se il primo operando minore o uguale al secondo op Negazione logica opl amp amp op2 AND logico opl amp op2 AND logico sinonimo di amp amp opl l op2 OR logico opl op2 OR logico sinonimo di Tabella 32 2 Elenco degli operatori utilizzabili con operandi di tipo stringa Operatore e operandi Descrizione opl op2 Vero se gli operandi sono uguali opl op2 Vero se gli operandi sono differenti opl gt op2 Vero se il primo operando lessicograficamente successivo al secondo opl lt op2 Vero se il primo operando lessicograficamente precedente al secondo opl gt op2 Vero se il primo operando non lessicograficamente precedente al secondo opl lt 0p2 Vero se il primo operando non lessicograficamente successivo al secondo Str regexp Vero se l espressione regolare corrisponde alla stringa All interno delle stringhe prevista l espansione di variabili e sono anche riconosciute alcune se quenze di escape tabella 327 3 Le variabili in questione vanno intese come parte del linguaggio di WWW SQL alcune di queste sono la ripetizione di variabili di ambiente corrispondenti altre sono variabili interne del programma come elencato nella tabella 327 4 altre ancora posso no essere definite all interno del programma stesso o meglio ancora attraverso dei moduli come stato mostrato nell esempio iniziale Le variabili vengono riconosciute in quanto
98. pi come argomento la costante di prima ma la funzione gettext Il programma pu essere compilato anche se per adesso non c alcuna traduzione disponibile per lui cc o ciao ciao c La fase successiva richiede la creazione di un file PO attraverso l aiuto del programma xgettext xgettext ciao c Quello che si ottiene nella directory corrente il file messages po contenente esattamente il testo seguente SOME DESCRIPTIVE TITLE Copyright C YEAR Free Software Foundation Inc FIRST AUTHOR lt EMAIL ADDRESS gt YEAR fuzzy msgid mn msgstr N Project Id Version PACKAGE VERSION n POT Creation Date 2000 05 15 23 05 0200 n PO Revision Date YEAR MO DA HO MI ZONE n Last Translator FULL NAME lt EMAIL ADDRESS gt n Language Team LANGUAGE lt LL li org gt n MIME Version 1 0 n Content Type text plain charset CHARSET n Content Transfer Encoding ENCODING n ciao c 18 msgid Hello world n msgstr Questo file deve essere modificato in particolare per ci che riguarda le prime direttive oltre che per aggiungere la traduzione della frase che viene visualizzata dal programma Per esempio cos Ciaomondo PO file Copyright C 2000 Pinco Pallino Pinco Pallino lt ppinco dinkel brot dg gt 2000 msgid mn msgstr T Project Id Version ciao 0 1 n POT Creation Date 2000 05 15 23 05
99. pratica uno script che si avvale di pg_dump per compiere il suo lavoro pg_dumpall opzioni pg_dumpall provvede a scaricare tutte le basi di dati assieme alle informazioni necessarie per ricreare il catalogo pg_shadow la vista pg_user si ottiene di conseguenza Come si pu intuire si deve utilizzare pg_dumpall con i privilegi dell utente postgres Gli argomenti della riga di comando di pg_dumpall vengono passati tali e quali a pg_dump quando questo viene utilizzato all interno dello script per lo scarico di ogni singola base di dati postgres pg _dumpall gt basi dati dump L esempio mostra il modo pi semplice di utilizzare pg_dumpall per scaricare tutte le basi di dati in un file unico In questo caso si ottiene il file di testo basi dati dump Questo file va verificato alla ricerca di segnalazioni di errore che potrebbero essere generate in presenza di dati che non possono essere riprodotti fedelmente eventualmente pu essere modificato se si conosce la sintassi dei comandi che vengono inseriti in questo script Il recupero dell insieme completo delle basi di dati avviene normalmente in un ambiente Post greSQL in cui il sistema delle basi di dati sia stato predisposto ma non sia stata creata alcuna base di dati a parte templatel la cui presenza obbligatoria Come si pu intuire il co mando necessario per ricaricare le basi di da
100. precedente con la differenza che gli accessi dalla rete indicata richiedono una parola d ordine che PostgreSQL conserva nel file di testo postgres passwd il nome indicato nell ultimo campo tipo database IP maschera autorizz host nostro_db 1923 L68 00 29525900 password passwd Questo file di configurazione viene fornito gi con alcuni esempi commentati 324 3 2 Gestione delle parole d ordine in chiaro Con il sistema di autenticazione definito dalla parola chiave password possibile utilizzare un file di testo simile a etc passwd o a etc shadow per annotare gli utenti PostgreSQL e le parole d ordine cifrate relative Per esempio se nel file postgres pg_hba conf compare il record 4Si intende che questo metodo sia anche molto poco sicuro 5L autenticazione IDENT prevede anche l uso di un file di mappa aggiuntivo che viene preso in considerazione quando al posto della parola chiave sameuser si indica qualcosa d altro Tuttavia la documentazione sul modo in cui debba essere predisposto questo file non disponibile allo stato attuale PostgreSQL struttura e preparazione 3677 host nostro_db 192716800 29542990V password utenti gli utenti che accedono attraverso un cliente avviato dai nodi della sottorete 192 168 devono identificarsi attraverso l indicazione di una parola d ordine che PostgreSQL pu trovare nel file di testo postgres utenti Questo file potrebb
101. prestito else return new end if end Le funzioni e i trigger in PostgreSQL un esercitazione didattica 3731 language plpgsqgl create trigger controlla_libro_uscito before insert on prestiti for each row execute procedure inserisci _prestito_trigger Nel file in questione si vede la dichiarazione di una funzione analoga a quanto gi mostrato in precedenza seguita dalla dichiarazione del trigger relativo La variabile new corrisponde alla nuova riga che si vuole inserire con l istruzione insert into ed di tipo record Dopo averle dichiarate si assegna alla variabile numero_inventario il valore new n_inv e alla variabile data restituzione il valore sentinella 2050 1 1 Successivamente con l istruzione select into prestito si va a vedere se nella tabella prestiti esiste una riga che soddisfa la condizione di esistenza del libro a prestito Se si trova questa riga viene mostrato un messaggio di errore altrimenti la funzione deve restituire il valore contenuto nella variabile new ovvero la riga che verr inserita nella tabella La funzione inserisci prestito_trigger viene messa in azione ogni vol ta che si vuole inserire una riga nel file prestiti attraverso il controllo del trigger controlla libro_uscito Si acquisisce la funzione e il trigger con il comando seguente nell ambito di psql biblioteca gt i funzione _trigge
102. prevalentemente dal primo livello che coincide fondamentalmente con lo standard precedente SQL89 323 1 Concetti fondamentali Convenzionalmente le istruzioni di questo linguaggio sono scritte con tutte le lettere maiuscole Si tratta solo di una tradizione di quell epoca SQL non distingue tra lettere minuscole e maiu scole nelle parole chiave delle istruzioni e nemmeno nei nomi di tabelle colonne e altri oggetti Solo quando si tratta di definire il contenuto di una variabile allora le differenze contano In questo capitolo e nel resto del documento quando si fa riferimento a istruzioni SQL queste vengono indicate utilizzando solo lettere maiuscole come richiede la tradizione I nomi degli oggetti tabelle e altro possono essere composti utilizzando lettere numeri e il trattino basso il primo carattere deve essere una lettera oppure il trattino basso Le istruzioni SQL possono essere distribuite su pi righe senza una regola precisa Si distingue la fine di un istruzione dall inizio di un altra attraverso la presenza di almeno una riga vuota Alcuni sistemi SQL richiedono l uso di un simbolo di terminazione delle righe che potrebbe essere un punto e virgola L SQL standard prevede la possibilit di inserire commenti per questo si pu usare un trattino doppio seguito dal commento desiderato fino alla fine della riga 323 2 Tipi di dati I tipi di dati gestibili con il linguaggio SQL sono molti Fondam
103. punto fino al codice di interruzione di riga successivo Dal momento che viene eliminato anche il codice di interruzione di riga si pu vedere dall esempio che la seconda riga 3618 M4 introduzione 3619 quella vuota viene inghiottita invece il dnl contenuto nella riga di commento non stato considerato da M4 321 2 Convenzioni generali L analisi di M4 sull input viene condotta separando tutto in elementi token i quali possono essere classificati fondamentalmente in tre tipi nomi stringhe tra virgolette e caratteri singoli che non hanno significati particolari I nomi sono sequenze di lettere compreso il trattino basso e numeri dove il primo carattere una lettera Una volta che M4 ha delimitato un nome se questo viene riconosciuto come una macro allora questa viene espansa sostituendola al nome Le stringhe delimitate da virgolette richiedono l uso di un apice di apertura e di uno di chiu sura e Il risultato dell elaborazione di una stringa di questo tipo ci che si ottiene eliminando il livello pi esterno di apici Per esempio VI corrisponde alla stringa nulla la mia stringa corrisponde al testo la mia stringa tra virgolette corrisponde a tra virgolette importante tenere presente che anche i simboli usati per delimitare le stringhe possono essere modificati attraverso istruzioni di M4 Tutto ci che non rientra n
104. questo o quel sistema In particolare qualche realizzazione di SED potrebbe porre un limite alla dimensione delle righe Questo fatto va tenuto presente quan do si vogliono realizzare dei programmi portabili ovvero da usare su piattaforme diverse con sistemi operativi diversi Tabella 318 1 Riepilogo delle espressioni regolari di SED BRE POSIX GNU Descrizione 5 Un carattere qualsiasi Escape A A Inizio riga Fine riga I Alternativa Vv Raggruppamento n n Riferimento x x Zero o pi caratteri qualsiasi x Zero o al massimo un carattere qualsiasi x Uno o pi caratteri qualsiasi x n x n Esattamente n volte x x n x n Almeno n volte x x n m x n m Danam volte x x m x m Da zero a m volte x 1 1 Elenco XV XY Sequenze x y x y Intervalli Elementi di collazione Caratteri equivalenti i 1 1 Classi di caratteri 318 3 Script e direttive multiple Di solito si vede utilizzare SED con direttive fornite direttamente attraverso la stessa riga di comando Volendo realizzare un programmino un po pi complesso si potrebbe scrivere diret tamente uno script che deve essere interpretato direttamente da SED Per farlo occorre iniziare il file in questione con una delle due intestazioni seguenti bin sed f bin sed nf Nel primo caso si fa in modo di fornire all eseguibile sed si suppone che si trovi nella
105. regolare pu contenere entrambe le ancore di inizio e fine stringa In tal caso si cerca la corrispondenza con tutta la stringa di partenza 316 3 2 Delimitazione di una o pi sottoespressioni Una sottoespressione una porzione di espressione regolare individuata attraverso dei delimi tatori opportuni Per la precisione si tratta di parentesi tonde normali nel caso di espressioni regolari ERE estese oppure dei simboli e nel caso di espressioni regolari BRE La delimitazione di sottoespressioni pu servire per regolare la precedenza nell interpretazione delle varie parti dell espressione regolare oppure per altri scopi che dipendono dal programma in cui vengono utilizzate In generale dovrebbe essere ammissibile la definizione di sottoespressioni annidate Per fare un esempio l espressione regolare BRE anto logia corrisponde a una qua lunque sottostringa antologia Nello stesso modo funziona l espressione regolare ERE anto logia 316 3 3 Riferimento a una sottoespressione precedente solo BRE Nelle espressioni regolari di tipo BRE possibile utilizzare la forma n dove n una cifra nu merica da uno a nove per indicare la corrispondenza con l n esima sottoespressione precedente Per esempio l espressione regolare sia questo l corrisponde alla sottostringa sia questo sia di un testo che pu essere anche pi lungo E importante osservare che la corrisp
106. remoto SERVER_ADMIN Indirizzo di posta elettronica dell amministratore SERVER_NAME Nome del servente SERVER_PORT Numero della porta utilizzata per la connessione con il servente SERVER_PROTOCOL Nome e versione del protocollo HTTP SERVER_SOFTWARE Nome del software usato come servente HTTP SCRIPT_FILENAME Percorso del programma CGI l eseguibile di WWW SQL SCRIPT_NAME Percorso relativo del programma CGI l eseguibile di WWW SQL REQUEST_URI Indirizzo richiesto Per prendere confidenza con le variabili interne di WWW SQL si pu realizzare lo script se guente interne pgsql che con l istruzione lt SQL DUMPVARS gt le elenca tutte La figura 327 2 mostra il risultato che si potrebbe ottenere lt HTML gt lt HEAD gt lt title gt Visualizzazione delle variabili interne lt title gt lt HEAD gt lt BODY gt lt H1 gt Visualizzazione delle variabili interne lt H1 gt lt SQL DUMPVARS gt lt BODY gt PostgreSQL accesso attraverso WWW SQL 3719 Figura 327 2 Esempio del contenuto delle variabili interne attraverso l istruzione lt SOQL DUMPVARS gt Visualizzazione delle variabili interne WWW_SQL_ VERSION 0 5 5 SERVER_SOFTWARE Apache 1 3 3 Unix Debian GNU SERVER_PROTOCOL HTTP 1 0 SERVER_PORT 80 SERVER_NAME dinkel brot dg SERVER_ADMIN webmaster dinkel brot dg SCRIPT_FILENAME usr lib cgi bin www pgsql SCRIPT_NAME cgi bin www pgsql REQUEST_URI
107. scelta della riga n esima rispetto all inizio del gruppo per il quale stato definito il cursore ABSOLUTE oppure della riga n esima rispetto all ultima riga estratta da un istruzione FETCH precedente Le variabili indicate dopo la parola chiave INTO che in particolare sono precedute da due punti ricevono ordinatamente il contenuto delle varie colonne della riga estratta Naturalmente le variabili in questione devono appartenere a un linguaggio di programmazione che incorpora P SQL dal momento che l SQL stesso non fornisce questa possibilit FETCH NEXT FROM Mio_cursore L esempio mostra l uso tipico di questa istruzione dove si legge la riga successiva se non ne sono state lette fino a questo punto si tratta della prima dal cursore dichiarato e aperto precedentemente L esempio seguente identico dal punto di vista funzionale FETCH RELATIVE 1 FROM Mio_cursore I due esempi successivi sono equivalenti e servono a ottenere la riga precedente Gs za ETCH PRIOR FROM Mio_cursore 3666 Introduzione a SQL FETCH RELATIVE 1 FROM Mio_cursore 323 11 3 Chiusura Il cursore al termine dell utilizzo deve essere chiuso CLOSE cursore Seguendo gli esempi visti in precedenza per chiudere il cursore Mio_cursore basta l istruzione seguente CLOSE Mio_cursore 323 12 Riferimenti e Paolo Atzeni Stefano Ceri Stefano Paraboschi Riccardo Torlone
108. scritte secondo lo schema seguente prefissonome_della_variabile Il prefisso un simbolo a scelta tra In pratica var var var e var sono riferimenti identici alla stessa variabile var Per questo motivo se si vogliono usare i simboli corrispondenti a questi prefissi in modo letterale occorre usare una sequenza di escape 3718 PostgreSQL accesso attraverso WWW SQL Tabella 32 3 Sequenze di escape utilizzabili all interno delle stringhe Escape Significato n n lt LF gt t lt HT gt tabulazione Tabella 327 4 Variabili interne di WWW SQL Variabile Descrizione AFFECTED_ROWS Numero di righe coinvolte dall ultima interrogazione NUM_FIELDS Numero di campi restituiti dall ultima interrogazione NUM_ROWS Numero di righe restituiti dall ultima interrogazione WWW_SQL_VERSION Versione di WWW SQL GATEWAY_INTERFACE Versione dell interfaccia CGI HOSTTYPE Tipo di macchina del servente HTTP HTTPHOST Nome del nodo servente HTTP_REFERER Pagina da cui proviene il cliente HTTP_USER_AGENT Nome del programma di navigazione cliente OSTYPE Nome del sistema operativo del servente PATH_INFO Percorso relativo dello script attuale PATH_TRANSLATED Percorso assoluto del file corrispondente allo script attuale REMOTE_ADDR Indirizzo del nodo remoto REMOTE_HOST Nome del nodo
109. semicolon to execute query You are currently connected to the database mio_db mio_db gt _ Da questo momento si possono inserire le istruzioni SQL per la base di dati selezionata in questo caso mio_db oppure si possono inserire dei comandi specifici di psql Questi ultimi si notano perch sono composti da una barra obliqua inversa seguita da un carattere Il comando interno di psql pi importante h che permette di visualizzare una guida rapida alle istruzioni SQL che possono essere utilizzate gt R Invio type h lt cmd gt where lt cmd gt is one of the following abort abort transaction alter table begin begin transaction begin work cluster close commit type h for a complete description of all commands Nello stesso modo il comando fornisce un riepilogo dei comandi interni di psql gt nvio help a toggle field alignment currenty on C lt captn gt set html3 caption currently Tutto ci che psql non riesce a interpretare come un suo comando interno viene trattato come un istruzione SQL Dal momento che queste istruzioni possono richiedere pi righe neces sario informare psql della conclusione di queste per permettergli di analizzarle e inviarle al servente Queste istruzioni possono essere terminate con un punto e virgola oppure con il comando g 8Il programma cliente tipico dovrebbe ricono
110. si tratta di templatel Le directory delle basi di dati si articolano a partire da postgres base Quando si crea l 1 potetica base di dati mio_db ci che si ottiene in pratica la copia della directory postgres base template1 in postgres base mio_db 7 8 Come gi accennato una base di dati pu essere creata solo da un utente autorizzato precedente mente per questo scopo Di solito si utilizza lo script createdb come nell esempio seguente in cui si crea la base di dati mio_db createdb mio_db L utente che ha creato una base di dati automaticamente il suo amministratore ovvero colui che pu decidere eventualmente di eliminarla PostgreSQL pone dei limiti nella scelta dei nomi delle basi di dati Non possono superare i 16 caratteri e il primo di questi deve essere alfabetico oppure pu essere un trattino basso Se l utente che tenta di creare una base di dati non autorizzato per questo quello che si ottiene un messaggio di errore del tipo seguente Connection to database templatel failed FATAL l SetUserId user tizio is not in pg_user createdb database creation failed on mio_db 324 5 2 Eliminazione di una base di dati L amministratore di una base di dati generalmente colui che la ha creata la persona che pu anche eliminarla Nell esempio seguente si elimina la base di dati mio_db dropdb mio_db In ogni caso la copia da s
111. stesse PostgreSQL struttura e preparazione 3685 do echo n BASE_ DATI psql BASE_DATI c VACUUM done In breve si utilizza la prima volta psql in modo da aprire la base di dati templatel quel la fondamentale che permette di intervenire sui cataloghi di sistema accedendo al catalogo pg_database per leggere la colonna contenente i nomi delle basi di dati In particolare l op zione t serve a evitare di inserire il nome della colonna stessa L elenco che si ottiene viene inserito nella variabile di ambiente BASI_DATI che in seguito viene scandita da un ciclo for all interno del quale si utilizza psql per ripulire ogni singola base di dati 324 8 Maneggiare i file delle basi di dati All inizio del capitolo si accennato alla collocazione normale delle directory e dei file che compongono le basi di dati Chi amministra il sistema di elaborazione che ospita PostgreSQL e le basi di dati deve avere almeno un idea di come maneggiare questi file Per esempio deve sapere come comportarsi per le copie di sicurezza soprattutto come ripristinarle Per comodit la directory da cui si articolano i cataloghi e le basi di dati verr indica ta come postgres ovvero la directory personale dell utente postgres cio il DBA l amministratore delle basi di dati Quando si installa PostgreSQL si dovrebbe avere gi una directory postgres organizzata in
112. tabella contenente rispettivamente i nomi delle basi di dati i numeri UID dei rispettivi amministratori gli utenti che li hanno creati e il nome della directory in cui sono collocati fisicamente connect base_di_dati nome_utente Chiude la connessione con la base di dati in uso precedentemente e tenta di accedere a quella indicata Se il sistema di autenticazione lo consente si pu specificare anche il nome PostgreSQL struttura e preparazione 3683 dell utente con cui si intende operare sulla nuova base di dati Generalmente ci dovrebbe essere impedito 10 d tabella L opzione d usata da sola elenca le tabelle contenute nella base di dati altrimenti se viene indicato il nome di una di queste tabelle si ottiene l elenco delle colonne Se si utilizza il comando d si ottiene l elenco di tutte le tabelle con le informazioni su tutte le colonne rispettive i file Con questa opzione si fa in modo che psql esegua di seguito tutte le istruzioni contenute nel file indicato come argomento q Termina il funzionamento di psql Codici di uscita Il programma psql pu restituire i valori seguenti e O se tutte le istruzioni sono state eseguite senza errori e se si sono verificati errori e 2 se intervenuta una disconnessione da parte del servente sottostante Esempi psql mio_db Cerca di connettersi con la base di da
113. vettore j scambio vettore Inizio del programma define DIM 100 define vettor make vector DIM define x 0 define i 0 define z 0 display Inserire la quantit di elementi display DIM display al massimo set z read newline if gt z DIM set z DIM display Inserire i valori del vettore newline do i 0 i 1 gt i z display elemento display i display vector set vettore i read newline set vettore ordina vettore 0 z 1 display Il vettore ordinato il seguente newline do i 0 i 1 gt i z display vector ref vettore i display newline 3513 3514 Scheme esempi di programmazione Segue la funzione ordina in versione ricorsiva define ordina vettore a z define scambio 0 if lt a z begin Scansione interna dell array per collocare nella posizione a l elemento giusto do k a 1 k 1 gt k z if lt vector ref vettore k vector ref vettore a Scambia i valori begin set scambio vector ref vettore k vector set vettore k vector ref vettore a vector set vettore a scambio set vettore ordina vettore a 1 z vettore 310 3 2 Torre di Hanoi Il problema della torre di Hanoi stato descritto nella sezione 282 4 2 F hanoil scm Torre di Hanoi
114. viene specificato alcun argomento la riga iniziale ha il numero 10 e l incremento sempre di 10 e BYE QUIT Termina il funzionamento dell interprete Basic L inserimento delle righe di programma attraverso l interprete Basic avviene iniziando le istru zioni con il numero di riga in cui queste devono essere collocate Ci permette cos di inserire righe aggiuntive anche all interno del programma Se si utilizzano numeri di righe gi esistenti queste vengono sostituite Quando un istruzione Basic viene inserita senza il numero iniziale questa viene eseguita immediatamente 313 3 Tipi di dati ed espressioni I tipi di dati gestibili in Basic sono generalmente solo i numeri reali numeri a virgola mobile con approssimazione che varia a seconda dell interprete e le stringhe I numeri vengono indicati senza l uso di delimitatori se necessario possibile rappresentare va lori decimali con l uso del punto di separazione inoltre generalmente ammissibile la notazione esponenziale L esempio seguente mostra due modi di rappresentare lo stesso numero 123 456 1 23456E 2 Le stringhe si rappresentano delimitandole attraverso apici doppi possono essere ammessi anche gli apici singoli ma questo dipende dall interprete e sono soggette a un limite di dimensione che dipende dall interprete spesso si tratta di soli 255 caratteri Le variabili sono distinte in base al fatto che servano a contener
115. 0 500 Volendo si possono fare i raggruppamenti in modo da avere i totali distinti anche in base al giorno come nell istruzione seguente SELECT Codice Data SUM Carico SUM Scarico FROM Movimenti GROUP BY Codice Data Come gi affermato la condizione posta dopo la parola chiave WHERE serve a filtrare inizial mente le righe da considerare nel raggruppamento Se quello che si vuole filtrare ulteriormente il risultato di un raggruppamento occorre usare la clausola HAVING 02 ELECT specificazione_della_colonna_1 specificazione_della_colonna_N FROM specificazione_della_tabella_1 L specificazione_della_tabella_N WHERE condizione GROUP BY colonna_1 le HAVING condizione L esempio seguente serve a ottenere il raggruppamento dei carichi e scarichi degli articoli li mitando per il risultato a quelli per i quali sia stata fatta una quantit di scarichi consistente superiore a 1000 unit SELECT Codice SUM Carico SUM Scarico FROM Movimenti GROUP BY Codice HAVING SUM Scarico gt 1000 Dall esempio gi visto in figura 323 4 risulterebbe escluso l articolo rond50 Introduzione a SQL 3661 323 7 Trasferimento di dati in un altra tabella Alcune forme particolari di richieste SQL possono essere utilizzate per inserire dati in tabelle esistenti o per crearne di nuove 323 7 1 Creazione di una nuova tabella a partire da altre L ist
116. 000 2003 Daniele Giacomini daniele swlibero org Capitolo 92O Le funzioni e i trigger in PostgreSQL un eserci tazione didattica Questo capitolo deriva da un lavoro originale di Antonio Bernardi lt imailto brngb tin it gt che ne ha concesso espressamente l utilizzo libero all interno di questa opera Il testo originale di questo lavoro si trova presso lt http Minuxdidattica org docs besta gt 328 1 Lo scenario la base di dati biblioteca L esercitazione che viene proposta riguarda la gestione dei prestiti di una biblioteca Le tabelle coinvolte sono e libri n_inv autore titolo collocazione soggetto cod_ed prezzo anno_ed e utenti cod_ut nome cognome telefono indirizzo citta e localita citta cap prov naz e editori cod_ed rag_soc indirizzo citta telefono e prestiti np n_inv cod_ut data _p data_r Le tabelle sono ovviamente ridotte all osso e sono autoesplicative In questo esercizio la ta bella fondamentale la tabella prestiti nella quale troviamo il codice dell utente cod_ut e il numero di inventario del libro n_inv Quando viene fatto un prestito l impiegato dovr inserire e il numero di inventario del libro n_inv e il codice dell utente cod_ut e la data del prestito data_p A questo punto per evitare errori e non immettere un libro che gi a prestito si dovr fare un controllo che impedisc
117. 0200 n PO Revision Date 2000 05 15 22 52 0200 n Last Translator Pinco Pallino lt ppinco dinkel brot dg gt n Language Team Italian lt it li org gt n MIME Version 1 0 n Content Type text plain charset iso 8859 1 n Content Transfer Encoding 8bit n 3558 Gettext introduzione ciao c 18 msgid Hello world n msgstr Ciao mondo n Si osservi che stato necessario togliere la riga che conteneva il commento speciale fuzzy Il file viene salvato con un nome appropriato per esempio ciao po Quindi si passa alla sua compilazione per ottenere il file ciao mo msgfmt vvvv o ciao mo ciao po Dal momento che il file in questione contiene la traduzione in italiano del programma deve essere collocato all interno della gerarchia it LC_MESSAGES a sua volta a partire dalla directory di chiarata con la funzione bpindtextdomain cio var tmp it LC_MESSAGES secondo quando definito nel sorgente C A questo punto dopo la collocazione appropriata del file compilato della traduzione se la confi gurazione locale corretta lanciando l eseguibile ciao si dovrebbe vedere il messaggio tradot to Eventualmente si veda quando descritto nel capitolo 58 per quanto riguarda la configurazione della localizzazione 315 3 Abbinamento a un pacchetto Perch Gettext sappia qual il file che contiene i messaggi tradotti nell ambito della conf
118. 03 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org 3616 AWK funzioni e array 321 M4 introduzione 321 1 321 2 321 3 321 4 321 5 Parte lxv Linguaggi macro Principio di funzionamento L LL Convenzioni generali iaia a Istruzioni condizionali iterazioni e riCOrsioni LLL LL Altre macro interne degne di nota runner erraren Riferimenti 3617 3618 3618 3619 3624 3625 3628 capito DZ M4 introduzione M4 un elaboratore di macro nel senso che la sua elaborazione consiste nell espandere le macro che incontra nell input In altri termini si pu dire che copia l input nell output espandendo man mano le macro che incontra La logica di funzionamento di M4 completamente diversa dai linguaggi di programmazione comuni inoltre le sue potenzialit richiedono molta attenzione da parte del programmatore Detto in maniera diversa si tratta di un linguaggio macro molto potente ma altrettanto difficile da gestire L obiettivo di questo capitolo solo quello di mostrarne i principi di funzionamento per permet tere la comprensione parziale del lavoro di altri Per citare un caso significativo la configura zione di Sendmail capitolo 155 viene gestita attualmente attraverso una serie di macro di M4 con le quali si genera il file etc sendmail cf 321 1 Principio di funzionamento M4 costituito in pratica dall
119. 12 BC esempi di programmazione Questo capitolo raccoglie solo alcuni esempi di programmazione in parte gi descritti in altri capitoli Per eseguire questi esempi basta usare il comando seguente dove prova b rappresenta il nome del file da eseguire bc prova b Si vuole evitare l uso di estensioni al linguaggio BC per cui i programmi non vengono mostrati come script inoltre manca la possibilit di controllare l interazione con l utilizzatore quindi le funzioni devono essere richiamate manualmente e al termine si deve usare il comando quit oppure si conclude il flusso dello standard input con la combinazione Ctrl d Negli esempi non si fa uso delle librerie standard pertanto i nomi relativi possono essere riutilizzati Le espressioni vengono scritte in modo da evitare la visualizzazione non desiderata Per esempio invece di i si preferisce usare la forma i i 1 quando possibile Bisogna ricordare che se non si assegna il risultato generato da una funzione questo viene visualizzato La variabile t stata usata negli esempi per raccogliere questo risultato quando non desiderato 312 1 Problemi elementari di programmazione L LL 3532 312 1 1 Somma tra due numeri positivi L LL 3532 312 1 2 Moltiplicazione di due numeri positivi attraverso la somma 3532 312 1 3 Divisione intera tra due numeri positivi LL 3533 312 1 4 Elevamento a poten
120. 1999 800 vite30 03 01 1999 2000 rond50 03 01 1999 500 r Da questa situazione si vuole ottenere il join della tabella Movimenti con tutte le informazio ni corrispondenti della tabella Articoli basando il riferimento sulla colonna Codice In pratica si vuole ottenere la tabella della figura 323 2 Tabella 323 8 Risultato del join che si intende ottenere tra la tabella Movimenti e la tabella Articoli Codice Data Carico Scarico Descrizione 3355 S 55 l Raren Car dado30 01 01 1999 1200 Dado 3 mm vite30 01 01 1999 800 Vite 3 mm vite30 03 01 1999 2000 Vite 3 mm rond50 03 01 1999 500 Rondella 5 m al La Considerato che da un istruzione SELECT contenente il riferimento a pi tabelle si genera il prodotto tra queste si pone poi il problema di eseguire una proiezione delle colonne desiderate e soprattutto di selezionare le righe In questo caso la selezione deve essere basata sulla cor rispondenza tra la colonna Codice della prima tabella con la stessa colonna della seconda Dovendo fare riferimento a due colonne di tabelle differenti aventi per lo stesso nome diviene indispensabile indicare i nomi delle colonne prefissandoli con i nomi delle tabelle rispettive SELECT Movimenti Codice Movimenti Data Movimenti Carico Movimenti Scarico Articoli Descrizione FROM Movimenti Articoli WHERE Movimenti Codice
121. 282 4 2 hanoi b h lt n anelli gt lt piolo iniziale gt lt piolo finale gt define h n i auto t if n gt 0 t h n 1 i 6 i1 f Muovi l anello n dal piolo i al piolo T 1 t h n l 6 i f f return BC esempi di programmazione Torre di Hanoi t h lt n anelli gt lt piolo iniziale gt lt piolo finale gt 312 3 3 Quicksort L algoritmo del Quicksort stato descritto nella sezione 282 4 3 gsort b 1 l array da riordinare p lt inizio gt lt fine gt define p a z auto S i Cc Si assume che a sia inferiore a z i a 1 c Z Inizia il ciclo di scansione dell array while 1 while 1 Sposta i a destra if 1 i gt l a break if i gt c break i i 1 i while 1 Sposta c a sinistra if 1 c J lt 1 a break c c 1 if c lt i avvenuto l incontro tra i ec break Vengono scambiati i valori s l c E E A questo punto l a z stata ripartita e c la collocazione di ll a Ey s l c 1 c 1 a l a s A questo punto l c un elemento un valore nella posizione giusta return c 3539 3540 BC esempi di programmazione q lt inizio gt lt fine gt define q a z auto c if z gt a c p a z q a c 1 q c 1 z return Quicksort
122. 6 Esempi gt il iaia 3609 319 7 Riferimenti ciotole eso lisa 3610 320 AWK funzioni e array 3611 320 1 Dichiarazione di funzioni LL 3611 3202 ATAY folle ia no ian 3612 3583 Capitolo 3 8 SED introduzione SED un programma in grado di eseguire delle trasformazioni elementari in un flusso di dati di ingresso proveniente indifferentemente da un file o da una pipeline Questo flusso di dati viene letto sequenzialmente e la sua trasformazione viene restituita attraverso lo standard output Il nome l abbreviazione di Stream Editor che descrive istantaneamente il senso di questo pro gramma editor di flusso Volendo usare altri termini lo si potrebbe definire come un programma per la modifica sequenziale di un flusso di dati espressi in forma testuale Volendo vedere SED come una scatola nera lo si pu immaginare come un oggetto che ha due ingressi un flusso di dati in ingresso composto da uno o pi file di testo concatenati assieme un flusso di istruzioni in ingresso che compone il programma dell elaborazione da apportare ai dati un flusso di dati in uscita che rappresenta il risultato dell elaborazione Figura 318 1 Flussi di dati che interessano SED Direttive di elaborazione In linea di principio SED non consente di indicare dei caratteri speciali nei suoi comandi attraverso delle sequenze di escape 318 1 Avvio dell eseguibile SED costituito in pratica dall eseguibil
123. 7 308 2 Vettori Scheme gestisce anche i vettori che sono in pratica gli array dei linguaggi di programmazione normali Un vettore viene rappresentato in forma costante come una lista preceduta dal simbolo 6 kd i elemento_1 elemento_n L indice dei vettori di Scheme parte da zero Il funzionamento dei vettori di Scheme non richiede spiegazioni particolari La tabella 308 2 riassume le funzioni utili con questo tipo di dati Tabella 308 2 Elenco di alcune funzioni specifiche per la gestione dei vettori Funzione Descrizione vector oggetto Vero se l oggetto un vettore make vector k Restituisce un vettore di k elementi indefiniti make vector k valore Restituisce un vettore di k elementi inizializzati al valore specificato vector elemento Restituisce un vettore degli elementi indicati vector length vettore Restituisce il numero di elementi del vettore vector ref vettore k Restituisce l elemento nella posizione k partendo da zero vector set vettore k oggetto Assegna all elemento k esimo l oggetto indicato vector gt list vettore Converte il vettore in lista list gt vector lista Converte la lista in vettore 308 3 Strutture di controllo applicate alle liste Alcune funzioni tipiche di Scheme servono ad applicare una funzione a un gruppo di valori contenuto in una lista Tabella 308 3 Elenco di alcune funzioni specifiche per la scansione degli elementi di una list
124. AGER psql sensibile alla presenza o meno della variabile di ambiente PAGER Se questa esiste e non vuota psql user il programma indicato al suo interno per controllare l emissione dell output generato Per esempio se contiene less come si vede nell esempio seguente che fa riferimento a una shell compatibile con quella di Bourne PAGER less export PAGER si fa in modo che l output troppo lungo venga controllato da Less Per eliminare l impostazione di questa variabile in modo da ritornare allo stato predefinito basta annullare il contenuto della variabile nel modo seguente PAGER export PAGER 324 7 Manutenzione delle basi di dati Un problema comune dei DBMS quello della riorganizzazione periodica dei dati in modo da semplificare e accelerare le elaborazioni successive Nei sistemi pi semplici si parla a volte di ricostruzione indici o di qualcosa del genere Nel caso di PostgreSQL si utilizza un comando specifico che estraneo all SQL standard vacuum I VACUUM VERBOSE ANALYZE nome_tabella VACUUM VERBOSE ANALYZE nome_tabella colonna_1 colonna N L operazione di pulizia si riferisce alla base di dati aperta in quel momento L opzione VERBOSE permette di ottenere i dettagli sull esecuzione dell operazione ANALYZE serve invece per indicare specificatamente una tabella o addirittura solo alcune colo
125. Capitolo 3 0 7 scheme struttura del programma e campo di azione Nel capitolo introduttivo sono state elencate le strutture elementari per il controllo e il raggrup pamento delle istruzioni espressioni di Scheme In questo capitolo si vuole mostrare in che modo possano essere definite delle funzioni o comunque dei raggruppamenti di istruzioni all in terno dei quali si possa individuare un campo di azione locale per le variabili che vi vengono dichiarate Le funzioni del linguaggio Scheme prevedono il passaggio di parametri solo per valore questo significa che gli argomenti di una funzione vengono valutati prima di tutto Al posto del passaggio dei parametri per riferimento Scheme consente l indicazione di espressioni costanti concetto a cui si accennato nel capitolo precedente 307 1 Definizione e campo di azione La definizione e inizializzazione di un oggetto avviene normalmente attraverso la funzione define Questa pu servire per dichiarare una variabile normale o anche per dichiarare una funzione define nome_variabile espressione_di_inizializzazione Quello che si vede sopra appunto lo schema sintattico per la dichiarazione e inizializzazione di una variabile cosa che stata vista pi volte nel capitolo precedentemente Sotto si vede lo schema sintattico per la dichiarazione di una funzione define nome_funzione elenco_parametri_formali corpo In questo caso i para
126. Descrizione list oggetto pair oggetto null lista length lista car lista cdr lista cadr lista cddr lista caadr lista caddr lista cons elemento lista list elemento append lista lista reverse lista set car lista oggetto set cdr lista oggetto list tail lista K list ref lista k vector gt list vettore list gt vector list Vero se l oggetto una lista Vero se l oggetto una coppia una lista non vuota Vero se la lista vuota Restituisce il numero di elementi della lista Restituisce il primo elemento di una lista Restituisce una lista da cui stato tolto il primo elemento Equivale a car cdr lista Equivale a cdr cdr lista Equivale a car car cdr lista Equivale a car cdr cdr lista Restituisce una lista in cui inserisce al primo posto l elemento indicato Restituisce una lista composta dagli elementi indicati Restituisce una lista composta dagli elementi delle due liste indicate Restituisce una lista con gli elementi in ordine inverso Memorizza nella prima posizione della lista l oggetto indicato Memorizza nella parte successiva al primo elemento l oggetto indicato Restituisce una lista in cui mancano i primi k elementi Restituisce l elemento k 1 esimo della lista Converte il vettore in lista Converte la lista in vettore 3492 Scheme liste e vettori 3493 308 1 1 Dichiarazione di una lista
127. EAE 3544 Interprete tradizionale 3545 Tipi di dati ed espressioni LL 3546 Primi esempi banali secer rererere eiia aaa nie 3548 Strutture di controllo del flusso LLL Li 3549 inpute output sli i Ri EEEE 3550 esempi di programmazione LL 3551 Somma tra due numeri positivi LL Li 3551 Moltiplicazione di due numeri positivi attraverso la somma 3551 Divisione intera tra due numeri positivi LL 3552 Elevamento a potenza LL 3552 Radice quadrata crcicr rai Le e ia 3552 Pattoriale s lippi EE EAEE E pela ip 3553 Ricerca sequenziale i iss siii i 3553 3543 Capitolo 3 3 Basic introduzione Il Basic un linguaggio di programmazione nato solo per scopi didattici anche se ormai non si pu pi considerare tanto adatto neanche per questo La semplicit di questo linguaggio fa s che si trovino quasi sempre solo interpreti e non compilatori in ogni caso la natura stessa del linguaggio tale per cui questo dovrebbe sempre essere solo interpretato 313 1 Struttura fondamentale Di linguaggi Basic ne esistono tanti tipi anche con estensioni che vanno molto lontano rispetto all impostazione originale facendone in realt un linguaggio completamente diverso In questa descrizione si vuole fare riferimento al Basic tradizionale con tutte le sue limitazioni antiche In po senso l interprete Basic per GNU Linux che pi si avvicina a questo livello
128. EP 1 1080 LET Z Z I 1090 NEXT 1100 PRINT fatt X Z 1110 END 1120 REM 314 7 Ricerca sequenziale Il problema della ricerca sequenziale all interno di un array stato descritto nella sezione 282 3 1 1000 RE 1010 REM ricercaseg bas 1020 REM Ricerca sequenziale 1030 RE 1040 RE 1050 INPUT Inserisci il numero di elementi N 1060 DIM A N 1070 FORI 0 TO N 1 1080 PRINT A I 1090 INPUT A I 100 NEXT 1110 INPUT Inserisci il valore da cercare X 1120 FOR I 0 TO N 1 1130 IF X A I THEN GOTO 1170 1140 NEXT 160 GOTO 1190 1170 PRINT L elemento A I contiene il valore X 180 END 1190 PRINT Il valore X non stato trovato 1200 END 1210 REM Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org 3554 Basic esempi di programmazione Parte lxii Nazionalizzazione e localizzazione 315 Gettext introduzione 315 1 Principio di funzionamento LL LL 315 2 Fasi di preparazione i iii 315 3 Abbinamento a un PACCETLOX osea aa eaaa ln 315 4 Creazione e mantenimento dei file PO nunn nne enenu 315 5 Gettext con i programmi Perl LL Indice analitico del volume 3555 3556 3556 3556 3558 3559 3560 3563 mine 15 Gettext introduzione Gettext l un sistema che aiuta nella traduzione
129. HANTABILITY or FITNESS FOR A PARTICULAR PURPOSE See the GNU General Public License for more details These conditions and this copyright apply to the whole work except where clearly stated in a different way Una copia della licenza GNU General Public License versione 2 si trova nell appendice A A copy of GNU General Public License version 2 is available in appendix Al 3568 The main distribution for Appunti di informatica libera is described below For every distribution channel the maintainer s name and address is also reported Internet e direct reading lt http fa2 swlibero org gt download lt ftp Ya2 swlibero orgfa2 gt and lt http a2 swlibero org ftp gt Michele Dalla Silvestra mds swlibero org e direct reading lt http Yappuntilinux torino linux it gt fip Mfp torino linux i appuntifinux gt Carlo Perassi carlo linux it e direct reading lt http sansone crema unimi it linuxfa2 HTML gt download lt http fsansone crema unimi it linux a2 gt Fabrizio Zeno Cornelli zeno filibusta crema unimi it direct reading lt http www pctime it servizi appunti linux gt download lt http www petime it servizifappunti linux a2 brelievo gt Franco Lazzero PCTIME pctime petime net download lt e direct reading lt http www a2 prosa it gt download lt ftp 7ftp a2 prosa it gt Davide Barbieri paci prosa it e direct reading lt http YMinux pueste it gt
130. K questa sequenza deve rappresentare il carattere lt BS gt backspace allora viene sostituita dalla sequenza y AWK introduzione 3599 Tabella 319 4 Elenco delle estensioni GNU alle espressioni regolari di AWK Operatore Descrizione y La stringa nulla all inizio o alla fine di una parola B La stringa nulla interna a una parola lt La stringa nulla all inizio di una parola gt La stringa nulla alla fine di una parola w Un carattere di una parola praticamente alnum _ W L opposto di w praticamente alnum _ 319 3 3 Campi e Variabili Le variabili sono espressioni elementari che restituiscono il valore che contengono AWK gesti sce una serie di variabili predefinite che possono essere lette per conoscere delle informazioni sui dati in ingresso oppure possono essere modificate per cambiare il comportamento di AWK Oltre a queste si possono utilizzare le variabili che si vogliono per farlo sufficiente assegnare loro un valore senza bisogno di definirne il tipo Se in un espressione si fa riferimento a una variabile che non mai stata assegnata questa re stituisce la stringa nulla che in un contesto numerico equivale allo zero In questo senso non c bisogno di inizializzare le variabili prima di usarle dal momento che noto il loro valore iniziale Eventualmente una variabile pu essere inizializzata a un valore determinato gi al momento
131. O 00 0 0 TIME_ 3224 reprocessore de f ine 3221 3221 reprocessore e li f 3222 Si reprocessore else 3222 P P p preprocessore tendi preprocessore i f de preprocessore i fnde preprocessore i preprocessore include 3220 C preprocessore line 3223 C preprocessore unde espressione regolare 3335 file make 3242 GCC 3193 GCC ottimizzazione 3193 GC 3410 Gettex 3556 Hanoi 3160 3237 3293 3383 3452 3514 3538 Java 3406 3413 3563 Java Development Kit 3410 Java do whil Java Java Java Java Java Java Java forl 3423 i fl 3420 super 3432 switch 3421 this 3433 variabili 3416 while 3422 JDK 3410 Kaffe 3406 Make 3242 makefile 3242 p2 parametro attuale 3266 parametro formale 3264 Pascal 3248 3254 3270 3278 Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal Pascal arra cas cons fo funzione 3263 i insieme 3274 procedur 3263 Read 3267 Readln 3267 record 3275 repeat unti1 3262 set of 3274 sottointervallc 3274 stringhe 3271 tipo enumerativo 3273 type 3272 while 3262 Write 3267 Writeln 3267 to C 3248 Perl 3301 Perl Perl abs 3365 array 3307 Perl atan2
132. OP riferimento_all interrogazione gt lt SQL DONE gt Anche all interno di questa struttura si possono usare le istruzioni lt SQL CONTINUE gt e lt SOL BREAK gt 327 4 Istruzioni Le istruzioni normali di WWW SQL ovvero quelle che non servono a descrivere delle strut ture di controllo sono descritte in questa sezione e in quelle seguenti In particolare si pu notare che WWW SQL offre delle istruzioni per la lettura semplificata dell esito di un interrogazione SQL e altre per la lettura dettagliata fino ad arrivare a distinguere riga per riga e campo per campo E importante chiarire che anche se un interrogazione serve principalmente per leggere dati da una relazione di una base di dati nello stesso modo attraverso WWW SQL si potrebbero fare delle registrazioni Segue un elenco di istruzioni di tipo vario mentre nelle sezioni seguenti vengono raccolte altre istruzioni pi specifiche e Emissione di una stringa con espansione di variabili lt SQL PRINT stringa gt L istruzione lt SQL PRINT gt permette di emettere una stringa Dal momento che un file HTML non ha bisogno di accorgimenti particolari per mostrare una stringa costante evidente che il senso di questa istruzione sta nella possibilit di indicare delle variabili da espandere come nell esempio seguente lt P gt Il contatore ha raggiunto il livello lt SQL PRINT contatore
133. RE 3572 espressione regolare 3572 3580 initdb 3668 ISO 8601 3645 M4 3618 M4 changeconri 3626 M4 define 3622 M4 divert 362 M4 dn M4 forlo M4 ifdef M4 ifelse M4 include 3626 M4 shi ftl 3625 M4 sinclude 3626 M4 undefine 3624 M4 undivert 3627 PAGER 3684 PgAccess 3706 pg_dump 3688 3690 pg_passwd 3676 PostgreSQL 3667 3706 PostgreSQL autenticazione 3675 PostgreSQL LibPQ 3680 postmaste programmazione PostgreSQL 3667 programmazione SQL 3642 3692 programmazione WWW SQL 3714 psqlI 3680 3681 RDBMS 3632 RE 3572 regexp 3572 3580 E oN N N 3625 24 O S RE ON N IS 3732 relazione 3632 SED 3584 SQL 3642 3692 3714 SRE 3572 triggel 3725 tuple 3632 postgres pg_hba conf 3675 postgres pg_shado postgres pg_use SPGDATA 3667 3668 SPGHOST 3680 SPGLIR 3668 SPGPORT 3680 3733 3734
134. RI AIA UID Nominativo Cognome Nome Ufficio Sasso 3il 545 5 5 3 3 3 555 77a ilo O root Pallino Pinco CED 515 rmario Rossi Mario Contabilit 501 bbianco Bianchi Bianco Magazzino 502 rrosso Rossi Rosso Contabilit r La tabella mostra una relazione contenente le informazioni sugli utenti di un centro di elabo razione dati Si pu osservare che sia l attributo UID che l attributo Nominativo possono essere da soli una chiave per la relazione Se da questa relazione si vuole ottenere una proiezione contenente solo gli attributi Cognome e Ufficio non essendo questi due una chiave della relazione si perdono delle tuple Figura 322 5 Proiezione delle colonne cognome e ufficio della relazione utenti Cognome Ufficio Pallino CED Rossi Contabilit Bianchi Magazzino t La figura 322 5 mostra la proiezione della relazione Utenti in cui sono stati estratti solo gli attributi Cognome e Ufficio In tal modo le tuple che prima corrispondevano al numero VID 515 e 502 si sono ridotte a una sola quella contenente il cognome Rossi e l ufficio Contabilit Da questo esempio si dovrebbe intendere che la proiezione ha senso prevalentemente quando gli attributi estratti costituiscono una chiave della relazione originaria La congiunzione di relazioni o
135. Se il confronto ha successo viene restituita la posizione in cui inizia la corrispondenza nella stringa inoltre le variabili predefinite RSTART e RLENGTH vengono impostate rispettivamente a questa posizione e alla lunghezza della corrispondenza Se il confronto fallisce la funzione restituisce il valore zero e cos viene impostata la variabile RSTART mentre RLENGTH riceve il valore 1 sprintf stringa di formato espressione sa La funzione sprintf restituisce una stringa in base alla stringa di formato indicata co me primo parametro in cui le metavariabili vengono sostituite nell ordine dai parametri successivi Le metavariabili in questione sono state elencate nelle tabelle 319 6 e 319 7 importo 10000 sprintf Il totale di EUR Si IVA importo L espressione finale dell esempio restituisce la stringa Il totale di EUR 10000 IVA sub regexp rimpiazzo stringa_da_modificare La funzione sub cerca all interno della stringa fornita come ultimo parametro oppure all in terno del record attuale la prima corrispondenza con l espressione regolare indicata come primo parametro Quindi sostituisce quella corrispondenza con la stringa fornita come secondo para metro L espressione regolare dovrebbe poter essere fornita in forma costante senza che questo fatto venga inteso come un confronto implicito con il record attuale L u
136. T NULL Cognome char 40 NOT NULL Nome char 40 NOT NULL Indirizzo varchar 60 DEFAULT sconosciuto Telefono varchar 40 NOT NULL Un altro vincolo importante quello che permette di definire che un gruppo di colonne deve rappresentare dati unici in ogni riga cio che non siano ammissibili righe che per quel gruppo di colonne abbiano dati uguali Segue lo schema sintattico relativo CREATE TABLE nome_tabella nome_colonna tipo alb UNIQUE nome_colonna es esi L indicazione dell unicit pu riguardare pi gruppi di colonne in modo indipendente Per ottenere questo si possono indicare pi opzioni UNIQUE il caso di osservare che il vincolo UNIQUE non sufficiente per impedire che i dati possano essere indeterminati Infatti il valore indeterminato NULL diverso da ogni altro NULL L esempio seguente crea la stessa tabella gi vista negli esempi precedenti specificando che i dati della colonna del codice devono essere unici per ogni riga Introduzione a SQL 3651 CREATE TABLE Indirizzi Codice integer NOT NULL Cognome char 40 NOT NULL Nome char 40 NOT NULL Indirizzo varchar 60 DEFAULT sconosciuto Telefono varchar 40 NOT NULL UNIQUE Codice Quando una colonna o un gruppo di colonne costituisce un riferimento importante per identifi care le varie righe che compongono la tabella si p
137. VIEW Presenze dettagliate AS SELECT Presenze Giorno Presenze Ingresso Presenze Uscita Indirizzi Cognome Indirizzi Nome FROM Presenze Indirizzi WHERE Presenze Codice Indirizzi Codice L esempio mostra la creazione della vista Presenze dettagliate ottenuta dalle tabelle Presenze e Indirizzi In pratica questa vista permette di interrogare direttamente la ta bella virtuale Presenze dettagliate invece di utilizzare ogni volta un comando SELECT molto complesso per ottenere lo stesso risultato 325 4 9 Aggiornamento delle righe La modifica di righe gi esistenti avviene attraverso l istruzione UPDATE la cui efficacia viene controllata dalla condizione posta dopo la parola chiave WHERE Se tale condizione manca l effetto delle modifiche si riflette su tutte le righe della tabella L esempio seguente aggiunge una colonna alla tabella degli indirizzi per contenere il nome del comune di residenza degli impiegati successivamente viene inserito il nome del comune SferopoLli in base al prefisso telefonico ALTER TABLE Indirizzi ADD COLUMN Comune char 30 UPDATE Indirizzi SET Comune Sferopoli WHERE Telefono gt 022 AND Telefono lt 023 In pratica viene aggiornata solo la riga dell impiegato Pinco Pallino 325 4 10 Cancellazione delle righe L esempio seguente elimina dalla tabella delle presenze le righe riferite alle registrazioni
138. WWW SQL GNU GPL 3714 PostgreSQL accesso attraverso WWW SQL 3715 327 2 Preparazione delle basi di dati e accesso Perch il programma CGI possa accedere alle basi di dati di PostgreSQL occorre ricordare di predisporre gli utenti e i permessi necessari all interno della gestione delle basi di dati stesse Di solito si prevede la possibilit di accesso per l utente nobody dal momento che il servente viene avviato solitamente con i privilegi di questo utente e di conseguenza il programma CGI eredita la stessa personalit Vale la pena di ricordare che per PostgreSQL occorre aggiungere l utente nobody nel modo seguente postgres createuser nobody Quindi occorre intervenire nelle basi di dati regolando i permessi attraverso i comandi GRANT e REVOKE tenendo conto che a questo proposito si pu consultare quanto gi spiegato nel capitolo Per fare un esempio volendo concedere l accesso in lettura alla tabella Indirizzi della base di dati anagrafe all utente nobody si potrebbe agire come si vede di seguito postgres psql anagrafe nvio anagrafe gt GRANT SELECT ON Indirizzi TO nobody nvio Tuttavia occorre tenere in considerazione il fatto che non tutte le distribuzioni GNU Linux sono organizzate in modo che 1 privilegi di funzionamento del programma servente del servizio HTTP siano pari a quelli dell utente nobody Per esempio nel caso della distribuzione GNU Linux
139. _IT ISO 8859 1 LC_CTYPE it_IT ISO 8859 1 LC_COLLATE it_IT ISO 8859 1 LC_MONETARY it_IT ISO 8859 1 export LANG export LC_CTYPE LC_COLLATE LC_MONETARY PGDATESTYLE ISO export PGDATESTYLE usr bin postmaster i S D var lib pgsql 324 2 3 Organizzazione degli utenti e delle basi di dati Per fare in modo che gli utenti possano accedere al DBMS occorre che siano stati registrati all interno del sistema di PostgreSQL stesso In pratica pu trattarsi solo di utenti gi riconosciuti nel sistema operativo che vengono aggiunti e accettati anche da PostgreSQL Per l inserimento di questi utenti si utilizza createuser come nell esempio seguente su postgresi mio postgres createuseri Invio Enter name of user to add gt daniele nvio Enter user s postgres ID or RETURN to use unix user ID 500 gt Invio In tal modo stato definito l inserimento dell utente daniele confermando il suo numero UID Is user daniele allowed to create databases y n y Inmio All utente daniele stato concesso di creare delle nuove basi di dati Is user daniele allowed to add users y n n Imio 3674 PostgreSQL struttura e preparazione All utente non viene concesso di aggiungere altri utenti createuser daniele was successfully added Da questo esempio si pu comprendere quali siano le possibilit di attribuzione di privilegi ai vari utenti del sistema DBMS In p
140. _dati Permette di specificare la directory di inizio della struttura dei dati del DBMS S Specifica che il programma deve funzionare in modo silenzioso senza emettere alcuna segnalazione diventando un processo discendente direttamente da quello iniziale Init disassociandosi dalla shell e quindi dal terminale da cui stato avviato Questa opzione viene utilizzata particolarmente per avviare il programma all interno del la procedura di inizializzazione del sistema quando non sono necessari dei controlli di funzionamento Probabilmente la scelta del nome postmaster un po infelice dal momento che potrebbe far pensare all am ministratore del servizio di posta elettronica Come al solito occorre un po di attenzione al contesto in cui ci si trova PostgreSQL struttura e preparazione 3671 b percorso_del_programma_terminale Se il programma terminale ovvero postgres non si trova in uno dei percorsi contenuti nella variabile di ambiente PATH necessario specificare la sua collocazione il percorso assoluto attraverso questa opzione d livello_di_diagnosi Questa opzione permette di attivare la segnalazione di messaggi diagnostici debug da parte di postmaster e da parte dei programmi terminali a pi livelli di dettaglio e 1 segnala solo il traffico di connessione e 2 o superiore attiva la segnalazione diagnostica anche nei progr
141. _utente data_prestito return TE T3 end if end language plpgsql Inizialmente si assegnano alle variabili numero_inventario codice utente e data _prestito i valori corrispondenti n_inv cod_ut e data_p Successivamente vie ne definita la variabile data_restituzione di tipo date alla quale viene assegnato il valo Volendo rimanere nell ambito di psql si pu usare il comando per avviare temporaneamente il programma di creazione e modifica dei file di testo 3730 Le funzioni e i trigger in PostgreSQL un esercitazione didattica re sentinella 2050 1 1 quindi la variabile prestito di tipo record che dovr contenere la riga letta dalla tabella prestiti nel caso la lettura vada a buon fine con l istruzione select into prestito from prestiti where Sostanzialmente si legge la tabella prestiti e se si trova una riga che soddisfa la condizione di uguaglianza tra n_inv e il numero di inventario del libro che si vuole dare a prestito e tra la data_r e la data fittizia del 2050 01 01 significa che il libro gi a prestito Se questa riga viene trovata con la condizione if found la funzione deve uscire dal blocco begin end ed emettere un avviso che il libro gi a prestito altrimenti deve inserire la riga in oggetto nella tabella prestiti con l istruzione insert into prestiti con i dati passati da
142. a a seconda delle caratteristiche particolari che da questa tabella si vogliono ottenere La sintassi pi semplice quella seguente CREATE TABLE nome_tabella specifiche Tuttavia sono proprio le specifiche indicate tra le parentesi tonde che possono tradursi in un sistema molto confuso La creazione di una tabella elementare pu essere espressa con la sintassi seguente CREATE TABLE nome_tabella nome_colonna tipo Le In questo modo all interno delle parentesi vengono semplicemente elencati i nomi delle colonne seguiti dal tipo di dati che in esse possono essere contenuti L esempio seguente rappresenta l 1 struzione necessaria a creare una tabella composta da cinque colonne contenenti rispettivamente informazioni su codice cognome nome indirizzo e numero di telefono CREATE TABLE Indirizzi Codice integer Cognome char 40 Nome char 40 Indirizzo varchar 60 Telefono varchar 40 323 4 2 Valori predefiniti Quando si inseriscono delle righe all interno della tabella in linea di principio possibile che i valori corrispondenti a colonne particolari non siano inseriti esplicitamente Se si verifica que sta situazione purch ci sia consentito dai vincoli viene attribuito a questi elementi man canti un valore predefinito Questo pu essere stabilito all interno delle specifiche di creazione della tabella in mancanza di tale definizione viene
143. a allo scopo di applicarvi una funzione Funzione Descrizione apply funzione lista Esegue la funzione utilizzando gli elementi della lista come argomenti map funzione lista Esegue la funzione iterativamente per gli elementi delle liste for each funzione lista Esegue la funzione iterativamente per gli elementi delle liste 308 3 1 apply apply funzione lista La funzione apply esegue una funzione a cui affida gli elementi di una lista come altrettanti argomenti In pratica apply funzione elem_1 elem_2 elem_n equivale a funzione elem_1 elem_2 elem_n Per esempio apply 1 2 gt 3 3498 Scheme liste e vettori 308 3 2 map map funzione lista La funzione map scandisce una o pi liste tutte con la stessa quantit di elementi in modo tale che a ogni ciclo viene passato alla funzione l insieme ordinato dell i esimo elemento di ognuna di queste liste La funzione restituisce una lista contenente i valori restituiti dalla funzione a ogni ciclo Anche se viene rispettato l ordine delle varie liste dat non garantisce che la scansione avvenga dal primo elemento all ultimo L esempio seguente esegue la somma di una serie di coppie di valori restituendo la lista dei risultati map 1 2 3 4 5 6 gt 5 7 9 308 3 3 for each for each funzione lista La fu
144. a compiere Ci perch in tal caso si utilizza un azione o un criterio di selezione predefinito questo particolare verr ripreso quando verranno mostrati i primi esempi GNU GPL Dalla descrizione fatta chiaro che le parentesi graffe indicate nello schema sintattico fanno parte delle regole e vanno intese in senso letterale 3592 AWK introduzione 3593 L azione di una regola AWK molto simile a un programma C o Perl con tante semplificazioni dove il record selezionato viene passato attraverso dei campi che ricordano i parametri delle shell comuni 0 1 2 In pratica un azione di una regola AWK un programma a s stante che viene eseguito ogni volta che il criterio di selezione della regola si avvera 319 1 1 Selezione e azione predefinita Una regola che non contenga l indicazione del criterio di selezione fa s che vengano prese in considerazione tutte le righe dei dati in ingresso In AWK il valore booleano Vero si esprime con qualunque valore differente dallo zero e dalla stringa nulla dal momento che entrambi questi rappresentano invece il valore Falso in un contesto booleano In altre parole una regola che non contenga l indicazione del criterio di selezione come se avesse al suo posto il valore uno che si traduce ogni volta in un risultato booleano Vero cosa che permette la selezione di tutti i record Una regola che non contenga l indicazione dell azione da compiere
145. a figura si pu osservare che disponibile una casella di selezione attraverso la quale si pu richiedere di salvare come vista In particolare con il pulsante grafico Save QUERY DEFINITION si salva il modello dell interrogazione con il nome fissato in alto ma volendo con il pulsante gra fico visuar DESIGNER si accede a una maschera per la definizione grafica dell interrogazione come si vede nella figura 326 7 Figura 326 7 Finestra per la creazione visuale di un interrogazione Add table Show SQL Execute SQL Save to query builder Close Field nome cognome Table Indirizzi Indirizzi Sort unsorted unsorted Criteria In alto appare una casella in cui si deve indicare il nome di una tabella da cui si vogliono pre levare i campi una volta fatto appare un riepilogo di questi campi in un riquadro Questi nomi possono essere trascinati con il puntatore del mouse in basso dove vengono elencati i campi da includere nell interrogazione se si sbaglia gli elementi che si vogliono togliere possono essere cancellati premendo il tasto Canc Del nelle tastiere inglesi Nella figura mostrata sono gi PostgreSQL accesso attraverso PgAccess 3711 stati trascinati e depositati i campi del nome e del cognome Al termine se si soddisfatti del risultato si pu confermare con il pulsante grafico SAVE TO QUERY BUILDER ritrovando poi nella finestra precedente l interrogaz
146. a prossima riga immediatamente tenendo conto che se non stata usata l opzione n prima di passare alla prossima viene emessa quella precedente come al solito Lo scopo di questo comando fare in modo che le direttive successive si trovino di fronte una riga nuova 3590 SED introduzione w file Copia le righe nel file indicato creandolo per l occasione comandi Un raggruppamento di comandi pu essere realizzato delimitandolo tra parentesi graffe Tuttavia importante osservare che in questo caso i comandi vanno indicati ognuno in una riga differente inoltre la parentesi graffa di chiusura deve apparire da sola in una riga Di solito non c la necessit di usare un raggruppamento dal momento che basta ripetere la stessa selezione di righe con un altro comando Alcuni comandi che qui non vengono descritti richiedono una scomposizione in pi righe indicando la continuazione attraverso il simbolo V Dal momento che questi comandi non vengono mostrati quello che si vuole far notare che la barra obliqua inversa come simbolo si continuazione ha un significato speciale in SED pertanto non va usata se non si conosce esattamente il risultato che si ottiene effettivamente 318 5 Esempi In questa sezione vengono mostrati alcuni esempi dell utilizzo di SED A seconda dei casi e dell utilit della cosa si fa riferimento a direttive fornite nella riga di comando con o senza
147. a selezionare la voce relativa che si trova sulla par te sinistra nella figura 326 3 si vede selezionata la gestione delle tabelle Nel riquadro centrale 3708 PostgreSQL accesso attraverso PgAccess c lo spazio per elencare i nomi degli oggetti di quel tipo che risultano presenti mentre sopra appaiono alcuni pulsanti grafici che si riferiscono alle cose che si possono fare con tali oggetti Evidentemente il pulsante grafico New serve a creare un oggetto nuovo Oren serve ad acce dervi e Des zey serve a modificarne la struttura ammesso che ci sia consentito in base al tipo di oggetto Tuttavia il men object offre altre possibilit per esempio la modifica del nome dell oggetto e la visualizzazione della sua struttura PgAccess gestisce una serie di oggetti aggiuntiva rispetto a quanto fa PostgreSQL Per realiz zarli PgAccess gestisce delle tabelle aggiuntive che non vengono mostrate all utente distin guibili per il fatto di avere un nome che inizia per pga_ In generale queste tabelle hanno tutti i permessi di accesso per tutti gli utenti di PostgreSQL 326 3 Tabelle La figura mostra l esempio della creazione di una tabella molto semplice per contene re una serie di indirizzi In particolare si pu osservare il fatto che PgAccess abbia convertito opportunamente la lettera nella sequenza xe0 Alla creazione della tabella dopo avere selezionato
148. a tale inserimento Nella tabella prestiti vi il campo data_r che riporta la data di rientro di un libro Quando un libro viene dato a prestito questa data verr inserita in modo predefinito usando un valore assurdo 2050 01 01 che serve a indicare che il libro a prestito Conseguentemente quando si inserisce un prestito nuovo se nella tabella prestiti esiste una riga con un attributo n_inv uguale a quello che si vuole inserire e data_r equivalente al valore convenzionale indicante che il libro a prestito il DBMS deve avvisare dell errore Nell esercitazione seguente questo controllo viene fatto in due modi differenti prima con l utilizzo di una funzione poi con l utilizzo di un trigger 328 2 In classe al lavoro Si immagina di avere un unico elaboratore nel quale sia gi installato PostgreSQL Per prima cosa ci si deve collegare all elaboratore GNU Linux come utente postgres per creare la base di dati postgres createdb biblioteca 3725 3726 Le funzioni e i trigger in PostgreSQL un esercitazione didattica Successivamente ci si connette alla base di dati biblioteca con il programma cliente psql per creare le tabelle postgres psql h localhost d biblioteca U postgresi nio biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt bi
149. a variabile lis la stessa cosa avrebbe dovuto essere scritta nel modo seguente verifica se la lista vuota Mulo rd 62 34 6N gt f calcola la lunghezza della lista length 1 2 3 4 5 6 gt 6 308 1 3 Operazioni fondamentali con le liste L accesso agli elementi singoli di una lista un impresa piuttosto complessa che si attua fonda mentalmente con le funzioni car e cdr A queste due si affianca anche cons il cui scopo quello di costruire una lista Per comprendere il senso di queste funzioni occorre tenere presente che per Scheme una lista una coppia composta dal primo elemento ovvero l elemento car e dalla parte restante ovvero la parte cdr Per la precisione una coppia una lista mentre la lista vuota non una coppia La lista contenente un solo elemento la composizione dell unico elemento a disposizione e della lista vuota 3494 Scheme liste e vettori Figura 308 1 La parte car e la parte cdm che compongono le liste di Scheme 1 23 4 5 6 7 8 9 10 TIJ car lista cdr lista Le due funzioni car e cdr hanno come argomento una lista della quale restituiscono rispet tivamente il primo elemento e la lista restante quando si elimina il primo elemento Si osservino gli esempi seguenti car 12 3 cdr 1 2 3 gt 1 gt 2 3 4 5 6 Data l idea che ha Scheme sulle
150. a volta espansa anche la macro con i parametri ottenuti viene eseguita un altra analisi del risultato con il quale si possono eseguire altre espansioni di macro oppure si pu ottenere la semplice eliminazione delle coppie di apici dalle stringhe delimitate Le operazioni svolte da M4 per espandere una macro sono elencate dettagliatamente di seguito 1 Vengono suddivisi gli elementi contenuti tra parentesi ignorando gli spazi iniziali e includendo quelli finali Per esempio miamacro a mio d equivalente a miamacro a mio d 2 Vengono espanse le macro contenute eventualmente tra i parametri Continuando l esempio precedente supponendo che mio sia una macro che si espande nella stringa gn Din E a causa della sostituzione di mio si ottiene in pratica quanto segue miamacro a b c d Infine tutto si riduce a miamacro a b c d dove i parametri sono esattamente una a seguita da uno spazio e poi le altre lettere b c e d 3 Una volta risolti i parametri viene espansa la macro 4 Il risultato dell espansione viene rianalizzato alla ricerca di stringhe delimitate a cui togliere gli apici esterni e di altre macro da espandere In un certo senso si potrebbe dire che le stringhe delimitate come previsto da M4 siano del le macro che restituiscono il contenuto in modo letterale perdendo quindi la coppia di apici pi esterni Questo significa che ci che appare all interno di una
151. alita Invio wio create table prestiti nvio np serial mio n_inv char 5 references libri Zio cod ut char 5 references utenti mio data_p date check data_p lt data _r Ivio data _r date default 2050 1 1 nvio nvio 3727 A questo punto si vanno a popolare le tabelle esclusa la tabella prestiti qui bisogna fare attenzione inserendo prima i dati delle tabelle che non hanno chiavi esterne successivamente inserendo quelle tabelle che fanno riferimento alle prime tramite chiavi esterne Per esempio necessario popolare la tabella localita prima della tabella editori biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt insert into localita citta cap prov naz vio values TREVISO 31100 TV I Imio insert into localita citta cap prov naz vio values PADOVA 35100 PD I nvio insert into localita citta cap prov naz vio values MILANO 20100 MI I nvio insert into editori cod_ ed rag _ soc indirizzo Vcitta telefono nvio biblioteca gt PADOVA biblioteca gt values 1 CEDAM SPA VIA JAPPELLI 5 6 049 8239111 mio insert into editori cod_ed rag_soc indirizzo Ccitta telefono mio biblioteca gt gt MILANO values 2
152. amente Questo pu servire per impedire l accesso da parte di un certo gruppo di nodi L accesso pu essere controllato attraverso l abbinamento di una parola d ordine agli utenti di PostgreSQL Queste parole d ordine possono essere conservate in un file di testo con una struttura simile a quella di etc passwd oppure nel file postgres pg_shadow che in pratica una tabella questo particolare verr ripreso in seguito Inoltre l autenticazione pu avvenire attraverso un sistema Kerberos oppure attraverso il pro tocollo IDENT capitolo 185 In questo ultimo caso ci si fida di quanto riportato dal siste ma remoto il quale conferma o meno che la connessione appartenga a quell utente che si sta connettendo 324 3 1 postgres pg_hba conf Il file postgres pg_hba conf permette di definire quali nodi possono accedere al servizio DBMS di PostgreSQL eventualmente stabilendo anche un abbinamento specifico tra basi di dati e nodi di rete Le righe vuote e il testo preceduto dal simbolo vengono ignorati I record cio le righe contenenti le direttive del file in questione sono suddivisi in campi separati da spazi o caratteri di tabulazione Il formato pu essere riassunto nei due modelli sintattici seguenti local base_di dati autenticazione_utente mappa host base_di_dati indirizzo_ip maschera_degli_indirizzi autenticazione_utente mappa Nel primo caso si intendono controllar
153. amma AWK non dovrebbe essere fatto per modificare i file di partenza inoltre si d per scontato che ci sia una lettura dei file di origine infatti ci avviene di solito senza una richiesta esplicita Dal punto di vista di AWK un file che viene analizzato composto da record corrispondenti normalmente alle righe del file di testo stesso dove per il codice di interruzione di riga pu essere specificato espressamente come qualcosa di diverso rispetto al solito Un programma AWK composto fondamentalmente da regole che stabiliscono il comporta mento da prendere nei confronti dei dati in ingresso I commenti sono introdotti dal simbolo e terminano alla fine della riga inoltre le righe vuote e quelle bianche vengono ignorate nello stes so modo La struttura delle regole di un programma AWK si pu esprimere secondo lo schema seguente criterio_di_selezione azione In pratica ogni regola si suddivide in due parti un istruzione iniziale che definisce quali record prendere in considerazione e un azione pi o meno articolata indicata all interno di parentesi graffe da eseguire ogni volta che si incontra una corrispondenza con il criterio di selezione stabilito Questa descrizione solo una semplificazione che per il momento serve a iniziare la comprensione di questo linguaggio Una regola di un programma AWK pu contenere l indicazione esplicita del solo criterio di selezione o della sola azione d
154. ammi terminali oltre ad aggiungere dettagli sul funzionamento di postmaster Di norma i messaggi diagnostici vengono emessi attraverso lo standard output da parte di postmaster anche quando si tratta di messaggi provenienti dai programmi termi nali Perch abbia significato usare questa opzione occorre avviare postmaster senza P opzione S i Abilita le connessioni TCP IP Senza l indicazione di questa opzione sono ammissibili solo le connessioni locali attraverso socket di dominio Unix Unix domain socket p porta Se viene avviato in modo da accettare le connessioni attraverso la rete l opzione i specifica una porta di ascolto diversa da quella predefinita 5432 Esempi su postgres c postmaster S D var lib pgsql L utente root avvia postmaster dopo essersi trasformato temporaneamente nell u tente postgres attraverso su facendo in modo che il programma si disassoci dal la shell e dal terminale diventando un discendente da Init Attraverso l opzione D si specifica la directory di inizio dei file della base di dati su postgres c postmaster i S D var lib pgsql Come nell esempio precedente specificando che si vuole consentire in modo preliminare l accesso attraverso la rete su postgres c nohup postmaster D var lib pgsqgl gt var log pglog 2 gt amp 1 amp L utente root avv
155. ando chiaramente il cognome e il nome della persona a cui si riferiscono SELECT Presenze Giorno Presenze Ingresso Presenze Uscita Indirizzi Cognome Indirizzi Nome FROM Presenze Indirizzi WHERE Presenze Codice Indirizzi Codice Ecco quello che si dovrebbe ottenere giorno ingresso uscita cognome nome 01 01 1999 07 30 00 13 30 00 Pallino Pinco 01 01 1999 07 35 00 13 37 00 Tizi Tizio 01 01 1999 07 45 00 14 00 00 Cai Caio 01 01 1999 08 30 00 16 30 00 Semproni Sempronio 01 02 1999 07 35 00 13 38 00 Pallino Pinco 01 02 1999 08 35 00 14 37 00 Tizio Tizi 01 02 1999 07 40 00 13 30 00 Semproni Sempronio 325 4 7 Alias Una stessa tabella pu essere presa in considerazione come se si trattasse di due o pi tabelle differenti Per distinguere tra questi punti di vista diversi si devono usare degli alias che sono in pratica dei nomi alternativi Gli alias si possono usare anche solo per questioni di leggibilit L esempio seguente la semplice ripetizione di quello mostrato nella sezione precedente con l aggiunta per della definizione degli alias Pre e Nom PostgreSQL il linguaggio 3699 SELECT Pre Giorno Pre Ingresso Pre Uscita Nom Cognome Nom Nome FROM Presenze AS Pre Indirizzi AS Nom WHERE Pre Codice Nom Codice 325 4 8 Viste Attraverso una vista possibile definire una tabella virtuale PostgreSQL allo stato attuale consente di utilizzare le viste in sola lettura CREATE
156. arati da una virgola ma soprattutto senza gli apici di delimitazione define ECHO ECHO uno due tre L esempio si traduce nel modo seguente si osservi l effetto degli spazi prima e dopo i parametri uno due tre SE Rappresenta tutti i parametri forniti effettivamente alla macro separati da una virgola con gli apici di delimitazione La differenza rispetto a sottile e esempio seguente dovrebbe permettere di comprenderne il significato define CIAO maramao define ECHO1 1 2 3 define ECHO2 define ECHO3 ECHO1 CIAO CIAO CIAO ECHO2 CIAO CIAO CIAO ECHO3 CIAO CIAO CIAO Le ultime righe del risultato che si ottiene sono le seguenti maramao maramao CIAO maramao maramao CIAO maramao CIAO CIAO 3624 M4 introduzione 321 2 4 Eliminazione di una macro Una macro pu essere eliminata attraverso la macro interna undefine secondo la sintassi seguente undefine nome_macro Per esempio undefine CIAO elimina la macro CIAO per cui da quel punto in poi la parola CIAO manterr il suo valore letterale undefine non restituisce alcun valore e pu essere usata solo con un parametro quello che rappresenta la macro che si vuole eliminare 321 3 Istruzioni condizionali iterazioni e ricorsioni M4 non utilizza istru
157. are la riga 100 e poi l intervallo da 150 a 200 LIST 100 150 200 RUN riga_iniziale Il comando RUN viene usato normalmente senza argomenti per avviare il programma caricato nell interprete Se si aggiunge il numero di una riga quel punto verr utilizzato per iniziare l interpretazione ed esecuzione del programma e NEW Cancella il programma che eventualmente fosse caricato nell interprete e LOAD file Carica il programma indicato dal nome del file posto come argomento Se esisteva pre cedentemente un programma in memoria quello viene eliminato Solitamente il nome del file deve essere indicato delimitandolo tra apici doppi probabile che l interprete aggiunga un estensione predefinita od obbligatoria e SAVE file Salva il programma con il nome specificato come argomento Solitamente il nome del file deve essere indicato delimitandolo tra apici doppi E probabile che l interprete aggiunga un estensione predefinita od obbligatoria 3546 Basic introduzione DEL riga_iniziale riga_finale Elimina le righe indicate dall argomento Pu trattarsi di una sola riga o di un intervallo o di una serie di intervalli RENUM riga_iniziale E incremento Rinumera le righe del programma aggiornando i riferimenti alle subroutine E possibile indicare il numero iniziale e anche l incremento Di solito se non
158. articolare opportuno osservare che ogni base di dati appartiene all utente che lo ha creato il quale diventa il suo amministratore particolare per la precisione il DBA L eliminazione di un utente PostgreSQL avviene in modo simile attraverso destroyuser come nell esempio seguente su postgresiImio postgres destroyuserti nvio Enter name of user to delete gt daniele nvio destroyuser delete of user daniele was successful L eliminazione di un utente PostgreSQL comporta anche l eliminazione delle basi di dati a lui appartenenti Le informazioni sugli utenti autorizzati a gestire in qualunque modo il sistema di basi di dati sono archiviate nel file postgres pg_shadow visibile anche attraverso la vista defini ta dal file postgres pg_user utile sapere questo per comprendere il significato dei messaggi di errore quando fanno riferimento a questo file 324 2 4 Controllo diagnostico Inizialmente l utilizzo di PostgreSQL si pu dimostrare poco intuitivo soprattutto per ci che riguarda le segnalazioni di errore spesso troppo poco esplicite Per permettere di avere una vi sione un po pi chiara di ci che accade sarebbe bene fare in modo che postmaster produca dei messaggi diagnostici possibilmente diretti a un file o a una console virtuale inutilizzata Nella sezione in cui si descrive il funzionamento di postmaster appaiono alcuni esempi di avvio di questo pr
159. atto si indica l intervallo come un valore negativo aggiungendo all inizio un trattino il segno meno INTERVAL 10 YEAR 11 MONTH L esempio che si vede sopra esprime precisamente 10 anni e 11 mesi fa 323 3 Operatori funzioni ed espressioni SQL pur non essendo un linguaggio di programmazione completo mette a disposizione una serie di operatori e di funzioni utili per la realizzazione di espressioni di vario tipo 323 3 1 Operatori aritmetici Gli operatori che intervengono su valori numerici sono elencati nella tabella 323 2 Introduzione a SQL 3647 Tabella 323 2 Elenco degli operatori aritmetici Operatore e operandi Descrizione op Inverte il segno dell operando opl op2 Somma i due operandi opl op2 Sottrae dal primo il secondo operando opl op2 Moltiplica i due operandi opl op2 Divide il primo operando per il secondo opl op2 Modulo il resto della divisione tra il primo e il secondo operando Nelle espressioni tutti i tipi numerici esatti e approssimati possono essere usati senza limitazioni Dove necessario il sistema provvede a eseguire le conversioni di tipo 323 3 2 Operazioni con i valori data orario e con intervalli di tempo Le operazioni che si possono compiere utilizzando valori data orario e valori che esprimono inter valli di tempo hanno significato solo in alcune circostanze La tabella 323 3 elenca le operazioni possibili e il tipo di risultato che si ottien
160. azione espressione_di_selezione azione END azione END azione L ordine indicato non indispensabile tuttavia opportuno In pratica vengono eseguite nell ordine le seguenti fasi 1 vengono eseguite le azioni abbinate alle condizioni BEGIN ammesso che esistano 2 inizia la lettura del file in ingresso 3 per ogni record vengono valutate le espressioni di selezione 4 per ogni espressione che si avvera viene eseguita l azione corrispondente se pi espressioni si avverano simultaneamente vengono eseguite ordinatamente tutte le azioni relative 3596 AWK introduzione 5 alla fine vengono eseguite le azioni abbinate alle condizioni END Un programma AWK potrebbe essere composto anche solo da regole di tipo BEGIN o END Nel primo caso non nemmeno necessario leggere i dati in ingresso mentre nel caso ci sia una regola di tipo END ci diventa indispensabile perch l azione relativa potrebbe utilizzare le informazioni generate dalla lettura stessa AWK mette a disposizione una serie di funzioni predefinite consentendo la dichiarazione di altre funzioni personalizzate L ordine in cui appaiono queste funzioni non importante una funzione pu richiamare anche un altra funzione dichiarata in una posizione successiva 319 2 Avvio dell interprete L interprete di un programma AWK l eseguibile awk che di solito un collegamento a
161. azione aperta aggiungendo un estensione numerica separata da un punto dove lo zero corrisponde al primo campo e n 1 corrisponde al campo n esimo 3724 PostgreSQL accesso attraverso WWW SQL e Modifica della riga attuale all interno del risultato di un interrogazione lt SQL SEEK riferimento n_riga gt L istruzione lt SQL SEEK gt permette di modificare la riga attuale all interno di un in terrogazione Per indicare il numero della riga occorre tenere presente che lo zero corri sponde alla prima L esempio seguente fa in modo che la riga attuale diventi la seconda del riferimento RICHIESTA_1 lt SQL SEEK RICHIESTA_1 1 gt e Prelievo della riga attuale di un certo riferimento lt SQL FETCH riferimento gt L istruzione lt SQL FETCH gt permette di rendere disponibile il contenuto della riga attuale di un certo riferimento L esempio seguente preleva il contenuto della riga attuale del riferimento RICHIESTA_1 quindi mostra il primo e il secondo campo di questa riga che si presume corrispondano al cognome e al nome di una persona lt SQL FETCH RICHIESTA_1 gt lt P gt Cognome lt SQL PRINT RICHIESTA_1 0 gt lt P gt lt P gt Nome lt SQL PRINT RICHIESTA_1 1 gt lt P gt e Emissione di una stringa per ogni riga lt SQL PRINT_ROWS riferimento stringa gt L istruzione lt SQL PRINT_ROWS gt una sorta di
162. bash Come si vede il campo della parola d ordine occupato da un punto esclamativo che di fatto impedisce l accesso all utente postgres A questo punto si pongono due alternative a seconda che si voglia affidare la gestione del DBMS allo stesso utente root oppure che si voglia incaricare per questo un altro utente Nel primo caso non occorrono cambiamenti l utente root pu diventare postgres quando vuole con il comando su su postgres nel secondo caso l attribuzione di una parola d ordine all utente postgres permetter a una persona diversa di amministrare il DBMS passwd postgres bene ripetere che la directory iniziale di questo utente fittizio in questo caso var 1lib pgsql coincide con il punto di inizio della struttura dei dati del DBMS 324 1 3 Creazione del sistema di basi di dati La prima volta che si installa PostgreSQL molto probabile che venga predisposta automatica mente la directory postgres Se cos non fosse o se per qualche motivo si dovesse interve nire manualmente si pu utilizzare init db che per farlo si avvale di alcune informazioni con tenute nella directory definita dalla variabile di ambiente PGLIB che dovrebbe corrispondere a usr lib pgsql initdb opzioni Lo schema sintattico mostra in modo molto semplice l uso di initdb Se si definiscono cor rettamente le variabili di ambie
163. bella_1 L Sspecificazione_della_tabella_N WHERE condizione GROUP BY colonna_l L Per comprendere l effetto di questa sintassi si deve scomporre idealmente l operazione di selezione da quella di raggruppamento 1 la tabella ottenuta dall istruzione SELECT FROM viene filtrata dalla condizione WHERE 2 la tabella risultante viene riordinata in modo da raggruppare le righe in cui i contenuti delle colonne elencate dopo la clausola GROUP BY sono uguali 3 su questi gruppi di righe vengono valutate le funzioni di aggregazione 3660 Introduzione a SQL Figura 323 3 Carichi e scarichi in magazzino Movimenti vite40 01 01 1999 1200 vite30 01 01 1999 800 vite40 01 01 1999 1500 vite30 02 01 1999 1000 vite30 03 01 1999 2000 rond50 03 01 1999 500 vite40 04 01 1999 2200 Si osservi la tabella riportata in figura 323 3 mostra la solita sequenza di carichi e scarichi di magazzino Si potrebbe porre il problema di conoscere il totale dei carichi e degli scarichi per ogni articolo di magazzino La richiesta pu essere espressa con l istruzione seguente SELECT Codice SUM Carico SUM Scarico FROM Movimenti GROUP BY Codice Quello che si ottiene appare nella figura 323 4 Figura Carichi e scarichi in magazzino Codice SUM Carico SUM Scarico 3 3 vite40 4900 vite30 2000 1800 rond5
164. blioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt create table localita nvio citta char 20 primary key nvio cap char 5 vio prov char 2 nvio naz char 3 nvio Invio create table editori mio cod_ut char 3 primary key mio nome char 10 nvio cognome char 10 mio telefono char 11 mio indirizzo char 20 mio citta char 20 references localita Invio wio create table libri vio n_inv char 5 primary key mio autore char 25 mio titolo char 35 not nulls Zio collocazione char 15 mio soggetto char 11 mio cod _ ed char 5 references editori mio prezzo integer mio anno_ed char 4 Invio Invio create table utenti mio Le funzioni e i trigger in PostgreSQL un esercitazione didattica biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt biblioteca gt cod_ut char 5 primary key nvio nome char 10 nvio cognome char 10 mio telefono char 11 mio indirizzo char 20 mio citta char 20 references loc
165. ccess memorizza alcune informazioni nel file pgaccessroc e questo fatto facilita successivamente le operazioni di accesso alla base di dati da parte dell utente Contrariamente a quello che ci si potrebbe aspettare PgAccess un programma frontale realiz zato con molta cura e molto potente che permette di sfruttare bene le potenzialit di PostgreSQL Purtroppo un po difficile spiegare nel dettaglio il suo funzionamento pertanto lo scopo di que sto capitolo solo quello di permettere all utilizzatore di cominciare e di sapere come continuare Con l uso i particolari del suo funzionamento dovrebbero rivelarsi senza troppi problemi 326 1 Accesso alla base di dati PostgreSQL un DBMS in grado di gestire diverse basi di dati simultaneamente pertanto con PgAccess necessario stabilire per prima cosa quale sia la base di dati Dal men Database si seleziona la funzione open ottenendo la mascherina che si vede nella figura 326 2 Da l si possono indicare tutte le informazioni necessarie alla connessione con la base di dati desiderata in particolare per quanto riguarda le informazioni sull autenticazione queste sono richieste solo in base al modo in cui sono stati regolati i permessi di accesso da parte di PostgreSQL software libero con licenza speciale 3706 PostgreSQL accesso attraverso PgAccess 3707 Figura 326 2 Connessione alla base di dati prova presso il nodo locale utilizzan
166. certo linguaggio indipendentemente dalle variabili di ambiente relative Gettext introduzione 3559 Pertanto tornando all esempio iniziale si tratta della directory it LC_MESSAGES pippo mo In condizioni normali Gettext cerca questa directory a partire da usr share locale 0 eventualmente un altra posizione in base al modo in cui stato compilato tuttavia possibile ri chiedere espressamente una collocazione differente attraverso un istruzione gi vista da collocare nel programma interessato bindtextdomain pippo var tmp In tal caso se si scrive questo in un programma Gettext andr a cercare precisamente il file var tmp it LC_MESSAGES pippo mo 315 4 Creazione e mantenimento dei file PO E gi stato mostrato in breve come si crea un file PO attraverso il programma xgettext E il caso di osservare che xgettext pu ricevere l indicazione di pi file sorgenti che fanno capo allo stesso dominio di traduzione xgettext opzioni file_sorgente In particolare tra le opzioni pu essere interessante segnalare default domain dominio che serve a xgettext per conoscere il dominio a cui si fa riferimento creando cos il file dominio po invece del solito messages po xgettext default domain ciao c L esempio mostra come ottenere il file ciao po a partire da tutti i file che terminano con l estensio
167. come se fosse stata usata l opzione n per cui occorre fare attenzione ai commenti che appaiono nella prima riga di tali file SED introduzione 3589 e s espressione_regolare_elementare rimpiazzo parametri sxespressione_regolare_elementarexrimpiazzox parametri Con questo comando si vuole sostituire ci che viene delimitato dall espressione regola re con il testo di rimpiazzo tenendo conto dei parametri posti eventualmente alla fine L espressione regolare e il testo di rimpiazzo sono delimitati e separati attraverso una barra obliqua normale oppure da un altro simbolo scelto liberamente Per inserire questa bar ra obliqua o qualunque altro simbolo che svolga tale compito nell espressione regolare occorre proteggerlo con la barra obliqua inversa ovvero x L espressione regolare pu essere realizzata in modo da individuare alcune parti delimitate attraverso e bisogna ricordare che si tratta di espressioni regolari elementari ov vero di BRE in tal caso nella stringa di rimpiazzo si pu fare riferimento a questi blocchi attraverso la forma n dove n un numero da uno a nove che indica l n esimo riferi mento a questi raggruppamenti della parte di riga presa in considerazione dall espressione regolare Nella stringa di rimpiazzo si pu anche utilizzare la e commerciale amp per fare riferimento a tutto il blocco di testo a cui corrispo
168. come si vede la funzione non tiene in considerazione i valori che potrebbero trasportare In effetti la funzione potrebbe utilizzare ugualmente le variabili z e i anche se queste non fossero dichiarate tra i parametri formali In tal modo per queste variabili sarebbero globali pertanto si potrebbero porre dei problemi di conflitti con altre variabili con lo stesso nome usate altrove nel programma 3611 3612 AWK funzioni e array bin awk f function somma x y z i Zoo i KDE for i 1 i lt y i z return z 1 print 1 2 somma 1 2 Questo ultimo esempio mostra un programma completo per ottenere la somma dei primi due campi di ogni record fornito in ingresso 320 2 Array Gli array di AWK sono simili agli array associativi di Perl A seconda dell uso che si vuole fare di questi array ci si pu anche dimenticare di questa particolarit di AWK utilizzando i soliti indici numerici che per AWK tratta come stringhe 320 2 1 Dichiarazione e utilizzo di un array La dichiarazione di un array avviene nel momento in cui vi si fa riferimento In pratica con l istruzione a 2 ciao si assegna la stringa ciao all elemento 2 dell array a Se l array non esisteva gi viene creato per l occasione Nello stesso modo se l elemento 2 non esisteva viene creato all interno dell array In pratica l array di AWK un insie
169. crizione write char carattere Scrive il carattere indicato attraverso la porta predefinita write char carattere porta Scrive il carattere indicato attraverso la porta indicata write oggetto Scrive la rappresentazione dell oggetto attraverso la porta predefinita write oggetto porta Scrive la rappresentazione dell oggetto attraverso la porta indicata display oggetto Mostra l oggetto attraverso la porta predefinita display oggetto porta Mostra l oggetto attraverso la porta indicata newline Emette un codice di interruzione di riga attraverso la porta predefinita newline porta Emette un codice di interruzione di riga attraverso la porta indicata L esempio seguente dovrebbe chiarire la differenza tra la funzione write e display Gli oggetti vengono emessi attraverso lo standard output ovvero la porta predefinita write 1 2 visualizza 3 write ciao visualizza ciao write ciao come stai visualizza ciao come stai write A visualizza A display 1 2 visualizza 3 display ciao visualizza ciao display ciao come stai visualizza ciao come stai display A visualizza A E gi stato descritto l uso di newline che indispensabile per ottenere l avanzamento alla riga successiva In linea di principio non possibile inserire un carattere di controllo nella stringa emessa da write o da
170. cro 123 Tuttavia dal momento che un nome non pu cominciare con un numero non ci possono essere macro il cui nome corrisponda a un numero pertanto si pu evitare di utilizzare gli apici di delimitazione perch sarebbe comunque inutile Le stringhe delimitate oltre che per impedire l espansione di nomi che corrispondono a delle macro permettono di unire due macro Si osservi l esempio seguente miamacro_x ciao miamacro_y l intenzione quella di fare rimpiazzare a M4 le macro miamacro_x e miamacro_y con qualcosa facendo in modo che queste due parti si uniscano avendo al centro la parola ciao Si pu intuire che non sarebbe stato possibile scrivere il testo seguente miamacro_xciaomiamacro_y perch in tal modo non sarebbe stata riconosciuta alcuna macro Secondo lo stesso principio si pu unire il risultato di due macro senza spazi aggiuntivi utilizzando apici che delimitano una stringa nulla miamacro_x miamacro_y L espansione delle macro pone un problema in pi a causa del fatto che dopo l espansione il risultato viene riletto alla ricerca di altre macro Si osservi l esempio seguente supponendo che la macro miamacro_x restituisca la stringa miama nel caso in cui il suo unico parametro sia pari a 1 miamacro_x 1l cro_z Espandendo la macro si ottiene la stringa miama ma dal momento che viene fatta una scansio ne successiva la parola miamacro_z po
171. cui vengono elaborati sono affidabili quando gli eventi per cui si possono produrre alterazioni accidentali sono estremamente limitati L accesso ai dati deve essere controllabile Dovendo trattare una grande mole di dati in modo condiviso indispensabile che esistano dei sistemi di controllo degli accessi per evitare che determinate informazioni possano essere ottenute da chi non autorizzato oppure che vengano modificate da chi non ne il responsabile 322 1 1 Livelli di astrazione dei dati I dati gestiti da un DBMS devono essere organizzati a diversi livelli di astrazione Generalmente si distinguono tre livelli esterno logico e interno Il livello interno quello usato effettivamente per la memorizzazione dei dati In pratica rappresentato dai file che contengono effettivamente le informazioni e dal modo con cui questi file vengono utilizzati Il livello interno non importante per la progettazione di una base di dati e nemmeno per la scrittura di programmi che devono interagire con il DBMS Il livello logico o concettuale quello che descrive i dati secondo la filosofia del DBMS particolare con cui si ha a che fare Lo schema esterno un astrazione aggiuntiva che permette di definire dei punti di vista differenti dei dati descritti a livello logico L accesso ai dati avviene solo a questo livello anche se di fatto pu coincidere con il livello logico 3631 3632 Introduzione ai DBMS 322 1 2 Ruoli e sigl
172. data orario sono di tre tipi e servono rispettivamente a memorizzare un giorno particolare un orario normale e un informazione data ora completa DATE TIME TIME precisione TIME WITH TIME ZONE TIME precisione WITH TIME ZONE TIMESTAMP TIMESTAMP precisione TIMESTAMP WITH TIME ZONE TIMESTAMP precisione WITH TIME ZONE Il tipo DATE permette di rappresentare delle date composte dall informazione anno mese giorno Il tipo TIME permette di rappresentare un orario particolare composto da ore minuti secondi ed eventualmente frazioni di secondo Se viene specificata la precisione si intende defi nire un numero di cifre per la parte frazionaria dei secondi altrimenti si intende che non debbano essere memorizzate le frazioni di secondo Il tipo TIMESTAMP un informazione oraria pi completa del tipo TIME in quanto prevede tutte le informazioni dall anno ai secondi oltre alle eventuali frazioni di secondo Se viene specificata la precisione si intende definire un nu mero di cifre per la parte frazionaria dei secondi altrimenti si intende che non debbano essere memorizzate le frazioni di secondo L aggiunta dell opzione WITH TIME ZONE serve a specificare un tipo orario differente che as sieme all informazione oraria aggiunge lo scostamento espresso in ore e minuti dell ora locale Introduzione a SQL 3645 dal tempo
173. define i x 1 do lt i 0 set x x i set i i 1 Inizio del programma define x 0 define z 0 display Inserisci il numero intero positivo set x read newline set z fattoriale x display x display display z newline I In alternativa l algoritmo si pu tradurre in modo ricorsivo define fattoriale x G gt x 1 x fattoriale x 1 1 310 1 7 Massimo comune divisore Il problema del massimo comune divisore tra due numeri positivi stato descritto nella sezione 282 2 7 F medi scm Massimo Comune Divisore moltiplica lt x gt lt y gt define mcd x y do Scheme esempi di programmazione 3509 Inizio del programma define x 0 define y 0 define z 0 display Inserisci il primo numero intero positivo set x read newline display Inserisci il secondo numero intero positivo set y read newline set z mcd x y display MCD di display x display e display y display display z newline 310 1 8 Numero primo Il problema della determinazione se un numero sia primo o meno stato descritto nella sezione 282 2 8 i primol scm Numero primo primo lt x gt define primo x define np t define i 2 define j 0 do or gt i x not np set j truncate
174. definisca in modo non ambiguo questo stato di indeterminatezza Questo valore viene definito come NULL ed ammissibile per tutti i tipi di attributi possibili 322 2 3 Vincoli di validit I dati contenuti in una o pi relazioni sono utili in quanto sensati in base al contesto a cui si riferiscono Per esempio considerando la relazione Movimenti vista precedentemente questa deve contenere sempre un codice valido nell attributo Codice Se cos non fosse la registra zione data da quella tupla che dovesse avere un riferimento a un codice di articolo non valido non avrebbe alcun senso perch mancherebbe proprio l informazione pi importante l articolo caricato o scaricato Il controllo sulla validit dei dati pu avvenire a diversi livelli a seconda della circostanza Si possono distinguere vincoli che riguardano 1 il dominio dell attributo stesso quando si tratta di definire se l attributo pu assumere il valore NULL o meno e quando si stabilisce l intervallo dei valori ammissibili 2 gli altri attributi della stessa tupla quando dal valore contenuto in altri attributi della stessa tupla dipende l intervallo dei valori ammissibili per l attributo in questione 3 gli attributi di altre tuple quando dal valore contenuto negli attributi delle altre tuple della stessa relazione dipende l intervallo dei valori ammissibili per l attributo in questione 4 gli attributi di tu
175. dei messaggi dei programmi e al loro manteni mento Ci possono essere molti modi per realizzare un programma multilingua ma Gettext rap presenta probabilmente il metodo pi semplice in pratica che consente la traduzione successiva senza interferire con un eseguibile gi pronto purch predisposto per questo 315 1 Principio di funzionamento La logica di Gettext molto semplice il programma incorpora solo i messaggi in inglese all e sterno si associano una serie di file uno per ogni linguaggio disponibile con le traduzioni corri spondenti Non necessario codificare i messaggi in qualche modo perch la corrispondenza avviene in modo letterale in base al testo originale msgid Ss cannot create the temporary file s n msgstr s non possibile creare il file temporaneo s n L esempio che mostra un estratto ipotetico di un file PO di Gettext Portable object serve a comprendere il concetto La stringa preceduta dalla parola chiave msgid message identity quella di riferimento che viene rimpiazzata automaticamente da quella sottostante preceduta dalla parola chiave msgstr Le stringhe e le traduzioni di Gettext sono costanti nel senso che s viene preso come tale mentre il programma che lo sostituisce opportunamente In questo senso bisogna considerare che Gettext nato per il linguaggio C per essere usato in stringhe che siano argomento di funzioni come printf e sprintf
176. della base di dati Per esempio la base di dati prova2 collocata nella directory postgres base prova2 1 percorsi assoluti vanno interpretati in modo speciale in particolare nel caso della base di dati prova la directory corrispondente in realt home postgres base prova si osservi l inserzione di base PostgreSQL struttura e preparazione 3687 In generale normale che tutte le basi di dati vengano create a partire da postgres base pertanto non si dovrebbero vedere percorsi assoluti in questa tabella Verr mostrato in seguito quando pu verificarsi questa condizione 324 8 2 Copia e spostamento di una base di dati Prima di poter pensare a copiare o a spostare una base di dati occorre avere chiaro in mente che si tratta di file binari nel senso che non si tratta di file di testo contenenti informazioni collegate l una all altra in qualche modo pi o meno oscuro Queste informazioni possono a volte essere espresse anche in forma numerica in tal caso dipende dall architettura in cui sono state create Questo implica due cose fondamentali lo spostamento o la copia deve essere fatto in modo che non si perdano dei pezzi per la strada i file della stessa base di dati devono essere raccolti tutti assieme e lo spostamento in un altra architettura non dovrebbe essere ammissibile La copia di una base di dati per motivi di sicurezza un operazione semplice e cos anche il
177. della tabella da cui si attingono Quindi non valida una condizione che utilizza un riferimento a un nome che appare dopo la parola chiave AS abbinata alle espressioni delle colonne Per qualche motivo che verr chiarito in seguito pu essere conveniente attribuire un alias alla tabella da cui estrarre i dati Anche in questo caso si utilizza la parola chiave AS come indicato dalla sintassi seguente v ELECT specificazione_della_colonna_1 specificazione_della_colonna_N FROM tabella AS alias WHERE condizione Quando si vuole fare riferimento al nome di una colonna se per qualche motivo questo nome do vesse risultare ambiguo si pu aggiungere anteriormente il nome della tabella a cui appartiene separandolo attraverso l operatore punto L esempio seguente la proiezione dei cognomi e dei nomi della solita tabella degli indirizzi In questo caso le espressioni delle colonne rappre sentano solo le colonne corrispondenti della tabella originaria con l aggiunta dell indicazione esplicita del nome della tabella stessa SELECT Indirizzi Cognome Indirizzi Nome FROM Indirizzi A questo punto se al nome della tabella viene abbinato un alias si pu esprimere la stessa cosa indicando il nome dell alias al posto di quello della tabella come nell esempio seguente SELECT Ind Cognome Ind Nome FROM Indirizzi AS Ind 3656 Introduzione a SQL 323 6 2 Interrogazioni ordinate P
178. di_interrogazione_sql riferimento gt SQL FREE riferimento gt PostgreSQL accesso attraverso WWW SQL 3723 e Apertura di un interrogazione lt SQL QUERY stringa_di_interrogazione_sql riferimento gt L istruzione lt SQL QUERY gt definisce una stringa di interrogazione da inviare al ser vente DBMS A questa interrogazione viene abbinato un riferimento costituito da un no me che in seguito deve essere usato per leggere l esito dell interrogazione Nell esem pio che appare nella sezione precedente si vedeva l istruzione seguente con la quale si selezionano tutte le righe della tabella Indirizzi abbinando questo risultato al nome RICHIESTA_l lt SQL QUERY SELECT FROM Indirizzi RICHIESTA_1 gt e Tabella rapida lt SQL QTABLE riferimento borders gt L istruzione lt SQL QTABLE gt consente di rappresentare rapidamente il risultato di un interrogazione attraverso una tabella HTML In particolare utilizzando la parola chiave borders la tabella che si genera avr i bordi delle caselle visibili L esempio seguen te mostra in che modo visualizzare rapidamente il risultato dell interrogazione abbinata al nome RICHIESTA 1 lt SQL QTABLE RICHIESTA_1 gt Elenco rapido lt SQL QLONGFORM riferimento gt L istruzione lt SQL QLONGFORM gt si utilizza in modo simile a lt SQL OTABLE
179. diatamente al record successivo Ese mpi if 1 gt 100 print 2 Se il primo campo del record attuale contiene un valore numerico superiore a 100 emette il contenuto del secondo campo if S1 gt 100 print 2 contatore else print 3 Se il primo campo del record attuale contiene un valore numerico superiore a 100 emet te il contenuto del secondo campo incrementando la variabile contatore di un unit Altrimenti emette solo il contenuto del terzo campo i 1 while i lt 10 print i i Emette i numeri da 1 a 10 for i 1 i lt 10 i4 print i Esattamente come nell esempio precedente utilizzando un ciclo enumerativo for i 1 i lt 20 i if i 1 13 HI print i Emette i numeri da 1 a 20 escluso il 13 for i 1 i lt 20 i ie di 130 continue print 1 Come nell esempio precedente utilizzando una tecnica diversa l istruzione continue fa riprendere il ciclo prima di avere completato le altre istruzioni isi while 1 if i gt 10 3606 AWK introduzione break print i i Emette i numeri da 1 a 10 utilizzando un ciclo iterativo perpetuo il numero 1 equivale a Vero per AWK che viene interrotto dall istruzione break 319 4 4 Chiamata di funzione e funzioni predefinite La chiamata di una funzione avviene come nel linguaggio C tenendo conto che per evitare am biguit
180. dizione di uscita gt i y istruzioni del ciclo set z somma z x al termine restituisce il valore contenuto nella variabile x Zz al termine restituisce il valore contenuto nella variabile z Questo esempio solo un pretesto per mostrare che le variabili locali x y e z della funzione somma hanno effetto solo nell ambito di questa funzione inoltre la funzione somma e le variabili locali x y e z della funzione moltiplica hanno effetto solo nell ambito della funzione moltiplica stessa Scheme struttura del programma e campo di azione 3487 307 1 1 Ridefinizione Nel capitolo introduttivo si accennato al fatto che la ridefinizione di una variabile o di una funzione implica una nuova allocazione di memoria senza liberare quella utilizzata precedente mente Questo implica che i riferimenti fatti in precedenza a quell oggetto continuano a utilizzare in pratica la vecchia allocazione Si osservi l esempio seguente define x 20 x gt 20 define y 2 x y gt 40 define x 100 x gt 100 y gt 40 Quanto mostrato con questo esempio non ha nulla di eccezionale rispetto ai linguaggi di pro grammazione tradizionali Tuttavia potrebbe risultare strano da un punto di vista strettamente matematico Se invece lo scopo fosse quello di definire un sistema di equazioni y dovrebbe essere trasformato in una fun
181. do l autenticazione predefinita Host localhost Port 5432 Database prova Password Open Cancel Attraverso PgAccess non possibile creare una base di dati Per questo occorre usare il comando createdb di PostgreSQL descritto nel capitolo 324 La base di dati aperta assieme all indicazione del nodo presso la quale si trova il DBMS con cui si interagisce appare in basso nella finestra principale di PgAccess Figura 326 3 Quando attiva una connessione con una base di dati lo si vede dalle informazioni che appaiono in basso nella finestra principale di PgAccess Database Object Help New Open Design Tables Queries Views Sequences Functions Reports Forms Scripts localhost importante ricordare che PgAccess tiene nota dell ultima base di dati aperta attraverso il file di configurazione pgaccessrc in questo modo la connessione viene ritentata automatica mente all avvio del programma la volta successiva che lo si utilizza Tuttavia questo particolare del funzionamento di PgAccess pu essere configurato attraverso la funzione preferences del men Database 326 2 Gli oggetti secondo PgAccess Dal punto di vista di PgAccess una base di dati contiene degli oggetti secondo la stessa filosofia di PostgreSQL Questi possono essere delle tabelle il risultato di interrogazioni SQL delle viste delle stampe ecc Per intervenire su ognuno di questi oggetti bast
182. e 3574 Espressioni regolari standard 316 3 1 Ancoraggio iniziale e finale In condizioni normali un espressione regolare pu individuare una sottostringa collocata in qua lunque posizione della stringa di partenza Per indicare espressamente che la corrispondenza deve iniziare obbligatoriamente dall inizio della stringa oppure che deve finire esattamente alla fine della stringa stessa si usano due ancore rappresentate dai caratteri speciali e ovvero dall accento circonflesso e dal dollaro Per la precisione un accento circonflesso che si trovi all inizio di un espressione regolare identi fica la sottostringa nulla che si trova idealmente all inizio della stringa da analizzare nello stesso modo un dollaro che si trovi alla fine di un espressione regolare identifica la sottostringa nulla che si trova idealmente alla fine della stringa stessa Nel caso particolare delle espressioni rego lari BRE i caratteri e hanno questo significato anche nell ambito di una sottoespressione all inizio o alla fine della stessa Una sottoespressione una porzione di espressione regolare delimitata nel modo che verr mostrato in seguito Per fare un esempio l espressione regolare ini corrisponde alla sottostringa ini della strin ga inizio Nello stesso modo l espressione regolare ini corrisponde alla sottostringa ini della stringa scalini Un espressione
183. e COMMIT INSERT INTO Indirizzi VALUES 01 Pallino Pinco Via Biglie 1 0222 222222 COMMIT L esempio mostra un uso intensivo dell istruzione COMMIT dove dopo l inserimento di una riga nella tabella Indirizzi viene confermata immediatamente la transazione COMMIT INSERT INTO Indirizzi VALUES 01 Pallino Pinco Via Biglie 1 0222 222222 ROLLBACK Questo esempio mostra un ripensamento per qualche motivo Dopo l inserimento di una ri ga nella tabella Indirizzi viene annullata la transazione riportando la tabella allo stato precedente 323 11 Cursori Quando il risultato di un interrogazione SQL deve essere gestito all interno di un programma si pone un problema nel momento in cui ci che si ottiene pi di una sola riga Per poter scorrere un elenco ottenuto attraverso un istruzione SELECT riga per riga si deve usare un cursore La dichiarazione e l utilizzo di un cursore avviene all interno di una transazione Quando la transazione si chiude attraverso un COMMIT o un ROLLBACK si chiude anche il cursore Introduzione a SQL 3665 323 11 1 Dichiarazione e apertura L SQL prevede due fasi prima dell utilizzo di un cursore la dichiarazione e la sua apertura DECLARE cursore INSENSITIVE SCROLL CURSOR FOR SELECT OPEN cursore Nella dichiarazione la parola chiave
184. e Esempi changecom Cambia i simboli di apertura e chiusura dei commenti facendo in modo di farli coincidere con quelli utilizzati dal linguaggio C changecom Cancella la definizione dei commenti 321 4 3 include sinclude include file sinclude file Attraverso la macro include possibile incorporare un file esterno nell input in corso di ela borazione Ci permette di costruire file macro di M4 strutturati Tuttavia necessario fare at tenzione alla posizione in cui si include un file esterno si immagini un file che viene incluso nei parametri di una macro M4 introduzione 3627 La differenza tra include e sinclude sta nel fatto che il secondo non segnala errori se il file non esiste Esempi include mio m4 Include il file mio m4 321 4 4 divert undivert M4 consente l uso di uno strano meccanismo detto deviazione o diversion attraverso il quale parte del flusso dell output pu essere accantonato temporaneamente per essere rilasciato in un momento diverso Per ottenere questo si utilizzano due macro interne divert e undivert divert numero_deviazione undivert numero_deviazione L La prima macro divert serve ad assegnare un numero di deviazione alla parte di output generato a partire dal punto in cui questa appare nell input Questo numero pu essere omesso e in tal ca
185. e sed il quale interpreta un programma scritto in un linguaggio apposito che gli viene fornito come argomento della riga di comando o in un file sed opzioni programma_di_elaborazione file Il testo del programma o il nome del file che lo contiene pu essere indicato attraverso delle opzioni adatte oppure in loro mancanza pu essere indicato come primo degli argomenti che seguono le opzioni Alla fine possono essere indicati i file da elaborare e in loro mancanza si usa lo standard input Alcune opzioni e istruzioni expression istruzioni Questa opzione che pu essere utilizzata anche pi volte permette di specificare delle istruzioni SED che si aggiungono alle altre eventualmente gi indicate f file_delle_istruzioni file file_delle_istruzioni Questa opzione permette di indicare un file contenente una serie di istruzioni SED An che questa opzione pu essere usata pi volte aggiungendo ogni volta altre istruzioni al programma globale n quiet silent 3584 SED introduzione 3585 In condizioni normali alla fine di ogni ciclo SED emette il contenuto di quello che viene definito come pattern space In pratica ogni riga letta ed elaborata viene emessa attraverso lo standard output senza bisogno di un comando apposito Utilizzando questa opzione si fa in modo di evitare tale comportamento cos che il programma di elabo
186. e i lt x scale 0 j x i j x j i if j 0 return 0 i i 1 return 1 Per verificare se un numero sia primo si utilizzi la funzione p x y 1 indica un numero primo 0 indica un numero che non primo 3536 BC esempi di programmazione 312 2 Scansione di array In questa sezione vengono mostrati alcuni algoritmi legati alla scansione degli array portati in BC Per la spiegazione degli algoritmi se non sono gi conosciuti occorre leggere quanto riportato nel capitolo 282 Per usare questi programmi mancando un sistema normale di interazione con l utilizzatore necessario creare un array prima di utilizzare la funzione che svolge il lavoro di ricerca o di riordino Per esempio nel caso della funzione r per la ricerca sequenziale bc ricercasegq Dbi nvio Ricerca sequenziale r lt lista gt lt elemento gt lt inizio gt lt fine gt a 0 3 nvio a 1 10 nvio a 2 33 nvio a 3 56 nvio r a 33 0 3 mvio 2 Ctrl d 312 2 1 Ricerca sequenziale Il problema della ricerca sequenziale all interno di un array stato descritto nella sezione 282 3 1 ricercaseg b r lt lista gt lt elemento gt lt inizio gt lt fine gt define r 1 x a z auto i for i a i lt z i if x 1 i return i La corrispondenza non stata trovata return 1 Ricerca sequenziale r lt lista gt lt el
187. e a eliminare gli spazi iniziali e finali superflui In questo modo se i nomi e i cognomi sono stati inseriti con degli spazi iniziali questi non vanno a influire sull ordinamento 323 6 3 Interrogazioni simultanee di pi tabelle Se dopo la parola chiave FROM si indicano pi tabelle ci vale anche se si indica pi volte la stessa tabella si intende fare riferimento a una tabella generata dal prodotto di queste Se per esempio si vogliono abbinare due tabelle una di tre righe per due colonne e un altra di due righe per due colonne quello che si ottiene sar una tabella di quattro colonne composta da sei righe Infatti ogni riga della prima tabella risulta abbinata con ogni riga della seconda v ELECT specificazione_della_colonna_1 L specificazione_della_colonna_N FROM specificazione_della_tabella_1 L specificazione_della_tabella_N WHERE condizione Nel capitolo precedente stato mostrato un esempio di gestione del magazzino Vengono riproposte le tabelle di quell esempio ancora pi semplificate figura 323 1 Introduzione a SQL 3657 Figura 323 1 Tabelle Articoli e Movimenti di una gestione del magazzino ipotetica Articoli Codice Descrizione 3 4 vite30 Vite 3 mm dado30 Dado 3 mm rond50 Rondella 5 mm x r Movimenti Codice Data Carico Scarico _ dado30 01 01 1999 1200 vite30 01 01
188. e all interprete AWK il programma come argomento nella ri ga di comando Come si vede il risultato del comando 1s 1 etc viene incanalato attraverso una pipeline fornendolo in ingresso al programma AWK che si limita a selezionare i record in cui il primo campo corrisponde esattamente alla stringa rw r r In pratica vengono selezionati i record contenenti informazioni sui file che hanno solo i permessi 0644g L esempio seguente ottiene lo stesso risultato attraverso la comparazione con un espressione regolare lIs 1 etc awk 1 rw r r print 0 I due esempi successivi sono equivalenti e servono a selezionare tutti i record che non corrispondono al modello precedente 1s l etc awk 1 rw r r print 0 1s l etc awk 1 rw r r print 0 L esempio seguente utilizza due espressioni per attivare e disattivare la selezione dei record awk 0 0 print 0 prova c In questo caso i dati in ingresso provengono dal file prova c che si intende essere un pro gramma scritto in linguaggio C Le due espressioni servono a selezionare le righe che contengo no commenti nella forma Si osservi l uso della barra obliqua inversa per proteggere i caratteri che altrimenti sarebbero stati interpretati diversamente La variante seguente funzionalmente identica all esempio precedente dal momento che un espressio
189. e cifre numeriche space definisce l insieme dei caratteri che visivamente si traducono in uno spazio di qualche tipo Oltre a queste sono definiti dei raggruppamenti come nel caso di alnum che indica l insieme di alpha e digit All interno di un espressione tra parentesi quadre per indicare una classe di caratteri si usa il nome riconosciuto dalla localizzazione racchiuso tra i delimitatori e 1 Per esempio per ottenere la corrispondenza con una sottostringa del tipo filen dove n pu essere una cifra numerica qualunque si pu utilizzare l espressione regolare file digit La tabella 316 1 riepiloga i nomi delle classi di caratteri riconosciuti normalmente dalle localizzazioni si veda anche la pagina di manuale locale 5 Tabella 316 1 Elenco dei nomi standard attribuiti alle classi di caratteri Classe di caratteri Descrizione upper Collezione alfabetica delle lettere maiuscole lower Collezione alfabetica delle lettere minuscole alpha Lettere alfabetiche di solito l unione di upper e lower digit Cifre numeriche alnum Cifre alfanumeriche di solito l unione di alpha e digit punct I caratteri di punteggiatura space I caratteri definiti come spazi bianchi per qualche motivo blank Di solito comprende solo lt space gt e lt tab gt entrl I caratteri di controllo che non possono essere rappresentati
190. e da creare Inoltre opportu no utilizzare pi di una volta l opzione verbose v per avere una visione chiara del procedimento ovvero dei motivi per i quali alle volte il file non viene compilato msgfmt vvvv output file prova mo prova po L esempio mostra l utilizzo tipico di questo programma dove in particolare viene richiesto un livello di dettaglio delle informazioni generate molto elevato quattro volte v 3560 Gettext introduzione 315 4 1 Commenti fuzzy Ogni volta che qualche indicazione all interno di un file PO incerta in quanto predefinita o determinata automaticamente in modo non sicuro viene aggiunto un commento speciale conte nente la parola fuzzy In presenza di commenti del genere si richiede un intervento manuale dopo il quale deve essere rimossa tale parola altrimenti msgfmt si rifiuta di completare la compilazione dei file PO 315 5 Gettext con i programmi Perl Esiste la possibilit di utilizzare Gettext anche nei programmi Perl Per questo necessario in cludere nel programma Perl il riferimento a un modulo esterno Perl gettext Il tutto si svolge in maniera molto simile a un programma C inserendo inizialmente le istruzioni seguenti use POSIX use Locale gettext setlocale LC_ALL textdomain dominio_gettext bindtextdomain dominio_gettext directory Per esempio se si tratta del programma Pippo il domi
191. e essere simile a quello seguente tizio wsLHjp FutW0s caio a6 1 45w2q4 Se questo file dovesse contenere dei campi aggiuntivi separati con i soliti due punti questi verrebbero semplicemente ignorati Quando il cliente deve accedere utilizzando questo tipo di autenticazione deve presentarsi con il nominativo utente e la parola d ordine Quando si usa il programma psql che verr descritto in seguito occorre specificare l opzione w La parola d ordine cifrata che si colloca nel secondo campo del record di questo file ottenuta con la solita funzione di sistema crypt Per inserire facilmente un utente o per cambiare la parola d ordine di un utente registrato precedentemente si utilizza il programma pg_passwd indicando semplicemente in quale file intervenire pg_passwd file L utilizzo banale come si vede dall esempio seguente in cui si aggiunge l utente semproni importante ricordare di operare in qualit di utente postgres cd postgresi Invio su postgresI nvio postgres pg_passwd utentil nvio Username semproni nvio New password Invio Re enter new password Invio 324 4 Configurazione nella distribuzione GNU Linux Debian La distribuzione GNU Linux Debian molto attenta alla coerenza dei pacchetti che si installa no pertanto nel caso di PostgreSQL pu essere controllato tutto a partire dai file che si tro vano
192. e gli accessi provenienti da clienti avviati nello stesso sistema locale utilizzando un socket di dominio Unix nel secondo si fa riferimento ad accessi attraverso la rete connessioni TCP e Il secondo campo del record serve a indicare il nome di una base di dati per la quale auto rizzare l accesso in alternativa si pu usare la parola chiave all in modo da specificare tutte le basi di dati in una sola volta e I campi indirizzo_ip e il successivo maschera_degli_indirizzi rappresentano un gruppo di indirizzi di nodi che hanno diritto di accedere a quella base di dati determinata Il campo autenticazione_utente rappresenta il tipo di autenticazione attraverso una parola chiave Le pi comuni sono trust l autenticazione non ha luogo e si accetta il nome fornito dall utente senza alcuna verifica 3676 PostgreSQL struttura e preparazione reject la connessione viene rifiutata in ogni caso password viene richiesta una parola d ordine riferita all utente verificandola in base al contenuto di un file indicato nel campo successivo oppure in base a quanto riportato dal catalogo postgres pg_shadow crypt viene richiesta una parola d ordine riferita all utente verificandola in base al contenuto di postgres pg_shadow La differenza pi importante rispetto a password sta nel fatto che in quel caso la parola d ordine viene trasmessa in chiaro me
193. e in base al tipo di operatori utilizzato Tabella 323 3 Operatori e operandi validi quando si utilizzano valori data orario e valori che esprimono intervalli di tempo Operatore e operandi Risultato data_orario data_orario Intervallo data_orario intervallo Data orario intervallo data_orario Data orario intervallo intervallo Intervallo intervallo 4 numerico Intervallo numerico intervallo Intervallo 323 3 3 Operatori di confronto e operatori logici Gli operatori di confronto determinano la relazione tra due operandi Il risultato dell espressione composta da due operandi posti a confronto di tipo booleano Vero o Falso Gli operatori di confronto sono elencati nella tabella 323 4 Tabella 323 4 Elenco degli operatori di confronto Operatore e operandi Descrizione opl 0p2 Vero se gli operandi si equivalgono opl lt gt 0p2 Vero se gli operandi sono differenti opl lt 0p2 Vero se il primo operando minore del secondo opl gt op2 Vero se il primo operando maggiore del secondo opl lt op2 Vero se il primo operando minore o uguale al secondo opl gt op2 Vero se il primo operando maggiore o uguale al secondo Quando si vogliono combinare assieme diverse espressioni logiche si utilizzano gli operatori logici Come in tutti i linguaggi di programmazione si possono usare le parentesi tonde per raggruppare le espressioni logiche in modo da chiarire l ordine di risoluzione
194. e interpretato in base otto 777 Invio 511 Infatti 777s equivale a 511 Quando per si vuole intervenire nuovamente sulla variabile ibase occorre ricordare che per il momento la base di numerazione otto Pertanto volendo tornare alla base 10 bisogna trasformare prima il valore in ottale 12g ibase 12 nvio 3522 BC 3523 777 Invio 777 Diversamente scrivendo nuovamente ibase 10 non si cambierebbe la base di numerazione perch quel numero andrebbe inteso in ottale Esiste anche una convenzione per cui 1 valori numerici espressi con una sola cifra vanno intesi correttamente in modo indipendente dal valore della variabile ibase Pertanto 9 vale sempre come se fosse scritto in base 10 dal momento che non ci possono essere ambiguit anche se la base di numerazione fosse pi grande Le cifre che possono essere usate per comporre un numero sono i simboli da 0 a 9 con le lettere maiuscole da A a F In questo modo si possono rappresentare agevolmente numeri con basi di numerazione che vadano da 2 a 16 mentre per basi di numerazione superiori le cose si complicano In pratica si possono rappresentare basi superiori scrivendo il risultato a cifre separate dove ogni cifra espressa come un numero in base 10 Per esempio la stringa 100 esprimente un numero in base 20 verrebbe rappresentato come 01 00 oo L esempio seguente mostra in che modo arrivare a questo r
195. e numeri 255 63 3737 e 512 Il ri sultato ci che si vede alla fine 30737871360 La stessa cosa si poteva inserire in uno script di shell nel modo seguente in cui il risultato della moltiplicazione viene assegnato alla variabile RISULTATO RISULTATO echo 255 63 3737 512 bc Tuttavia BC in realt un linguaggio di programmazione bench semplice la cui caratteristi ca fondamentale quella di poter definire l approssimazione del risultato indipendentemente dall architettura dell elaboratore per il quale stato compilato 311 1 Base di numerazione Una caratteristica importante di BC la possibilit di gestire basi di numerazione diverse da 10 Tuttavia ci pu creare degli imprevisti inattesi per cui occorre fare attenzione quando si tenta di modificare la convenzione normale La base di numerazione viene modificata intervenendo attraverso due variabili predefinite che fanno parte del linguaggio denominate ibase e obase La prima contiene la base di nu merazione per i numeri che vengono inseriti mentre la seconda contiene la base usata per la rappresentazione dei risultati In condizioni normali sia ibase sia obase contengono il va lore 10 Tuttavia quando si cambia il valore di ibase si possono creare delle complicazioni supponendo di voler inserire valori in base otto basta agire come segue ibase 8 Invio Nel momento in cui si scrive un valore questo vien
196. e numeri o stringhe Per la pre cisione le variabili che contengono stringhe hanno un nome che termina con il simbolo dollaro I nomi delle variabili a parte l eventuale aggiunta del dollaro per le stringhe sono soggetti a regole differenti a seconda dell interprete in particolare occorre fare attenzione al fatto che l interprete potrebbe distinguere tra maiuscole e minuscole In origine si poteva utilizzare una sola lettera alfabetica L assegnamento di una variabile avviene attraverso l operatore secondo la sintassi seguente LET variabile valore L uso esplicito dell istruzione LET facoltativo Basic introduzione 313 3 1 Espressioni numeriche 3547 Gli operatori tipici che intervengono su valori numerici restituendo valori numerici sono elencati nella tabella Tabella 313 1 Elenco d no di espressioni nume la loro posizione egli operatori utilizzabili in presenza di valori numerici all inter riche Le metavariabili indicate rappresentano gli operandi e Operatore e operandi Descrizione var valore opl opl op2 opl op2 opl op2 opl op2 opl MOD op2 opl op2 SQRT op1 SIN op1 COS op1 TAN op1 ARCTAN opl LOG op1 ABS op1 Assegna alla variabile il valore alla destra Inverte il segno dell operando Somma i due operandi Sottrae dal primo il secondo operando Moltiplica i due operandi Divide il primo operando per il secondo
197. e pratica con il linguaggio SQL il modo migliore quello di utilizzare il programma psql con il quale si possono eseguire interrogazioni interattive con il servente Quello che conta tenere a mente che per poterlo utilizzare occorre avere gi creato una base di dati vuota in cui verranno inserite delle nuove tabelle con le quali si eseguiranno altre operazioni Attraverso le istruzioni SQL si fa riferimento sempre a un unica base di dati quella a cui ci si collega quando si avvia psql Utilizzando psql le istruzioni devono essere terminate con il punto e virgola oppure dal comando interno g go 325 2 Tipi di dati e rappresentazione I tipi di dati gestibili sono un punto delicato della compatibilit tra un DBMS e lo standard SQL Vale la pena di riepilogare i tipi pi comuni compatibili con lo standard SQL che possono essere trovati nella tabella 325 1 Si deve tenere presente che SQL utilizza diversi modi possibili per definire lo stesso tipo di dati per esempio il tipo CHAR pu essere indicato anche come CHARACTER cos pure VARCHAR pu essere espresso come CHAR VARYING O CHARACTER VARYING Quando PostgreSQL ammette l utilizzo di una forma riconosce poi anche le altre 3692 PostgreSQL il linguaggio 3693 Tabella 325 1 Elenco dei tipi di dati standard utilizzabili con PostgreSQL espressi nella loro forma compatta Tipo Standard Descr
198. e standard Lo studio sui DBMS ha generato degli acronimi che rappresentano persone o componenti es senziali di un sistema del genere Questi acronimi devono essere conosciuti perch se ne fa uso abitualmente nella documentazione riferita ai DBMS L organizzazione di una base di dati compito del suo amministratore definito DBA Data base administrator Eventualmente pu trattarsi anche di pi persone in ogni caso chi ha la responsabilit dell amministrazione di uno o pi basi di dati un DBA La definizione della struttura dei dati sia a livello logico che a livello esterno viene fatta attra verso un linguaggio di programmazione definito DDL Data definition language la gestione dei dati avviene attraverso un altro linguaggio detto DML Data manipulation language infine la gestione della sicurezza viene fatta attraverso un linguaggio DCL Data control language Nella pratica DDL DML e DCL possono coincidere come nel caso del linguaggio SQL 322 2 Modello relazionale Una base di dati pu essere impostata secondo diversi tipi di modelli logici di rappresentazione Quello pi comune che anche il pi semplice dal punto di vista umano il modello relazionale In tal senso un DBMS relazionale viene anche definito semplicemente come RDBMS Nel modello relazionale i dati sono raccolti all interno di relazioni Ogni relazione una raccolta di nessuna o pi tuple di tipo omogeneo La tupla rappresenta una s
199. efine part a z Si assume che a sia inferiore a z define i a 1 define cf z Vengono preparate delle variabili per controllare l uscita dai cicli define uscital define uscita2 define uscita3 Inizia il ciclo di scansione dell array set uscital f do uscital set uscita2 f do uscita2 Sposta i a destra 3516 Scheme esempi di programmazione if or gt vector ref vettore i vector ref vettore a gt i cf Interrompe il ciclo interno set uscita2 t Altrimenti incrementa l indice set i i 1 set uscita3 f do uscita3 Sposta cf a sinistra if lt vector ref vettore cf vector ref vettore a Interrompe il ciclo interno set uscita3 t Altrimenti decrementa l indice set cf cf 1 LE lt vef 1 avvenuto l incontro tra i e cf set uscital t Altrimenti vengono scambiati i valori begin inverti elementi i cf set i i 1 set cf cf 1 A questo punto vettore a z stato ripartito e cf la collocazione di vettorel a inverti elementi a cf A questo punto vettore cf un elemento un valore nella posizione giusta e cf ci che viene restituito cf ordina lt ele inf gt lt ele sup gt define ordina a z Viene preparata la variabile cf define cf 0 if gt z a begin set c
200. eletro della struttura case tipica di un tale script Volen do modificare la localizzazione predefinita in fase di compilazione occorre lo script mostrato prima Si suppone che lo script con il quale si modificano le variabili di localizzazione e si av via postmaster sia usr bin avvia_postmaster la modifica da apportare all esempio appena visto quella seguente case 1 in Start PostgreSQL struttura e preparazione 3673 echo n Avvio del servizio PostgreSQL su l postgres c usr bin postmaster i S D var lib pgsql su l postgres c usr bin avvia_postmaster echo r Oltre alla localizzazione attraverso le variabili di ambiente tradizionali si pu intervenire sulla variabile PGDATESTYLE il cui scopo quello di definire la forma di visualizzazione delle date La tabella 324 1 elenca le parole chiave che si possono assegnare a questa variabile e l effetto che ne deriva Tabella 324 1 Elenco dei formati di data gestibili con PostgreSQL Stile Descrizione Esempio ISO ISO 8601 1999 12 31 SQL Tipo tradizionale 12 31 1999 German 31 12 1999 Probabilmente la cosa migliore utilizzare il formato Iso che potrebbe anche diventa re quello predefinito nelle prossime versioni di PostgreSQL Volendo estendere lo script per l avvio di postmaster presentato all inizio basta aggiungere l impostazione della variabile PGDATESTYLE bin sh LANG it
201. ella classificazione di nomi e stringhe delimitate tra virgolette sono elementi sui quali non si applica alcuna trasformazione I commenti per M4 rappresentano solo una parte di testo che non deve essere analizzato alla ricerca di macro Quello che si ottiene la riproduzione di tale testo senza alcuna modifica In linea di principio i commenti sono delimitati dal simbolo fino alla fine della riga cio fino al codice di interruzione di riga M4 permette di modificare i simboli usati per delimitare i commenti o di annullarli del tutto il caso di soffermarsi un momento su questo concetto Quando si utilizza M4 spesso lo si fa per generare un file di configurazione o un programma scritto in un altro linguaggio Questi tipi di file potrebbero utilizzare dei commenti ma pu essere conveniente generare nel risultato dei commenti il cui contenuto cambia in funzione di situazioni determinate Si immagini di voler realizzare uno script di shell in cui notoriamente il commento si introduce con lo stesso simbolo volendo comporre il commento in base a delle macro diventa necessario fare in modo che M4 non consideri il simbolo come l inizio di un commento L unico tipo di dati che M4 pu gestire sono le stringhe alfanumeriche indipendentemente dal fatto che si usino gli apici per delimitarle Naturalmente una stringa contenente un numero pu avere un significato particolare che dipende dal contesto 3620 M4 introdu
202. eme esempi di programmazione 310 1 2 Moltiplicazione di due numeri positivi attraverso la somma Il problema della moltiplicazione tra due numeri positivi attraverso la somma stato descritto nella sezione 282 2 2 i moltiplical scm Moltiplica esclusivamente valori positivi moltiplica lt x gt lt y gt define moltiplica x y define z 0 define i 1 do gt i y set z z x set i i 1 Inizio del programma define x 0 define y 0 define z 0 display Inserisci il primo numero intero positivo set x read newline display Inserisci il secondo numero intero positivo set y read newline set z moltiplica x y display x display display y display display z newline In alternativa si pu modificare la funzione moltiplica in modo che il ciclo do gestisca la dichiarazione e l incremento dell indice i define moltiplica x y define z 0 do i 1 i 1 gt i y set z z x Scheme esempi di programmazione 3505 310 1 3 Divisione intera tra due numeri positivi Il problema della divisione tra due numeri positivi attraverso la sottrazione stato descritto nella sezione 282 2 3 dividil scm Divide esclusivamente valori positivi I dividi lt x gt lt y gt define dividi x y define z 0 define i x
203. emento gt lt inizio gt lt fine gt Esiste anche una soluzione ricorsiva che viene mostrata nella funzione seguente define r 1 x a z if a gt z return 1 if x 1 a return a return r 1 x a 1 z BC esempi di programmazione 3537 312 2 2 Ricerca binaria Il problema della ricerca binaria all interno di un array stato descritto nella sezione 282 3 2 ricercabin b xj r lt lista gt lt elemento gt lt inizio gt lt fine gt define r 1 x a z auto m Determina l elemento centrale scale 0 m a z 2 if m lt a Non restano elementi da controllare l elemento cercato non c return 1 if x lt 1 m Si ripete la ricerca nella parte inferiore return r 1 1 x a m 1 if x gt 1 m Si ripete la ricerca nella parte superiore return r 1 x m t1 z m rappresenta l indice dell elemento cercato return m Ricerca binaria r lt lista gt lt elemento gt lt inizio gt lt fine gt 312 3 Algoritmi tradizionali In questa sezione vengono mostrati alcuni algoritmi tradizionali portati in BC Per la spiegazione degli algoritmi se non sono gi conosciuti occorre leggere quanto riportato nel capitolo 282 Per consentire la visualizzazione del contenuto di un array necessario predisporre una fun zione apposita che viene presentata qui senza ripeterla nei vari esempi pr
204. ene specificato in che modo si deve espandere la macro si intende che si tratti della stringa nulla La macro define non restituisce alcun valore a parte la stringa nulla Si osservi l esempio seguente 1 define CIAO Ciao a tutti 2 CIAO Se questo file viene elaborato da M4 si ottiene il risultato seguente 1 2 Ciao a tutti Come gi affermato define crea una macro ma non genera alcun risultato pertanto viene semplicemente eliminata Per creare una macro che accetti delle opzioni occorre indicare nella stringa utilizzata per de finire la sostituzione uno o pi simboli speciali Si tratta precisamente di 1 2 m Il numero massimo di parametri gestibili da M4 dipende dalla sua versione I sistemi GNU co me GNU Linux e GNU Hurd dispongono generalmente di M4 GNU e questo non ha limiti particolari al riguardo mentre le versioni presenti in altri sistemi Unix possono essere limitate a nove Questa simbologia richiama alla mente i parametri usati dalle shell comuni e con la stessa analogia il simbolo 0 si espande nel nome della macro stessa 1 define CIAO Ciao 1 come stai 2 CIAO Tizio L esempio una variante di quello precedente in cui si crea la macro CIAO che accetta un solo parametro Il risultato dell elaborazione del file appena mostrato il seguente 1 2 Ciao Tizio come stai Prima di proseguire opportuno rivedere i
205. entalmente si possono distin guere tipi contenenti valori numerici stringhe e informazioni data orario Nelle sezioni seguenti vengono descritti solo alcuni dei tipi definiti dallo standard 3642 Introduzione a SQL 3643 323 2 1 Stringhe di caratteri Si distinguono due tipi di stringhe di caratteri in SQL quelle a dimensione fissa completate a destra dal carattere spazio e quelle a dimensione variabile CHARACTER CHARACTER dimensione CHAR CHAR dimensione Quelle appena mostrate sono le varie sintassi alternative che possono essere utilizzate per definire una stringa di dimensione fissa Se non viene indicata la dimensione tra parentesi si intende una stringa di un solo carattere CHARACTER VARYING dimensione CHAR VARYING dimensione VARCHAR dimensione Una stringa di dimensione variabile pu essere definita attraverso uno dei tre modi appena elen cati E necessario specificare la dimensione massima che questa stringa potr avere Il minimo rappresentato dalla stringa nulla 323 2 1 1 Costanti stringa Le costanti stringa si esprimono delimitandole attraverso apici singoli oppure apici doppi come nell esempio seguente Questa una stringa letterale per SOL Anche questa una stringa letterale per SQL Non tutti i sistemi SQL accettano entrambi i tipi di delimitatori di stringa In caso di dubbio bene limitarsi all uso degli apici singoli even
206. ente a quella del linguaggio C che utilizza la stringa di formato contenuta nella variabile predefinita CONVEMT Di solito questa variabile contiene il valore 6g che indica una precisione fino a sei cifre dopo la virgola e una notazione che pu essere esponenziale oppure normale intero decimale in base alla necessit Le tabelle 319 6 e 319 7 riepilogano i simboli utilizzabili nelle stringhe di formato di sprintf Eventualmente per una descrizione pi dettagliata si pu leggere la pagina di manuale sprintf 3 Tabella 319 6 Elenco dei simboli utilizzabili in una stringa formattata per l utilizzo con sprintf Simbolo Corrispondenza x Segno di percentuale c Un carattere corrispondente al numero dato s Una stringa d i Un intero con segno in base 10 o Un intero senza segno in ottale xx Un intero senza segno in esadecimale PX Come x ma con l uso di lettere maiuscole Te Un numero a virgola mobile in notazione scientifica WE Come Se ma con l uso della lettera E maiuscola f Un numero a virgola mobile in notazione decimale fissa g Un numero a virgola mobile secondo la notazione di e o sf G Come sg ma con l uso della lettera maiuscola se applicabile Tabella 319 7 Elenco dei simboli utilizzabili tra il segno di percentuale e la lettera di conversione Simbolo Corrispondenza spazio Il p
207. er ottenere un elenco ordinato in base a qualche criterio si utilizza l istruzione SELECT con l indicazione di un espressione in base alla quale effettuare l ordinamento Questa espressione preceduta dalle parole chiave ORDER BY SELECT espress_col_1 L espress_col_N FROM tabella WHERE condizione ORDER BY espressione asc DESC Las L espressione pu essere il nome di una colonna oppure un espressione che genera un risultato da una o pi colonne l aggiunta eventuale della parola chiave ASC o DESC permette di spe cificare un ordinamento crescente o discendente Come si vede le espressioni di ordinamento possono essere pi di una separate con una virgola SELECT Cognome Nome FROM Indirizzi ORDER BY Cognome L esempio mostra un applicazione molto semplice del problema in cui si ottiene un elenco delle sole colonne Cognome e Nome della tabella Indirizzi ordinato per Cognome SELECT Cognome Nome FROM Indirizzi ORDER BY Cognome Nome Questo esempio aggiunge l indicazione del nome nella chiave di ordinamento in modo che in presenza di cognomi uguali la scelta venga fatta in base al nome SELECT Cognome Nome FROM Indirizzi ORDER BY TRIM Cognome TRIM Nome Questo ultimo esempio mostra l utilizzo di due espressioni come chiave di ordinamento Per la precisione la funzione TRIM usata in questo modo serv
208. erio di selezione speciale costituito da due espressioni separate da una virgola come si vede nello schema seguente espressione_1 espressione_2 La prima espressione serve ad attivare il passaggio dei record la seconda serve a disattivarlo In pratica quando si avvera la prima espressione quel record e i successivi possono passare fino a quando si avvera la seconda Quando si avvera la seconda espressione dopo che si era avverata la prima il record attuale passa ma quelli successivi non pi Se in seguito si riavvera la prima condizione la cosa ricomincia Tabella 319 1 Schema complessivo dei diversi tipi di criteri di selezione in AWK Criterio di selezione Descrizione BEGIN Esegue l azione prima di iniziare a leggere i dati in ingresso END Esegue l azione dopo la lettura dei dati in ingresso espressione Quando si avvera esegue l azione per il record attuale espr_l espr_2 Le due espressioni individuano i record a intervalli 319 1 4 Un programma banale per cominciare Per mostrare il funzionamento di un programma AWK viene mostrato subito un esempio bana le Come gi stato descritto la cosa pi semplice che possa fare un programma AWK la riemissione degli stessi record letti in ingresso senza porre limiti alla selezione 1 print 0 Come gi stato descritto la regola mostrata molto semplice il numero uno rappresenta in pratica un valore corrispondente a Vero dal punt
209. erno di una transazione che alla fine viene confermata regolarmente BEGIN INSERT INTO Indirizzi VALUES 05 De Pippo Pippo Via Pappo 5 10333 3333333 COMMIT Nell esempio seguente si rinuncia all inserimento della riga con l istruzione ROLLBACK finale BEGIN INSERT INTO Indirizzi VALUES 05 De Pippo Pippo Via Pappo 5 0333 3333333 ROLLBACK 325 6 Cursori La gestione dei cursori da parte di PostgreSQL limitata rispetto all SQL92 In particolare non disponibile lo spostamento assoluto del cursore inoltre non possibile assegnare i dati a delle variabili La dichiarazione di un cursore si ottiene nel modo solito con la differenza che questa deve av venire esplicitamente in una transazione In particolare con PostgreSQL il cursore viene aperto automaticamente nel momento della dichiarazione per cui l istruzione OPEN non disponibile BEGIN DECLARE Mio_cursore INSENSITIVE CURSOR FOR SELECT FROM Indirizzi ORDER BY Cognome Nome 3702 PostgreSQL il linguaggio L apertura del cursore non esiste in PostgreSQL OPEN Mio_cursore L esempio mostra la dichiarazione dell inizio di una transazione assieme alla dichiarazione del cursore Mio_cursore per selezionare tutta la tabella Indirizzi in modo ordinato per Cognome Si osservi che per PostgreSQL la selezione che si i
210. esso al servente avviene solo dopo che stata specificata la base di dati e Chiusura di una connessione lt SQL CLOSE gt La chiusura di una connessione e quindi anche di una base di dati aperta si ottiene con l istruzione lt SQL CLOSE gt Prima di passare alla descrizione delle istruzioni che permettono l interrogazione del contenuto di una base di dati viene mostrato un esempio che si limita a elencare la tabella Indirizzi della base di dati anagrafe lt HTML gt lt H lt EAD gt lt TITLE gt Esempio di interrogazione lt TITLE gt HEAD gt lt BODY gt lt H1 gt Esempio di interrogazione lt H1 gt lt lt xI lt lt lt il SQL CONNECT localhost nobody gt SQL DATABASE anagrafe gt SOL QUERY SELECT FROM Indirizzi RICHIESTA_1 gt SQL QTABLE RICHIESTA_1 gt SQL FREE RICHIESTA_1 gt SQL CLOSE gt lt BODY gt 327 4 2 Istruzioni di interrogazione normali L interrogazione di una base di dati avviene attraverso la definizione di un riferimento che si apre e si chiude come se fosse un flusso di file nei linguaggi di programmazione comuni Per aprire questo riferimento si inizia con l invio di un interrogazione SQL successivamente si potr leggere l esito dell interrogazione attraverso il riferimento che stato aperto infine si passa alla chiusura del riferimento SI i SQL QUERY stringa_
211. esto esempio emette tutte le righe di un file di testo che superano la lunghezza di 80 caratteri usr bin awk f NF gt 0 print 0 In questo caso vengono emesse tutte le righe di un file di testo che hanno almeno un campo In pratica vengono escluse le righe bianche e quelle vuote usr bin awk f 1 totale 5 END print totale totale byte Questo programma fatto per sommare 1 valori del quinto campo di ogni record In pratica si tratta di incanalare nel programma il risultato di un comando 18 1 in modo da ottenere il totale in byte usr bin awk F f 1 print 1 Questo programma banale ma ha qualcosa di speciale la riga iniziale indica che si tratta di uno script di usr bin awk che deve essere avviato con le opzioni F f In pratica rispetto al solito stata aggiunta l opzione F con la quale si specifica che la separazione tra i campi 3610 AWK introduzione dei record data dal carattere Il programma di per s fatto per leggere un file composto da righe separate in questo modo come nel caso di etc passwd allo scopo di emettere solo il primo campo che sempre nel caso si tratti di etc passwd corrisponde al nominativo utente usr bin awk F f BEGIN print Gli utenti seguenti accedono senza parola d ordine 2 print 1 SI tratta di una variante dell esempio precedente dove si presume che i dati i
212. f part a z ordina a cf 1 ordina cf 1 z Inizio del programma define x 0 define i 0 scheme esempi di programmazione define z 0 display Inserire la quantit di elementi display DIM display al massimo set z read newline if gt z DIM set z DIM display Inserire i valori del vettore newline do i 0 i 1 gt i z display elemento display i display vector set vettore i read newline Il vettore non viene trasferito come argomento della funzione ma risulta accessibil sternament ordina 0 z 1 display Il vettore ordinato il seguente newline do i 0 i 1 gt i 2 display vector ref vettore i display newline 310 3 4 Permutazioni L algoritmo ricorsivo delle permutazioni stato descritto nella sezione 282 4 4 F permutal scm Permutazioni Dichiara il vettore a cui faranno riferimento tutte le funzioni define DIM 100 define vettor make vector DIM Sempre per motivi pratici rende disponibile la dimensione utilizzata effettivamente I define n elementi 0 inverti elementi lt indice 1 gt lt indice 2 gt define inverti elementi a z 3517 3518 Scheme esempi di programmazione define scambio 0 set scambio vector ref vettore a vector set vettore a vector ref vettore
213. ficar ne l impostazione Le variabili predefinite si distinguono dalle altre perch sono tutte espresse attraverso nomi con lettere maiuscole Due di queste variabili sono fondamentali Rs Record separator e FS Field separator La prima serve a definire il carattere da prendere in considerazione per separare i dati in ingresso in record la seconda serve a definire il codice da prendere in considerazione per separare i record in campi Per la precisione nel caso della variabile FS pu trattarsi di un carattere singolo oppure di un espressione regolare I valori predefiniti di queste variabili sono rispettivamente lt LF gt ovvero il codice di interruzione di riga dei file di testo normali e uno spazio normale che rappresenta una situazione particolare come gi stato descritto Questi valori possono essere cambiati la situazione tipica in cui si deve intervenire nella variabile Fs quella della lettura di file come etc passwd e simili dove si assegna generalmente alla variabile FS il valore che effettivamente il carattere utilizzato per separare i campi 319 1 6 Struttura ideale di un programma AWK Idealmente un programma AWK potrebbe essere rappresentato in modo pi esplicito secondo lo schema sintattico seguente dove le parentesi graffe vanno considerate in modo letterale function nome_funzione parametri_formali istruzioni BEGIN azione BEGIN
214. funzioni esistono appena dichiarate e possono essere sostituite da una dichiarazione successiva che utilizza lo stesso nome Esistono solo due tipi di dati le stringhe delimitate e i valori numerici con la quantit stabilita di cifre dopo la virgola dove la separazione tra parte intera e parte decimale si indica esclusiva mente con un punto Tuttavia alle variabili si possono assegnare solo numeri cos come le funzioni possono restituire solo valori numerici 311 3 1 Variabili semplici e array La dichiarazione di una variabile avviene in modo molto semplice con l assegnamento di un valore numerico come nell esempio seguente x 123 456 Nello stesso modo si possono dichiarare degli array a una sola dimensione indicando un indi ce tra parentesi quadre come nell esempio seguente dove in particolare l indice espresso da un espressione x 1 2 234 567 BC 3525 Gli array non devono essere dimensionati e possono usare la quantit massima di elementi di sponibili in base alla realizzazione di BC Il primo elemento si raggiunge con l indice zero e gli elementi successivi sono numeri interi positivi Se si fa riferimento a un elemento dell array che non ancora stato assegnato si ottiene il valore zero Per fare riferimento a un array nel suo complesso si indica il nome seguito dalle parentesi quadre aperte e chiuse senza contenere alcun indice x 311 3 2 Funzioni La dichiarazione d
215. ghe per cui corrisponde questo modello Dal momento che la barra obliqua viene usata come delimitatore se questa deve essere inserita nel modello occorre proteggerla con una barra obliqua inversa 3588 SED introduzione e xespressione_regolare_elementarex Si tratta sempre della selezione delle righe in base alla corrispondenza con un espressione regolare con la differenza che questa viene delimitata con un carattere differente x scel to liberamente in modo da non interferire con i simboli usati nel modello Se il model lo dell espressione regolare dovesse contenere anche questo carattere usato per la deli mitazione potrebbe essere protetto con l aggiunta della barra obliqua inversa all inizio Na riga_iniziale riga_finale possibile indicare un intervallo di righe unendo assieme due riferimenti a righe sia in forma numerica che attraverso le espressioni regolari Per quanto riguarda l individuazione della prima riga dell intervallo la cosa abbastanza semplice in particolare se si tratta di un espressione regolare la prima corrispondenza indica la prima riga Pi complicato il modo in cui viene preso in considerazione il secondo modello se si tratta di un numero questo rappresenta l n esima riga da raggiungere che de ve essere considerata inclusa nell intervallo ma se questo numero indica una ri ga precedente alla riga iniziale dell intervallo al
216. gli stessi attributi hanno senso le operazioni fonda mentali sugli insiemi unione intersezione e differenza Il significato evidente l unione genera una relazione composta da tutte le tuple distinte delle relazioni di origine l intersezione genera una relazione composta dalle tuple presenti simultaneamente in tutte le relazioni di origine la differenza genera una relazione contenente le tuple che compaiono esclusivamente nella prima delle relazioni di origine L esempio rappresentato dalle tabelle della figura 322 3 dovrebbe chiarire il senso di queste affermazioni 3636 Introduzione ai DBMS Figura 322 3 Unione intersezione e differenza tra relazioni Laureati Magazzinieri Codice Nominativo lana Codice Nominativo SES 5 53 5 33 4555 48 5 bes aza 3 54 s 1245 Tizi Tizio Legs 1745 Cai Caio ESS 1745 Cai Caio l e 1986 Pallino Pinco IERT 1655 Semproni Sempronio 1245 Tizi Tizio fis Laureati UNITO Magazzinieri Codice Nominativo lack cn ss s 1245 Tizi Tizio lag 1745 Cai Caio ESE 1655 Semproni Sempronio 1986 Pallino Pinco a Laureati INTERSECATO Magazzinieri Codice Nominativo ESSE PEPEO EEE a 1245 Tizi Tizio lee 1745 Cai Caio ESE Laureati MENO Magazzinieri Codice Nominativo lana Lausa 1655 Semproni Sempronio
217. graph Caratteri grafici di solito l unione di alnum e punct print Caratteri stampabili di solito l insieme di alnum punct e di lt space gt xdigit Cifre numeriche e alfabetiche per rappresentare numeri esadecimali 3578 Espressioni regolari standard 316 4 4 Intervalli di caratteri All interno di un espressione tra parentesi quadre possono apparire anche degli intervalli di ca ratteri includendo eventualmente anche gli elementi di collazione Al contrario non si possono usare le classi di equivalenza e nemmeno le classi di caratteri per indicare degli intervalli perch non si traducono in un carattere preciso nell ambito della codifica La forma per esprimere un intervallo la seguente inizio fine Questo lascia intendere che il trattino abbia un significato particolare all interno di un e spressione tra parentesi quadre Per fare un esempio molto semplice l espressione regolare a d rappresenta un carattere compreso tra a e g in base alla localizzazione Gli intervalli si possono mescolare con gli elenchi e anche con altri intervalli Per esempio l espressione regolare a dhi individua un carattere compreso tra a e d oppure anche h o i Possono essere aggregati pi elenchi assieme ma tutti questi devono avere un inizio e una fine indipendente Per esempio l espressione regolare a cg z rappresenta due inte
218. gt per rappresentare il risultato di un interrogazione attraverso un elenco dettagliato senza una tabella HTML e Chiusura del riferimento all interrogazione lt SQL FREE riferimento gt Come stato mostrato all inizio l istruzione lt SQL FREE gt serve a chiudere il riferimento a un interrogazione e Realizzazione di un elenco di voci da selezionare lt SQL OSELECT riferimento variabile_modulo_html gt Con l istruzione lt SQL OSELECT gt si ottiene un elenco di voci di un modulo di selezione In generale la cosa corrisponde a lt SELECT NAME variabile_modulo_html gt lt SQL PRINT_ROWS riferimento lt OPTION NAME riferimento 0 gt riferimento 1 gt lt SELECT gt L istruzione lt SQL PRINT_ROWS gt descritta nella prossima sezione 327 4 3 Istruzioni per la selezione dettagliata di righe e campi possibile selezionare in maniera pi precisa le righe e i campi di ci che si ottiene da un in terrogazione SQL Attraverso l istruzione lt SQL FETCH riferimento gt si preleva la riga attua le dall interrogazione a cui si fa riferimento Questo prelievo permette di fare riferimento agli elementi della riga attraverso una notazione particolare riferimento n In pratica come se fosse l espansione di una variabile con la differenza che si indica il nome di un riferimento a un interrog
219. gt lt P gt Risultato di un espressione lt SQL EVAL espressione gt 3Se l istruzione lt SQL WHILE gt non viene riconosciuta significa che non disponibile la scansione iterativa PostgreSQL accesso attraverso WWW SQL 3721 L istruzione lt SQL EVAL gt simile a lt SOL PRINT gt con la differenza che l ar gomento non pi una stringa ma un espressione differente il cui risultato viene emesso alla fine e Impostazione di una variabile lt SQL SET nome_ variabile valore_da_assegnare gt L istruzione lt SOL SET gt permette di definire e inizializzare una variabile L esempio seguente definisce la variabile contatore inizializzandola a zero lt SQL SET contatore 0 gt e Impostazione di una variabile attraverso un espressione lt SQL SETEXPR nome_variabile espressione gt L istruzione lt SQL SETEXPR gt permette di definire e inizializzare una variabile in particolare il valore che si assegna pu essere il risultato della valutazione di un espres sione L esempio seguente definisce la variabile contatore inizializzandola con il risul tato dell espressione contatore 1 In pratica viene decrementato il contenuto della variabile contatore lt SQL SETEXPR contatore contatore 1 gt e Definizione di un valore predefinito per il contenuto di una variabile
220. heme struttura del programma e campo di azione In tutti e tre le forme le variabili vengono inizializzate e quindi si passa alla valutazione del le espressioni successive le istruzioni Alla fine la funzione restituisce il valore dell ultima espressione a essere stata eseguita al suo interno Nel caso di let le variabili vengono dichiarate e inizializzate senza un ordine preciso ma semplicemente prima di passare alla valutazione delle espressioni successive let x 1 y 2 x y gt 3 L esempio non ha un grande significato da un punto di vista pratico ma si limita a mostrare intuitivamente come si comporta la funzione Let In questo caso vengono dichiarate le variabili locali x e y inizializzandole rispettivamente a uno e due infine viene calcolata semplicemente la somma tra le due variabili cosa che restituisce il valore tre Nel caso di let le variabili vengono dichiarate e inizializzate nell ordine in cui sono da sinistra a destra pertanto ogni inizializzazione pu fare riferimento alle variabili dichiarate precedentemente nella stessa sequenza let x 1 y x 1 x y gt 3 L esempio mostra che la variabile locale y viene inizializzata partendo dal valore della variabile locale x incrementando il valore di questa di un unit La funzione let rec pi sofisticata il nome sta per let recursive E un po difficile spiegare il
221. i x n m In generale si pu osservare che i programmi GNU e Perl non permettono l indicazione di sim boli di collazione e nemmeno di classi di equivalenza Inoltre Perl non dispone nemmeno delle classi di caratteri Per ovviare a questi inconvenienti si utilizzano invece delle sequenze di escape A differenza di ci che si vede di solito Perl introduce un concetto nuovo la corrisponden za minima di un espressione regolare Questo pu essere molto importante in Perl quando si delimitano delle sottoespressioni per estrapolare delle parti differenti di una stringa Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org 3582 Confronto sintetico tra le espressioni regolari reali Parte lxiv Linguaggi per la scansione di file di testo 318 SED introduzione icce ici iii EEEa aT E EEE aaa 3584 318 1 Avvio del eseguibile LL 3584 318 2 Logica di funzionamento L n 3585 318 3 Script e direttive multiple L LL 3586 318 4 DIFELLIVO sicilia id ia 3587 318 5 Esempi i sciita ita 3590 318 6 Riferimenti iii ii LA E A 3591 319 AWK introduzione 3 anal 3592 319 1 Principio di funzionamento e struttura fondamentale 3592 319 2 Avvio dell interprete siii 3596 319 3 Espressioni ssesrirorenkieieierer ae EE A 3597 319 4 ISTrUZIONI rullino daria a e in E A 3603 319 5 Variabili predefinite tinga a E nA 3608 319
222. i azione la variabile i do i ll i 1 condizione di uscita gt i y istruzioni del ciclo set z z x Z al termine restituisce il valore contenuto nella variabile z Dovrebbe essere intuitivo quindi che il campo di azione delle variabili dichiarate all interno di una funzione define limitato alla funzione stessa La stessa cosa varrebbe per le funzioni dichiarate all interno di un ambiente del genere Si osservi l esempio seguente in cui si calcola il prodotto tra due numeri a partire dalla somma di questi ma dove la somma si ottiene da un altra funzione locale che a sua volta la calcola con incrementi di una sola unit alla volta define moltiplica x y dichiara la funzione somma locale nell ambito della i funzione moltiplica define somma x y dichiara una variabile locale per la funzione somma che comunque non serve a nulla define z 2000 definisce un ciclo enumerativo per il calcolo della somma sommando un unit alla volta do condizione di uscita lt y 0 istruzioni del ciclo set x x 1 decrementa y set y y 1 X fine della funzione locale somma dichiara le variabili locali della funzione moltiplica define z 0 definisce un ciclo enumerativo per il calcolo del prodotto attraverso la somma in cui viene dichiarata implicitamente la variabile i don AE E ELN con
223. i in lp pn in it cf pn E lc n i n E conc ni pin n i pini vite30 Vite 3 mm 123 126 vite40 Vite 4 mm 126 127 dado30 Dado 3 mm 122 123 dado40 Dado 4 mm 126 127 rond50 Rondella 5 mm 123 126 h r Movimenti Codice Data Carico Scarico CodFor CodCli Poe a a a a vite40 01 01 1999 1200 124 vite30 01 01 1999 800 825 vite30 02 01 1999 1000 954 vite30 03 01 1999 2000 127 rond50 03 01 1999 500 954 d Fornitori E E a E e a E E CodFor Ditta Indirizzo Telefono eeen a a 127 Vitoni spa Via Ferri 2 10123 45678 122 Ferroni spa Via Metalli 34 0234 5678 126 Nuova Metal Via Industrie 0345 6789 123 Viti e Bulloni Via di sopra 7 0567 9875 Clienti dci CodCli Ditta Indirizzo Telefono cinzia 4 7 a eat 925 Tendoni Max Via di sotto 2 0113 44578 825 Arti Plus Via di lato 45 0765 23456 y La prima tabella Articoli rappresenta l anagrafica del magazzino di un grossista di ferra menta Ogni articolo di magazzino viene codificato e descritto inoltre vengono annotati i riferi menti ai codici di possibili fornitori La seconda tabella Movimenti elenca le operazioni di carico e di scarico degli articoli di magazzino specificando solo il codice dell articolo la data la quantit caricata o scaricata e il codice del fornitore o del cliente da cui stato acquistato o a cui 3634 Introduzione ai DBMS stato vendut
224. i testo organizzati in una qualche forma tabellare AWK potrebbe essere usato per fare anche di pi solo che quando si supera un certo limite di complessit non pi conveniente il suo utilizzo AWK un interprete nel senso che i programmi fatti secondo questo linguaggio vengono ese guiti direttamente senza essere compilati come nel caso degli script di shell Un programma AWK pu essere scritto in un file di testo normale oppure pu essere fornito come argomento della riga di comando dell interprete il binario awk Volendo automatizzare l avvio dell inter prete per l esecuzione di uno script che abbia i permessi di esecuzione opportuni lo si pu iniziare con la direttiva comune agli script di shell usr bin awk f Nei sistemi Unix esistono diversi tipi differenti di interpreti AWK Con GNU Linux potrebbe essere disponibile la versione GNU gawk che ha molte estensioni rispetto agli standard oppure ci potrebbe essere mawk In questo come negli altri capitoli dedicati a AWK si vuole fare riferimento allo standard POSIX senza nemmeno approfondire troppo l utilizzo di questo linguaggio 319 1 Principio di funzionamento e struttura fondamentale Il programma AWK tipico qualcosa che legge i dati provenienti da uno o pi file li analizza in qualche modo generando un risultato che viene visualizzato direttamente o indirizzato a un altro file Questo indica implicitamente due cose un progr
225. i una funzione ha una forma precisa dove in questo caso x rappresenta il nome della stessa define x parametro parametro IR auto variabile_automatica L variabile_automatica al istruzione return varlore_restituito Si osservi in particolare luso delle parentesi graffe per delimitare il corpo della funzione indispensabile che la parentesi graffa aperta si trovi sulla stessa riga iniziale della dichiarazione della funzione con i parametri relativi I parametri della funzione possono essere nomi di variabili normali oppure nomi di array senza un indice tra le parentesi quadre I parametri che appaiono tra parentesi tonde equivalgono alla dichiarazione implicita di variabili locali definite di tipo automatico contenenti il valore trasmesso al momento della chiamata Oltre alle variabili che compongono l elenco dei parametri della funzione si possono dichia rare altre variabili automatiche nel modo seguente nella riga immediatamente successiva alla parentesi graffa aperta auto variabile_automatica L variabile_automatica Si pu usare una sola istruzione auto nella quale vanno elencate tutte le variabili automatiche compresi gli array nella forma x Una funzione restituisce sempre un valore numerico anche se non viene utilizzata esplicitamente l istruzione return in tal caso si tratta sempre di zero Se il valore restituito dalla f
226. ia postmaster in modo simile al precedente dove in particolare viene diretto lo standard output all interno di un file per motivi diagnostici Si osservi l u tilizzo di nohup per evitare l interruzione del funzionamento di postmaster all uscita del programma su su postgres c nohup postmaster D var lib pgsql d 1 gt var log pglog 2 gt amp 1 amp Come nell esempio precedente con l attivazione del primo livello diagnostico nei messaggi emessi 3 Per consentire in pratica l accesso attraverso la rete occorre anche intervenire all interno del file di configurazione postgres pg_hda conf 3672 PostgreSQL struttura e preparazione 324 2 2 Localizzazione A partire dalla versione 6 4 di PostgreSQL inizia l introduzione di un sistema di gestione delle localizzazioni La sua attivazione dipende dalle opzioni che vengono definite in fase di compila zione per cui potrebbe anche succedere che la propria distribuzione GNU Linux disponga di una versione di PostgreSQL che non in grado di gestire la localizzazione La localizzazione va applicata al servente ovvero al sistema di gestione dei dati mentre ci non serve dalla parte del cliente Questa una situazione un po strana rispetto al solito dove ogni utente configura per s il proprio ambiente Infatti la scelta della localizzazione dei dati deve essere fatta al livello della base di dati senza poter essere cambia
227. iarazione esplicita della richiesta di recupero dell output deviato Aggiungendo la macro undivert 1 si ag giunge anche un interruzione di riga aggiuntiva anche in questo caso vengono numerate le righe per facilitarne l individuazione nel risultato 3628 M4 introduzione 1 4 Questo testo segue l andamento normale 5 2 Questo testo deviato 3 divert 1 Quanto qui contenuto non deve dare alcun risultato nell output Le macro generano regolarmente i loro effetti ma il loro output viene perduto divert Questo esempio mostra l uso tipico di divert 1 Dal momento che alla fine appare la macro divert senza altre righe dall elaborazione di questo file si ottiene solo un codice di interruzione di riga cio una riga vuota quella in cui appare la macro divert finale divert 1 Ciao maramao divert 2 Ciao Ciao divert 1 undivert L uso di divert 1 seguito da undivert permette di eliminare tutto l output accumulato nelle varie deviazioni 321 5 Riferimenti La documentazione di M4 GNU cio quanto distribuito normalmente con i sistemi GNU disponibile generalmente attraverso la documentazione Info m4 info Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Parte lxvi DBMS e SQL 322 Introduzione ai DBMS renn rrr rnrn rnr re rn 322 1 Caratteristiche fondamentali
228. ibile usare anche un algoritmo ricorsivo define x x y if x 0 return 0 if y 0 return 1 return x x x y 1 312 1 5 Radice quadrata Il problema della radice quadrata stato descritto nella sezione 282 2 5 radice b define r x auto z z 0 y 0 while 1 y z z if y gt x stato superato il valore massimo z z 1 return z z z 1 Per calcolare la radice quadrata si utilizzi la funzione r x 312 1 6 Fattoriale Il problema del fattoriale stato descritto nella sezione 282 2 6 fatt b define x auto i i x 1 while i gt 0 x x i i i 1 Per calcolare il fattoriale si utilizzi la funzione f x In alternativa l algoritmo si pu tradurre in modo ricorsivo define x if x gt 1 return x f x 1 return 1 BC esempi di programmazione 3535 312 1 7 Massimo comune divisore Il problema del massimo comune divisore tra due numeri positivi stato descritto nella sezione 282 2 7 med p 4 define m x y auto n while x y n 0 if x gt v x X y n l if n 0 y y_x return x Per calcolare il massimo comune divisore si utilizzi la funzione m x y 312 1 8 Numero primo Il problema della determinazione se un numero sia primo o meno stato descritto nella sezione primo b define p x auto i i 2 whil
229. ibuti delle diverse relazioni anche se il nome di questi attributi differente si parla di equi join 3640 Introduzione ai DBMS 322 3 4 Gestione dei valori nulli Si accennato in precedenza alla possibilit che gli attributi di una relazione possano conte nere anche il valore indeterminato o NULL Con questo valore indeterminato non si possono fare comparazioni con valori determinati e di solito nemmeno con altri valori indeterminati Per esempio non si pu dire che NULL sia maggiore o minore di qualcosa una comparazione del genere genera solo un risultato indeterminato NULL solo uguale a se stesso ed diverso da ogni altro valore compreso un altro valore NULL Per verificare la presenza o l assenza di un valore indeterminato si utilizzano generalmente operatori specifici come in SQL e IS NULL che si avvera quando il valore controllato indeterminato e IS NOT NULL che si avvera quando il valore controllato determinato quindi diverso da indeterminato Nel momento in cui si eseguono delle espressioni logiche utilizzando i soliti operatori AND OR e NOT si pone il problema di stabilire cosa accade quando si presentano valori indeterminati La soluzione intuitiva quando non si pu fare a meno di conoscere il valore che si presenta come indeterminato il risultato indeterminato Questo concetto deriva dalla cosiddetta logica fuzzy Figura 322 11 Tabella della ve
230. icato particolare come nel caso del punto e dell asterisco oppure ne acquistano uno nuovo come nel caso dell accento circonflesso Espressioni regolari standard 3579 316 5 Precedenze Dopo la difficolt che si affronta per comprendere il funzionamento delle espressioni regolari l ordine in cui le varie parti di queste vengono risolte dovrebbe essere abbastanza intuitivo La tabella 316 2 riassume questa sequenza distinguendo tra espressioni BRE e ERE Tabella 316 2 Ordine di precedenza dal pi alto al pi basso Tipo di componente l espressione Operatore BRE Operatore ERE Contenuto delle espressioni tra parentesi quadre Caratteri speciali resi letterali carattere_speciale carattere_speciale Espressioni tra parentesi quadre Sottoespressioni e riferimenti all indietro BRE z Raggruppamenti ERE 0 Ripetizioni m n 4 m n Concatenamento di espressioni non si usano simboli Ancore iniziali e finali A Alternanza solo ERE 316 6 Riferimenti regexp M lt ip avww Ietn com rjonestman Fegexp M html gt The Open Group The Single UNIX Specification Version 2 Regular Expressions 1997 lt ihttp www opengroup org onlinepubs 7908799 xbd re htm P gt Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capitoto 3 1 Confronto sintetico tra le espres
231. ico e la stringa nulla valgono come Falso mentre tutto il resto vale come Vero anche la stringa 0 vale come Vero a differenza di quanto accade con il linguaggio Perl 319 3 1 Costanti Le costanti sono espressioni elementari che restituiscono un valore in base a una simbologia convenuta I valori numerici si esprimono in forma costante nei modi comuni anche agli altri lin guaggi di programmazione I valori interi si possono indicare come una serie di cifre numeriche non delimitate che esprimono il valore secondo una numerazione a base decimale i valori non interi possono essere espressi utilizzando il punto come separatore tra la parte intera e la parte decimale sia 1 valori interi che gli altri possono essere espressi secondo la notazione esponenzia le Le costanti numeriche che appaiono di seguito sono esempi di rappresentazione dello stesso valore 100 5 100 5 1 005e 2 1005e 1 Le stringhe sono delimitate da apici doppi come si vede nell esempio seguente questa una stringa Le stringhe possono contenere delle sequenze di escape come elencato nella tabella 319 2 Tabella 319 2 Sequenze di escape utilizzabili all interno delle stringhe costanti Escape Significato i V a lt BEL gt b lt BS gt f lt FF gt n lt LF gt r lt CR gt t lt HT gt v lt VT gt nnn il valore ottale nnn 3598 AWK introduzione AWK gestisce anche un tipo speciale di costante che
232. igu razione locale fa riferimento a un nome che viene definito pacchetto che di solito si sceglie opportunamente simile a quello del programma per il quale si fa la traduzione textdomain pippo L esempio mostra l istruzione da usare in un programma C per stabilire il nome del pac chetto secondo Gettext Questo nome stabilisce che Gettext debba cercare il file sigla_locale LC_MESSAGES pippo mo Gettext determina il nome della prima parte del percorso corri spondente a ci che qui stato mostrato con la metavariabile sigla_locale analizzando alcune variabili di ambiente precisamente segue questo ordine LANGUAGE e LC_ ALL e altre variabili LC_ e LANG Dal valore contenuto in queste variabili si estrae la prima parte quella che arriva fino al primo punto se c In pratica se per ipotesi la variabile LANG contiene il valore it_IT ISO 8859 1 per Gettext importante solo it_IT Tuttavia anche questa infor mazione tende a essere eccessiva dal momento che contiene oltre al linguaggio anche l area nazionale In pratica alla fine contano solo le prime due lettere che esprimono il linguaggio in base allo standard ISO 639 sezione Gettext analizza il contenuto delle variabili di ambiente perch con la funzione setlocale stata azzerata internamente la definizione Lc_ALL Usando la funzione setlocale si potrebbe imporre un
233. iii rara ala lea e 3553 314 1 Somma tra due numeri positivi Il problema della somma tra due numeri positivi attraverso l incremento unitario stato descritto nella sezione 1000 RE 1010 REM somma bas 1020 REM Somma esclusivamente valori positivi 1030 RE 1040 RE 1050 INPUT Inserisci il primo valore X 1060 INPUT Inserisci il secondo valore Y 1070 LET Z X 1080 FOR I 1 TO Y 1090 LET 2 Z 1 1100 NEXT 1110 PRINT X Y Z 1120 END 1130 REM 314 2 Moltiplicazione di due numeri positivi attraverso la somma Il problema della moltiplicazione tra due numeri positivi attraverso la somma stato descritto nella sezione 282 2 2 1000 RE 1010 REM moltiplica bas 1020 REM Moltiplica esclusivamente valori positivi 1030 RE 1040 RE 1050 INPUT Inserisci il primo valore X 1060 INPUT Inserisci il secondo valore Y 1070 LET Z 0 1080 FOR I 1 TO Y 1090 LET Z Z X 1100 NEXT 1110 PRINT X Y Z 1120 END 1130 REM 3551 3552 Basic esempi di programmazione 314 3 Divisione intera tra due numeri positivi Il problema della divisione tra due numeri positivi attraverso la sottrazione stato descritto nella sezione 282 2 3 1000 REM 1010 REM dividi bas 1020 REM Divide esclusivamente valori positivi 1030 REM 1040 REM 1050 INPUT Inserisci il primo valore X 1060 INPUT Inserisci il secondo valore Y 1070 LET Z
234. il DBMS pu riutilizzare la definizione degli utenti del sistema operativo farvi riferimento oppure astrarsi completamente Un DBMS SQL richiede la presenza di un DBA Data base administrator che in qualit di amministratore ha sempre tutti i privilegi necessari a intervenire come vuole nel DBMS Il nome simbolico predefinito per questo utente dal linguaggio SQL _ SYSTEM Il sistema di definizione degli utenti esterno al linguaggio SQL perch SQL si occupa solo di stabilire i privilegi legati alle tabelle 323 9 1 Creatore L utente che crea una tabella o un altra risorsa il suo creatore Su tale risorsa l unico utente che possa modificarne la struttura e che possa eliminarla In pratica l unico che possa usare le istruzioni DROP e ALTER Chi crea una tabella o un altra risorsa pu concedere o revocare i privilegi degli altri utenti su di essa 323 9 2 Tipi di privilegi I privilegi che si possono concedere o revocare su una risorsa sono di vario tipo espressi attraverso una parola chiave particolare E bene considerare i casi seguenti e SELECT rappresenta l operazione di lettura del valore di un oggetto della risorsa per esempio dei valori di una riga da una tabella in pratica si riferisce all uso dell istruzione SELECT Introduzione a SQL 3663 e INSERT rappresenta l azione di inserire un nuovo oggetto nella risorsa come l inserimento di una riga in una
235. ilosofia che sta alla base delle espressioni regolari Per studiare la grammatica delle espressioni regolari occorre abbandonare qualunque resistenza tenendo presente che l interpretazione di queste espressioni va fatta da sinistra a destra inoltre ogni simbolo pu avere un significato differente in base al contesto in cui si trova Raramente si pu affermare che un espressione regolare sia errata nella maggior parte dei casi in cui si commettono degli errori si ottiene comunque qualcosa che pu avere un si gnificato indipendentemente dal fatto che questa possa avere o meno una corrispondenza E ancora pi difficile che una realizzazione in cui si utilizzano le espressioni regolari sia in grado di segnalare un errore grammaticale nella loro scrittura 316 1 RE BRE ERE e SRE Un espressione regolare come definita nello standard POSIX 1003 2 pu essere espressa attra verso due tipi di grammatiche differenti le espressioni regolari di base o elementari identifi cate dall acronimo BRE Basic regular expression e le espressioni regolari estese identificate dall acronimo ERE Extended regular expression La grammatica delle espressioni regolari tra dizionali degli ambienti Unix viene identificata dall acronimo SRE Simple regular expression in generale per fare riferimento a espressioni regolari non meglio definite si usa anche soltanto l acronimo RE Attualmente si fa riferimento soltanto a espressi
236. in Quando un join genera corrispondenze per tutte le tuple delle relazioni coinvolte si parla di join completo La dimensione espressa in quantit di tuple della relazione risultante in presenza di un join completo pari alla dimensione massima delle varie relazioni Quando si vuole eseguire la congiunzione di relazioni che non hanno attributi in comune si ottiene il collegamento di ogni tupla di una relazione con ogni tupla delle altre Si pu osservare l esem pio della figura 322 8 che riprende il solito problema del magazzino con delle semplificazioni opportune Introduzione ai DBMS 3639 Tabella 319 10 Le relazioni articoli e Fornitori dell esempio sulla gestione del magazzino Articoli 5 s 443 i54 4 44 0 243 Codice Descrizione Fornitorel s 3 vite30 Vite 3 mm ZI vite40 Vite 4 mm E297 xa dado30 Dado 3 mm 22 ess r Fornitori 127 Vitoni spa lisca 122 Ferroni spa aaa I Nessuno degli attributi delle due relazioni coincide quindi si ottiene un prodotto tra le due relazioni in pratica una relazione che contiene il prodotto delle tuple contenute nelle relazioni originali figura 322 9 Tabella 319 10 Il prodotto tra le relazioni Articoli e Fornitori Codice Descrizione Fornitorel CodFor Ditta vite30 Vite 3 mm LZ7 a 127 Vito
237. ingola informazione completa in rapporto alla relazione a cui appartiene infine questa informazione suddivisa in attributi Una relazione nella sua definizione non ha una forma particolare tuttavia questo concetto si presta a una rappresentazione tabellare gli attributi sono rappresentati dalle colonne e le tuple dalle righe Si osservi l esempio della figura 322 1 Figura 322 1 Relazione Indirizzi Cognome Nome Indirizzo Telefono Indirizzi sssshesseneee ssacnaeet ondenccsioezet eiseohbetkeescssesaanan Cognome Nome Indirizzo Telefono ariana s jl5 s 1 Pallino Pinco Via Biglie 1 10222 222222 Tizi Tizio Via Tazi 5 0555 5 55555 Cai Caio Via Caini 1 10888 888888 Semproni Sempronio Via Sempi 7 10999 999999 In una relazione le tuple non hanno una posizione particolare sono semplicemente contenute nell insieme della relazione stessa Se l ordine ha una rilevanza per le informazioni contenute questo elemento dovrebbe essere aggiunto tra gli attributi senza essere determinato da un ipo tetica collocazione fisica Osservando l esempio si intende che l ordine delle righe non ha im portanza per le informazioni che si vogliono trarre al massimo un elenco ordinato pu facilitare la lettura umana quando si alla ricerca di un nome particolare ma ci non ha rilevanza nella struttura che deve avere la relazione corri
238. io delimitare questo gruppo attraverso l uso delle parentesi graffe a cui si appena accennato Dal momento che comunque consentito di realizzare un gruppo di istruzioni che in realt ne contiene una sola probabilmente meglio utilizzare sempre le parentesi graffe in modo da evitare equivoci nella lettura del codice La tabella 319 8 riassume la sintassi di queste strutture la maggior parte delle quali dovrebbero essere gi note dal linguaggio C o da altri linguaggi simili Dato che le parentesi graffe sono usate nel linguaggio AWK se queste appaiono nei modelli sintattici indicati queste fanno parte delle istruzioni e non della sintassi AWK introduzione 3605 Tabella 319 8 Istruzioni per le strutture di controllo del flusso in AWK Sintassi Descrizione istruzioni Raggruppa assieme alcune istruzioni if condizione istruzione else istruzione Struttura condizionale while condizione istruzione Ciclo iterativo con condizione iniziale do istruzione while condizione Ciclo iterativo con condizione alla fine for espr_1 espr_2 espr_3 istruzione Ciclo enumerativo break Interrompe un ciclo iterativo o enumerativo continue Riprende un ciclo iterativo o enumerativo exit espressione Termina il programma restituendo il valore dell argomento next legge il prossimo record Data la natura di AWK esiste un istruzione particolare next Questa serve a passare imme
239. ione quindi a par te il problema di modificare in qualche modo il catalogo pg_database non si dovrebbero incontrare altre difficolt Per salvare tutto il sistema di basi di dati di PostgreSQL si pu agire in modo pi semplice archiviando tutta la directory postgres in modo ricorsivo In questo senso se ci sono delle basi di dati che risiedono al di fuori della gerarchia postgres le cose si com plicano cos si spiega il motivo dell organizzazione standard di PostgreSQL che prevede la loro collocazione al di sotto della gerarchia postgres base Nel caso non fosse anco ra chiaro bene ribadire che salvando anche 1 file che risiedono esattamente nella directory postgres si evita di dover ricreare le basi di dati prima del loro recupero ovvero si evita di dover intervenire manualmente nei cataloghi per dichiararne la presenza 3688 PostgreSQL struttura e preparazione 324 8 3 Creazione di una base di dati in una collocazione diversa dalla solita Il comando createdb se non viene specificato diversamente crea la base di dati in una sot todirectory a partire da postgres base Se si vuole definire una nuova posizione basta usare l opzione D seguita dalla directory che deve essere presa in considerazione al posto di postgres ovvero di PGDATA come si legge nella documentazione di PostgreSQL Perch la cosa funzioni occorre che la directory riceven
240. ione corrispon dente alle scelte fatte che pu essere ritoccata a mano se lo si desidera Nel caso dell esempio mostrato l interrogazione SQL che si ottiene select t0 nome t0 cognome from Indirizzi t0 L apertura di un interrogazione o di una vista genera lo scorrimento del risultato dell interroga zione oppure della vista come si vede nella figura 326 8 che fa sempre riferimento agli esempi precedenti Figura 326 8 Scorrimento di una vista Sort field Filter conditions Reload Close cognome Tizio Tizi Calo Cal i Sempronio Semproni 326 5 Stampe Con PgAccess possibile definire anche delle stampe nel senso di rapporti stampati contenenti il risultato di un interrogazione SQL La figura 326 9 mostra la finestra che si utilizza per questo scopo dove gi iniziata la compilazione dello schema di stampa 3712 PostgreSQL accesso attraverso PgAccess Figura 326 9 Creazione di un rapporto Report name Listato Report source Indirizzi Elenco dei nominativi Add label Add formula Clear all Preview Save Quit Report fields Database field Font Helvetica 5 _ Align left Elenco dei nominativi cognome nome citt via n cognome nome citt via n Una volta selezionata la tabella da cui prelevare i campi dopo aver indicato il nome del rapporto che si vuole generare basta fare un clic con il tasto sinistro del mouse mentre si punta sul no
241. iorno lt 01 01 1999 DELETE FROM Presenze WHERE Giorno lt 01 01 1999 3662 Introduzione a SQL 323 8 Viste Le viste sono delle tabelle virtuali ottenute a partire da tabelle vere e proprie o da altre viste pur ch non si formino ricorsioni Il concetto non dovrebbe risultare strano In effetti il risultato delle interrogazioni sempre in forma di tabella La vista crea una sorta di interrogazione permanente che acquista la personalit di una tabella normale CREATE VIEW nome_vista colonna_1 colonna_N AS richiesta Dopo la parola chiave AS deve essere indicato ci che compone un istruzione SELECT L esempio seguente genera la vista dei movimenti di magazzino del solo articolo vite30 CREATE VIEW Movimenti Vite30 AS SELECT Codice Data Carico Scarico FROM Movimenti WHERE Codice vite30 L eliminazione di una vista si ottiene con l istruzione DROP VIEW come illustrato dallo schema sintattico seguente DROP VIEW nome_ vista Volendo eliminare la vista Movimenti Vite30 si pu intervenire semplicemente come nell esempio seguente DROP VIEW Movimenti_Vite30 323 9 Controllare gli accessi La gestione degli accessi in una base di dati molto importante e potenzialmente indipenden te dall eventuale gestione degli utenti del sistema operativo sottostante Per quanto riguarda i sistemi Unix
242. ipio non possibile copiare una base di dati realizzata su GNU Linux in una macchina 1386 per portarla in un altra macchina con architettura differente anche se con lo stesso sistema operativo nemmeno si pu trasportare una base di dati cos come si trova da un sistema opera tivo a un altro Inoltre PostgreSQL non in grado di leggere o di utilizzare in alcun modo le basi di dati realizzate con altre versioni dello stesso Attualmente l unico modo per raggirare l ostacolo lo scarico dei dati dump in uno script che successivamente pu essere dato in pasto a psql per ricreare le basi di dati come erano in origine Naturalmente questa tecnica non perfetta e funziona correttamente solo quando le basi di dati non contengono relazioni con tuple eccessivamente grandi Questo problema deve essere preso in considerazione gi nel momento della progettazione di una base di dati avendo cura di verificare sperimentandolo che il procedimento di scarico e recupero dei dati possa funzionare PostgreSQL struttura e preparazione 3689 Lo scarico di una base di dati si ottiene attraverso il programma pg_dump che parte integrante della distribuzione di PostgreSQL pg_dump opzioni base_di_dati Se non si indicano delle opzioni e ci si limita a specificare la base di dati su cui intervenire si ottiene il risultato attraverso lo standard output composto in pratica dai comandi necessari a psql
243. istruzioni La parentesi tonda aperta che introduce l elenco dei parametri formali deve essere attaccata alla fine del nome della funzione che viene dichiarata L elenco dei parametri formali in pratica un elenco di nomi di variabili locali che ricevono il valore dei parametri corrispondenti nella chiamata Se una chiamata di funzione utilizza meno parametri di quelli che sono disponibili le variabili corrispondenti ricevono in pratica la stringa nulla importante osservare che non possibile dichiarare altre variabili locali oltre a quelle che appaiono nell elenco dei parametri formali function fattoriale x i x 1 while i gt 0 x i i L esempio mostra la dichiarazione di una funzione ricorsiva per il calcolo del fattoriale Si pu osservare l istruzione return che permette di stabilire il valore che viene restituito dalla fun zione Naturalmente sono ammissibili anche funzioni che non restituiscono un valore queste non hanno l istruzione return function somma x y Zz i DAROCA for i 1 i lt y i z return z Un altro esempio pu servire per comprendere la gestione delle variabili locali in una funzione In questo caso si tratta di una funzione che calcola la somma dei primi due parametri che gli vengono forniti I due parametri successivi z e i sono dichiarati tra i parametri formali per essere usati come variabili locali
244. isultato tenendo in considerazione il fatto che la variabile ibase contenga inizialmente il valore 10 obase 20 Invio 400 Invio 01 00 00 In base al principio per il quale una cifra numerica singola viene interpretata in modo non ambi guo indipendentemente dalla base di numerazione stabilita in ingresso con la variabile ibase si pu tornare facilmente a un inserimento di valori in base 10 sfruttando la cifra A il cui valore sempre pari a 10 ibase A Invio 311 2 Approssimazione La variabile scale definisce la quantit di cifre decimali da prendere in considerazione quando il contesto non esprime gi questo valore In altri termini una moltiplicazione definisce gi la quantit di cifre decimali da considerare 10 2 45 Invio 24 50 Al contrario nel caso della divisione necessario stabilire subito la quantit di decimali da considerare scale 4 Invio 10 3 Invio 3 3333 Generalmente all avvio dell interprete il valore della variabile scale pari a zero avendo cos un approssimazione predefinita alla parte intera luno zero zero in base 20 corrisponde a 400 3524 BC 311 3 Linguaggio di programmazione Il linguaggio di BC ha una vaga somiglianza con il C In generale le righe vuote e quelle bianche vengono ignorate cos come il testo circoscritto tra e proprio come nel C Alcune realizzazioni di BC prevedono anche l uso del
245. izione CHAR SQL92 Un carattere singolo CHAR n SQL92 Una stringa di lunghezza fissa di n caratteri completata da spazi VARCHAR n SQL92 Una stringa di lunghezza variabile con un massimo di n caratteri INTEGER SQL92 Intero al massimo nove cifre numeriche SMALLINT SQL92 Intero pi piccolo di INTEGER FLOAT SQL92 Numero a virgola mobile FLOAT n SQL92 Numero a virgola mobile lungo n bit REAL SQL92 Numero a virgola mobile teoricamente pi preciso di FLOAT DOUBLE PRECISION SQL92 Numero a virgola mobile pi o meno equivalente a REAL DATE SQL92 Data di solito nella forma mm gg aaaa TIME SQL92 Orario nella forma Ah mm ss oppure solo hh mm TIMESTAMP SQL92 Informazione completa data orario INTERVAL SQL92 Intervallo di tempo BOOLEAN SQL3 Valore logico booleano Oltre ai tipi di dati gestibili necessario conoscere il modo di rappresentarli in forma costante In particolare bene osservare che PostgreSQL ammette solo l uso degli apici singoli come delimitatori La tabella 325 2 mostra alcuni esempi Tabella 325 2 Esempi di rappresentazione dei valori costanti Tipo Esempi CHAR EE E A a CHAR n ra ciao Ciao 123 der 876 VARCHAR n ra ciao Ciao 123 der 876 INTEGER 1 123 987 SMALLINT Come INTEGER FLOAT 123 45 45 3 123
246. ke vector DIM define x 0 define i 0 define z 0 display Inserire la quantit di elementi display DIM display al massimo set z read newline if gt z DIM set z DIM display Inserire i valori del vettore in modo ordinato newline do i 0 i 1 gt i z display elemento display i display vector set vettore i read newline display Inserire il valore da cercare set x read newline set i ricerca vettore x 0 z 1 display Il valore cercato si trova nell elemento display i newline 310 3 Algoritmi tradizionali In questa sezione vengono mostrati alcuni algoritmi tradizionali portati in Scheme Per la spie gazione degli algoritmi se non sono gi conosciuti occorre leggere quanto riportato nel capitolo 282 310 3 1 Bubblesort Il problema del Bubblesort stato descritto nella sezione 1282 4 1 Viene mostrato prima una soluzione iterativa e successivamente la funzione bsort in versione ricorsiva bsortl scm Bubblesort ordina lt vettore gt lt ele inf gt lt ele sup gt scheme esempi di programmazione define ordina vettore a z define scambio 0 do j a 1 j z if lt vector ref vettore k vector ref vettore j Scambia i valori begin set scambio vector ref vettore k vector set vettore k vector ref vettore j vector set
247. l lt gt op2 due operandi sono diversi cond AND cond2 Le due condizioni sono entrambe vere cond OR cond2 Almeno una delle due condizioni vera NOT cond Inverte il risultato logico della condizione 3548 Basic introduzione 313 3 4 Espressioni miste Alcuni operatori utilizzano valori di tipo diverso dal tipo di dati che restituiscono La tabella 313 3 mostra alcuni di questi Tabella 313 3 Elenco di altri operatori Operatore e operandi Descrizione VAL stringa Valuta la stringa trattandola come un espressione numerica LEN stringa Restituisce la lunghezza della stringa in caratteri STR numero Restituisce una stringa contenente il numero indicato come argomento 313 3 5 Array Gli array in Basic possono essere a una o pi dimensioni a seconda dell interprete In ogni caso dovrebbero essere distinti in base al contenuto solo numeri o solo stringhe L indice del primo elemento dovrebbe essere zero La dichiarazione avviene nel modo seguente DIM nome dimensione_1 Lo dimensione _2 a DIM nome dimensione_1 L dimensione_2 sa Nel primo caso si tratta di un array con elementi numerici nel secondo si tratta di un array con elementi stringa 313 4 Primi esempi banali L esempio seguente il pi banale emette semplicemente la stringa Ciao Mondo attraverso lo standard output 10 print Ciao Mondo Per eseguire il programma basta utilizzare il comando
248. l meccanismo dell espansione di una macro attraverso un caso particolare L esempio seguente leggermente diverso da quello precedente in quanto vengono aggiunti gli apici attorno alla parola come Il risultato dell elaborazione per lo stesso 1 define CIAO Ciao 1 come stai 2 CIAO Tizio GNU M4 GNU GPL M4 introduzione 3623 Infatti quando la macro CIAO viene espansa subisce una rianalisi successiva dal momento che viene trovata una stringa questa viene elaborata restituendo semplicemente se stessa senza gli apici Questo meccanismo ha comunque una fine dal momento che non ci sono altre macro per cui l esempio seguente 1 define CIAO Ciao 1 come stai 2 CIAO Tizio si traduce nel risultato 1 2 Ciao Tizio come stai 321 2 3 Simboli speciali All interno della stringa di definizione di una macro oltre ai simboli n si possono utilizzare altri codici simili in un modo che assomiglia a quello delle shell pi comuni 6 Rappresenta il numero di parametri passati effettivamente a una macro Per esempio define CIAO CIAO CIAO CIAO primo secondo Si traduce nel risultato seguente si deve tenere presente che una macro chiamata con le parentesi senza alcun contenuto ha un parametro costituito dalla stringa nulla M PI Rappresenta tutti i parametri forniti effettivamente alla macro sep
249. la voce relativa a questo tipo di oggetto si accede selezionando il pulsante grafico NEW Figura 326 4 Finestra per la creazione di una tabella Table name Indirizzi field name yp varchar 30 NOT NULL Inherits x varchar 39 NOT NULL p i var char 30 varchar 30 Field name Telefono varchar 10 Field type varchar Field size SS O Default value rai i y O __ field cannot be null Add field Delete field Delete all Move field up Move field down Create table Cancel Una volta creata la tabella si ottiene questo confermando con il pulsante grafico CREATE TABLE il suo nome appare nella parte centrale della finestra principale del programma per accedere al suo contenuto basta selezionare il pulsante grafico oren ottenendo cos una ta bella di scorrimento con la quale si possono aggiungere e modificare righe preesistenti La figura 326 5 mostra l inserimento di alcuni nomi Si osservi in particolare il fatto che eventualmente si pu richiedere espressamente l aggiunta di una riga nuova premendo il terzo tasto del mouse PostgreSQL accesso attraverso PgAccess 3709 Figura 326 5 Finestra per lo scorrimento del contenuto di una tabella Sort field Filter conditions Reload Close cognome nome citt via n Tizi Tizio Tiziopoli Torta 1 Cai Caio Semproni Sempronio I Vale la pena di osservare che la maschera di scorrimento e inserimento
250. li attributi sono separati attraverso una barra verticale COPY Indirizzi FROM STDIN In questo caso si aggiungono righe alla tabella Indirizzi utilizzando quanto proviene dallo standard input alla fine deve apparire la sequenza di escape COPY Indirizzi FROM tmp prova USING DELIMITERS 3704 PostgreSQL il linguaggio Si aggiungono righe alla tabella Indirizzi utilizzando quanto proviene dal file tmp prova che si trova nel file system dell elaboratore servente In particolare gli attributi sono separati da una barra verticale 325 7 2 Riorganizzazione del contenuto di una base di dati Nel capitolo precedente si gi accennato all istruzione 5VACUUM con la quale si riorganizzano i dati eliminando i resti di una transazione interrotta ricostruendo gli indici e le statistiche interne Se non si ha la pretesa di analizzare la base di dati lo schema sintattico molto semplice VACUUM tabella Se non si indica una tabella particolare si intende intervenire su tutta la base di dati su cui si sta lavorando Per poter eseguire le operazioni relative all istruzione VACUUM necessario un blocco esclu sivo delle tabelle coinvolte Questo blocco rappresentato in pratica da un file collocato nella directory che contiene i file della base di dati relativa Il file si chiama pg_vlock se si in terrompe in qualche m
251. ll the files and must also own the server process Creating Postgres database system directory var lib pgsql base Creating template database in var lib pgsql base templatel Creating global classes in var lib pgsql base Adding templatel database to pg_database Vacuuming templatel Creating public pg_user view Creating view pg_rules Creating view pg_views Creating view pg_tables Creating view pg_indexes Loading pg_description Alcune opzioni pglib directory_pglib 1 directory_pglib Permette di definire la directory all interno della quale initdb deve cercare gli script che servono a ricreare il sistema di basi di dati di PostgreSQL pgdata directory_pgdata r directory_pgdata Stabilisce la directory iniziale del sistema di basi di dati di PostgreSQL che si vuole creare username amministratore u amministratore Questa opzione permette eventualmente di utilizzare initdb con i privilegi dell utente root definendo in questo modo chi debba essere l amministratore di PostgreSQL In generale questa opzione potrebbe anche non funzionare per evitare problemi conviene avviare initdb utilizzando l identit dell amministratore PostgreSQL template SE Fa in modo di ricostruire lo scheletro templatel senza intervenire negli altri dati del sistema di basi di dati Pu essere utile se per qualche motivo templatel risulta dan
252. lla realizzazione di AWK che risulta installata effettivamente in un sistema GNU Linux potrebbe trattarsi di mawk o gawk il secondo la versione GNU di AWK La sintassi standard di un interprete AWK dovrebbe essere quella seguente awk F separazione_campi v variabile valore f file_contenente_il_programma file_in_ingresso awk F separazione_campi v variabile valore i testo_del_programma file_in_ingresso e I due schemi alternativi riguardano la possibilit di far leggere all interprete il programma con tenuto in un file indicato attraverso l opzione oppure di fornirlo direttamente nella riga di comando delimitandolo opportunamente perch venga preso dalla shell come un argomento singolo Se non vengono forniti i file da usare come dati in ingresso l interprete attende i dati dallo standard input Alcune opzioni F separazione_campi Definisce in che modo devono essere distinti i campi dei record modificando cos il valore predefinito della variabile FS Come gi stato descritto pu trattarsi di un carattere singolo oppure di un espressione regolare v variabile valore Assegna un valore a una variabile La variabile in questione pu essere predefinita oppure una nuova che viene utilizzata nel programma per qualche motivo file_programma_awk Indica espressamente il file contenente il pr
253. lla dichiarazione della funzione x y calcola la somma tra 4 e 5 restituendo 9 4 5 In questo caso l assegnamento della funzione alla variabile avvenuto contestualmente alla dichiarazione della variabile stessa define moltiplica lambda x y dichiara le variabili locali define z 0 definisce un ciclo enumerativo per il calcolo del prodotto attraverso la somma in cui viene dichiarata implicitamente la variabile i do i 1 i 1 condizione di uscita gt i y istruzioni del ciclo set z z x al termine restituisce il valore contenuto nella variabile z Z Questo esempio mostra in che modo possano avvenire delle dichiarazioni locali nel corpo di una dichiarazione lambda L esempio successivo un po un estremo nel senso che viene mostrata la dichiarazione di una funzione anonima che viene usata immediatamente per calcolare il prodotto tra tre e quattro Successivamente al suo utilizzo istantaneo non c modo di riutilizzare tale funzione dichiarazione della funzione anonima lambda x y dichiara le variabili locali define z 0 definisce un ciclo enumerativo per il calcolo del prodotto Scheme struttura del programma e campo di azione 3489 attraverso la somma in cui viene dichiarata implicitamente la variabile i do i 1 i 1 condizione di uscita gt i y istruzioni del ciclo SCE Z zi i
254. lla funzione Una volta scritto il file della funzione si deve acquisirne il codice con il comando seguente nell ambito di psql biblioteca gt i funzione _controlla plpgsali nvio Se nel frattempo la tabella prestiti contiene righe senza senso conviene azzerarla completamente prima di mettere in pratica l uso della nuova funzione di controllo biblioteca gt delete from prestiti nvio Per l uso vero e proprio della funzione si interviene come nell esempio seguente biblioteca gt select inserisci prestito 2 3 gt cast 2001 1 1 as date nvio A questo punto se si tenta di inserire per due volte lo stesso prestito la funzione impedisce l operazione e avvisa dell errore 328 2 2 trigger e le funzioni L utilizzo dell istruzione select abbinata a una funzione pu creare qualche confusione Si pu superare questo problema utilizzando un trigger che richiami automaticamente una funzione di controllo Quello che segue l esempio di tale funzione corrispondente al file funzione_trigger plpgsql create function inserisci_prestito_trigger returns opaque as declare numero_inventario char 5 data_restituzione date prestito record begin numero_inventario new n_inv data_restituzione 2050 1 1 select into prestito from prestiti where n_inv numero_inventario and data_r data_restituzione if found then raise exception Vil libro gi a
255. lla tabella originale nel suo stesso ordine si pu utilizzare un carattere jolly particolare l asterisco Questo rappresenta l elenco di tutte le colonne della tabella indicata SELECT FROM Indirizzi bene osservare che le colonne si esprimono attraverso un espressione questo significa che le colonne a cui si fa riferimento sono quelle del risultato finale cio della tabella che viene restituita come selezione o proiezione della tabella originale L esempio seguente emette una sola colonna contenente un ipotetico prezzo scontato del 10 in pratica viene moltiplicato il valore di una colonna contenente il prezzo per 0 90 in modo da ottenerne il 90 100 meno lo sconto SELECT Prezzo 0 90 FROM Listino In questo senso si pu comprendere l utilit di attribuire esplicitamente un nome alle colonne del risultato finale come indicato dalla sintassi seguente SELECT espress_col_1 AS nome_col_1 1 espress_col_N AS nome_col_N FROM tabella WHERE condizione In questo modo l esempio precedente pu essere trasformato come segue dando un nome alla colonna generata e chiarendone cos il contenuto SELECT Prezzo 0 90 AS Prezzo Scontato FROM Listino Finora stata volutamente ignorata la condizione che controlla le righe da selezionare Anche se potrebbe essere evidente bene chiarire che la condizione posta dopo la parola chiave WHERE pu fare riferimento solo ai dati originali
256. lle istruzioni impartite Questa opzione utile quando si utilizza psql all interno di script che devono occuparsi di rielaborare il risultato ottenuto SL Disattiva l emissione dei nomi delle colonne Questa opzione viene utilizzata particolarmente in abbinamento con c o g T opzioni_tabelle_html Questa opzione viene utilizzata in abbinamento con H per definire le opzioni HTML delle tabelle che si generano In pratica si tratta di ci che pu essere inserito all interno 3 del marcatore di apertura della tabella lt table gt iu Fa in modo che psql richieda il nominativo utente e la parola d ordine all utente prima di tentare la connessione L uso di questa opzione indispensabile quando il servente impone una forma di autenticazione definita attraverso la parola chiave password Alcuni comandi Oltre alle istruzioni SQL psql riconosce dei comandi alcuni dei quali vengono descritti di seguito h comando L opzione h usata da sola elenca le istruzioni SQL che possono essere utilizzate Se viene indicato il nome di una di queste viene mostrata in breve la sintassi relativa Elenca 1 comandi interni di psql cio quelli che iniziano con una barra obliqua inversa EV NI Elenca tutte le basi di dati presenti nel servente Ci che si ottiene una
257. llo successivo viene indicata la stringa nulla si intende che i record siano separati da una o pi righe bianche o vuote Ogni record pu avere un numero variabile di campi al loro contenuto si pu fare riferimento attraverso il simbolo seguito da un numero che ne indica la posizione n il campo n esimo del record attuale ma in particolare 0 rappresenta il record completo Il numero in questione pu anche essere rappresentato da un espressione per esempio una variabile che si traduce nel numero desiderato Per esempio se pippo una variabile contenente il valore due pippo il secondo campo 3594 AWK introduzione 319 1 3 Criterio di selezione e condizioni particolari Il criterio di selezione dei record generalmente un espressione che viene valutata per ognuno di questi in ordine che quando si avvera permette l esecuzione dell azione corrispondente Oltre a queste situazioni generali esistono due istruzioni speciali da utilizzare come criteri di selezione BEGIN e END Queste due parole chiave vanno usate da sole rappresentando rispettivamente il momento iniziale prima di cominciare la lettura dei dati in ingresso e il momento finale succes sivo alla lettura ed elaborazione dell ultimo record dei dati Le azioni che si abbinano a queste condizioni particolari servono a preparare qualcosa e a concludere un elaborazione Esiste un altro caso di crit
258. lo 282 310 1 1 Somma tra due numeri positivi Il problema della somma tra due numeri positivi attraverso l incremento unitario stato descritto nella sezione 282 2 1 sommal scm Somma esclusivamente valori positivi TETTI somma lt x gt lt y gt define somma x y define z x 3502 Scheme esempi di programmazione 3503 define i 1 do gt i y set z z 1 set i i 1 Inizio del programma define x 0 define y 0 define z 0 display Inserisci il primo numero intero positivo set x read newline display Inserisci il secondo numero intero positivo set y read newline set z somma x y display x display display y display display z newline In alternativa si pu modificare la funzione somma in modo che il ciclo do gestisca la di chiarazione e l incremento delle variabili che usa Tuttavia in questo caso la variabile z deve essere copiata in modo da poter trasmettere il risultato all esterno del ciclo do define somma x y define risultato 0 doo tz x E albi 1 1 1 gt i y set risultato z risultato Volendo gestire la cosa in modo un po pi elegante occorre togliere la variabile z dalla gestione del ciclo do define somma x y define z x do i 1 i 1 gt i y set z z 1 3504 Sch
259. lonna Nel primo caso si aggiunge una colonna della quale si deve specificare il nome il tipo ed even tualmente i vincoli nel secondo si tratta solo di indicare la colonna da eliminare A livello di singola colonna pu essere eliminato o attribuito un valore predefinito ALTER TABLE nome tabella ALTER COLUMN nome_colonna DROP DEFAULT ALTER TABLE nome tabella ALTER COLUMN nome_colonna SET DEFAULT valore_predefinito 323 4 6 Eliminazione di una tabella L eliminazione di una tabella con tutto il suo contenuto un operazione semplice che dovrebbe essere autorizzata solo all utente che l ha creata DROP TABLE nome_tabella 323 5 Inserimento eliminazione e modifica dei dati L inserimento l eliminazione e la modifica dei dati di una tabella un operazione che interviene sempre a livello delle righe Infatti come gi definito la riga l elemento che costituisce l unit di dati pi piccola che pu essere inserita o cancellata da una tabella 323 5 1 Inserimento di righe L inserimento di una nuova riga all interno di una tabella viene eseguito attraverso l istruzione INSERT Dal momento che nel modello di SQL le colonne sono ordinate sufficiente indicare ordinatamente l elenco dei valori della riga da inserire come mostra la sintassi seguente INSERT INTO nome_tabella VALUES espressione_1 espressione _N Introd
260. lora viene selezionata solo quella iniziale se si tratta di un espressione regolare allora questo modello viene confrontato a partire dalla riga successiva a quella iniziale e alla corrispondenza raggiunta si ottiene la riga finale dell intervallo se si tratta di un espressione regolare il confronto avviene a partire dalla riga successiva alla prima che stata trovata e riga_iniziale riga_finale Se alla fine della selezione delle righe appare un punto esclamativo questo rappresenta l inversione della selezione ovvero tutte le altre righe 318 4 2 Comandi comuni Come accennato ogni direttiva si compone di una selezione di righe in modo esplicito o impli cito e di un comando ovvero di un raggruppamento di comandi racchiuso tra parentesi graffe Vengono elencati di seguito 1 comandi pi comuni e commento Il simbolo rappresenta un comando speciale di SED che serve solo a fargli ignorare il testo che segue fino alla fine della riga fino alla fine della direttiva Trattandosi di un comando si applica a delle righe che per non possono essere indicate Di solito i commenti di questo tipo si inseriscono solo nei file contenenti direttive di un pro gramma di elaborazione SED eventualmente uno script eseguibile realizzato nella forma che gi stata mostrata Se i primi due caratteri di un file del genere corrispondono alla stringa n SED funzio na
261. ltimo parametro deve essere una variabile dal momento che viene passata per riferimento e il suo contenuto deve essere modificato dalla funzione La stringa di sostituzione il secondo parametro pu contenere il simbolo amp che in tal caso viene sostituito con la sottostringa per la quale si avverata la corrispondenza con l espressione regolare Volendo inserire una e commerciale letterale si deve usare la sequenza qe B La funzione sub restituisce il numero di sostituzioni eseguite pertanto pu trattarsi del valore uno o di zero frase ciao come stai sub ciao salve frase L espressione finale dell esempio restituisce il valore uno dal momento che la sostituzione ha luogo mentre la variabile frase contiene alla fine la stringa salve come stai frase ciao come stai sub ciao amp amico frase L indicazione di una e commerciale letterale pu essere un problema In generale sarebbe meglio evitarlo In ogni caso necessario leggere la documentazione specifica per il tipo di interprete AWK che si utilizza per sapere come comportarsi esattamente 3608 AWK introduzione Questo esempio riutilizza la sottostringa della corrispondenza attraverso il riferimento ottenuto con la e commerciale Alla fine la variabile frase contiene ciao amico come stai gsub regexp rimpiazzo la stringa_da_modificare La funzione gsub
262. lutate come funzioni 5 6 78 9 sa i Per verificare che un oggetto sia una lista disponibile il predicato list Si osservi l esempio seguente con il quale si intende ribadire il significato dell apostrofo per evitare che una lista sia interpretata come funzione define a 1 2 a gt 3 lA questo punto si intende ormai chiarito il significato dell apostrofo posto di fronte a una lista quando questa non deve essere valutata prima di essere fornita come argomento di una funzione Scheme liste e vettori 3495 define b 1 2 b gt 1 2 list a gt f list b gt t 308 1 4 Funzioni tipiche sulle liste Dal momento che con le liste di Scheme non disponibile un accesso diretto all elemento n esimo se non attraverso la funzione di libreria l1ist ref importante imparare a gestire le funzioni elementari gi mostrate nella sezione precedente e Calcolo della lunghezza di una lista define lunghezza x if null x se la lista vuota restituisce zero 0 altrimenti esegue una chiamata ricorsiva 1 lunghezza cdr x e Ricerca dell elemento i esimo dove il primo il numero uno si veda anche la funzione di libreria list ref descritta pi avanti in questa serie di esempi define i esimo elemento i x i l indice x la lista if null x la lista pi corta di i elementi errore la lista trop
263. me del campo che si vuole inserire sullo schema di destra che rappresenta il modello della stampa Una volta che sono apparsi i nomi nello spazio a destra questi possono essere trascinati dove si vuole eventualmente possono anche essere cancellati usando il tasto Canc Nell esempio della figura si vede anche che stato inserito un titolo Spostando il puntatore del mouse sullo spazio che rappresenta lo schema di stampa si vede cambiare la sua descrizione in alto Nella figura mostrata viene indicato Page footer perch in quel momento il puntatore del mouse era nella penultima riga di quello schema Per verificare il risultato disponibile anche un anteprima che si ottiene selezionando il pulsante grafico PrREvIEW Seguendo gli esempi precedenti la figura 326 10 mostra questa anteprima Da l si pu passare alla stampa che per potrebbe limitarsi a generare un file PostScript Figura 326 10 Anteprima di stampa Elenco dei nominativi cognome nome citt via n Tizi Tizio Tiziopoli Torta 1 Cai Caio Semproni Sempronio PostgreSQL accesso attraverso PgAccess 3713 326 6 Riferimenti e PgAccess lt http www flex ro ogaccess gt Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capitolo 92 PostgreSQL accesso attraverso WWW SQL www sQLUl un programma CGI in grado di creare pagine HTML a partire dalle informazio
264. me di elementi a cui si fa riferimento con un indice libero Il fare riferimento a un elemento che non esiste anche solo per leggerne il contenuto implica la creazione di tale elemento Come si pu intuire il riferimento a un elemento che non esiste ancora crea tale elemento assegnandogli la stringa nulla restituendo pertanto lo stesso valore L esempio seguente crea un array un po strampalato con una serie di valori senza un significato particolare elenco ciao Saluti elenco maramao 123 elenco 3 345 elenco 2345 che bello Si intuisce che gli elementi di un array AWK non hanno un ordine preciso E importante tenere presente che non possibile riutilizzare una variabile scalare come array nello stesso modo non si pu riutilizzare un array come se fosse una variabile scalare Se si tenta di fare una cosa del genere l interprete dovrebbe bloccarsi con una segnalazione di errore AWK funzioni e array 3613 320 2 2 Scandire gli elementi di un array La scansione degli elementi di un array AWK pu essere un problema se si pensa alla sua natura Per esempio dal momento che facendo riferimento a un elemento che non esiste lo si crea implicitamente si capisce che non si pu nemmeno andare per tentativi Per risolvere il problema AWK fornisce due strumenti l operatore in e una variante della struttura di controllo for Per verificare che un array contenga effettivamente l elemento c
265. metri formali sono una serie di nomi che rappresentano i parametri della funzione che viene dichiarata mentre il corpo costituito da una serie di espressioni che rap presentano il contenuto della funzione che si dichiara Il valore che viene restituito dall ultima espressione che viene eseguita all interno della funzione ci che restituisce la funzione stessa L esempio seguente serve a definire la funzione moltiplica con due parametri x e y che restituisce il prodotto dei suoi due argomenti define moltiplica x y i il corpo di questa funzione molto breve x y Per chiamare questa funzione basta semplicemente un istruzione come quella seguente moltiplica 10 11 gt 110 Le dichiarazioni di questo tipo cio di variabili e di funzioni possono avvenire solo nella parte pi esterna di un programma Scheme oppure all interno della dichiarazione di altre funzioni e delle altre strutture descritte in questo capitolo ma in tal caso devono apparire all inizio del corpo delle espressioni che queste strutture contengono Si osservi l esempio seguente in cui viene dichiarata una funzione e al suo interno si dichiarano altre variabili locali define moltiplica x y dichiara le variabili locali define z 0 definisce un ciclo enumerativo per il calcolo del prodotto attraverso la somma in cui viene dichiarata implicitamente 3485 3486 Scheme struttura del programma e campo d
266. mma riprende dalla riga successiva a quella in cui era avvenuta la chiamata Questo l unico modo offerto dal Basic tradizionale per la realizzazione di subroutine L esempio seguente mostra un programma completo che visualizza il messaggio Ciao e poi il messaggio Mondo 10 GOTO 50 20 A Ciao 30 PRINT AS 40 RETURN 50 GOSUB 20 60 B Mondo 70 PRINT B 313 5 3 IF IF condizione THEN istruzione ELSE istruzione Se la condizione si verifica viene eseguita l istruzione posta dopo la parola chiave THEN al trimenti se esiste quella posta dopo la parola chiave ELSE La situazione tale per cui le istruzioni condizionate saranno prevalentemente GOTO e GOSUB L esempio seguente emette la stringa Ottimo se la variabile N contiene un valore superiore a 100 altrimenti esegue la subroutine che inizia a partire dalla riga 50 150 IF N gt 100 THEN PRINT Ottimo ELSE GOSUB 50 313 5 4 FOR FOR variabile num inizio TO fine STEP incremento istruzioni NEXT Esegue le istruzioni e ogni volta incrementa la variabile numerica indicata assegnandole inizial mente il valore posto dopo il simbolo Il blocco di istruzioni viene eseguito fino a quando la variabile raggiunge il valore finale stabilito l incremento unitario a meno che sia stato indicato diversamente attraverso l argomento della parola chiave STEP
267. mplicemente irraggiungibili Il principio di funzionamento di queste funzioni sta nel fatto che lo zero sia pari di conseguenza pari 0 gt t dispari 0 gt f Per tutti i numeri superiori invece sufficiente verificare in modo ricorsivo di che tipo il valore n 1 Per la precisione se si sta verificando il fatto che un numero sia pari se questo superiore a zero si pu verificare che quel numero meno uno sia dispari continuando cos di seguito Queste tre strutture sono importanti soprattutto perch consentono di inserire delle dichiarazioni di variabili o di funzioni oltre al fatto che cos circoscrivono un ambito locale per queste Come si visto queste dichiarazioni possono essere fatte anche prima anche con let e let tenendo conto dell ordine di valutazione che ognuna di queste strutture garantisce let x 1 y 2 define messaggio sto calcolando la somma display messaggio newline x y 5 gt 3 L esempio che si vede sopra solo un estensione di quanto gi visto sopra allo scopo di mostra re la possibilit di utilizzare la funzione define all inizio del corpo di espressioni che contiene L esempio successivo una variante ulteriore in cui il messaggio viene dichiarato tra le variabili iniziali di let let x 1 y 2 messaggio sto calcolando la somma display messaggio newline x y Appunti di informa
268. n ingresso provenga no sicuramente dal file etc passwd In questo caso vengono visualizzati i nomi degli utenti che non hanno una parola d ordine nel secondo campo usr bin awk f END print NR Legge il file fornito attraverso lo standard input ed emette il numero complessivo di record che lo compongono usr bin awk f NR 2 0 print In questo caso vengono emesse solo i record pari In pratica l espressione NR 2 0 si avvera solo quando non c resto nella divisione della variabile NR per due 319 7 Riferimenti e Arnold D Robbins Effective AWK Programming Free Software Foundation lt htip Miwww Istorg manualfcawk 3 0 3 cawk him gt lt http www gnu org manual gawk 3 0 3 gawk htmlP gt Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capitolo 920 AWK funzioni e array Un programma AWK pu contenere la dichiarazione di funzioni definite liberamente Queste dichiarazioni vanno fatte al di fuori delle regole normali Il linguaggio AWK pu gestire anche gli array che comunque sono di tipo associativo 320 1 Dichiarazione di funzioni La dichiarazione di una funzione avviene in modo simile al linguaggio C con la differenza che non si dichiara il tipo restituito dalla funzione e nemmeno quello delle variabili che ricevono i valori della chiamata function nome_della_funzione elenco_parametri_formali
269. nche la corrispondenza con un carattere scelto tra un insieme preciso utilizzando una notazione speciale ovvero un espressione tra parentesi quadre elenco_corrispondente elenco_non_corrispondente Come si vede dallo schema sintattico si distinguono due situazioni fondamentali nel primo caso si definisce un elenco di corrispondenze nel secondo si ottiene questa definizione indicando un elenco di caratteri che non si vogliono trovare Si osservi che per negare l elenco di corrispon denze si utilizza l accento circonflesso che quindi assume qui un significato speciale differente dall ancora di inizio gi descritta L elenco tra parentesi quadre pu essere un elenco puro e semplice di caratteri lungo a piace re per cui per esempio l espressione regolare piccol aieo corrisponde indifferentemente alle sottostringhe piccola piccoli piccole e piccolo In alternativa pu essere rap presentato attraverso uno o pi intervalli di caratteri ma questo implica delle complicazioni che verranno descritte in seguito Per negare un elenco lo si fa precedere da un accento circonflesso Per esempio l espressione regolare aiut ia pu corrispondere alla sottostringa aiuto e anche a molte altre ma non pu corrispondere n ad aiuti n ad aiuta Dal momento che l accento circonflesso ha un significato speciale se appare all inizio di tale co
270. nde l espressione regolare stessa I parametri in coda al modello hanno il significato seguente 9 esegue l operazione di rimpiazzo per tutte le corrispondenze che si possono avere sulla stessa riga senza limitarsi alla prima soltanto P se la sostituzione ha avuto luogo emette la riga risultante il pattern space n rimpiazza solo nell ambito dell n esima corrispondenza con l espressione regolare w file se la sostituzione ha avuto luogo scrive la riga risultante nel file indicato ed Termina il funzionamento di SED senza altre elaborazioni e senza leggere altro dai file in ingresso eia Cancella l area di memoria dove stata accumulata la riga letta avviando immediatamente un ciclo nuovo ep Emette la riga letta con le modifiche eventuali che gli fossero state apportate nel frattempo E importante ricordare che questo il comportamento predefinito di SED a meno che venga utilizzata l opzione n Nella realizzazione di script per SED occorre tenere presente che alcune realizzazioni di questo emettono la riga una sola volta anche se viene usato il comando p e non stata usata l opzione n mentre altre come nel caso di GNU lo fanno due volte Questi due comportamenti opposti sono ammissibili secondo lo standard POSIX I Questo comando permette di passare all
271. ne lt c Quando si aggiornano i sorgenti di un programma gi tradotto si pone il problema di aggiornare nello stesso modo i file PO precedenti Per fare questo si deve ricreare il file PO iniziale non tradotto nel modo appena visto quindi si usa il programma msgmerge msgmerge opzioni file_po_originale file_po_successivo gt file_po_aggiornato In pratica msgmerge fonde assieme due file PO preservando le traduzioni del primo file ri ferite a messaggi che si trovano ancora nel secondo Per esempio se si dispone gi del file vecchio po con le traduzioni mentre con xgettext appena stato generato un file PO non tradotto per lo stesso programma che qui viene chiamato non_tradotto po si pu ottenere un nuovo file PO con le traduzioni vecchie ancora valide e con i messaggi nuovi da tradurre msgmerge vecchio po non _tradotto po gt nuovo po Naturalmente questa operazione si fa nel momento in cui ci si accinge ad aggiornare material mente la traduzione del programma altrimenti questo lavoro non avrebbe senso dal momento che un file PO contenente messaggi non tradotti non pu essere compilato msgfmt opzioni file_po Il programma msgfmt quello che si occupa di compilare i file PO ottenendo i fi le MO adatti alla propria piattaforma praticamente indispensabile utilizzare l opzione output file file_mo o per indicare il nome del fil
272. ne regolare costante da sola equivale a un espressione in cui questa si paragona al record attuale awk print 0 prova c AWK introduzione 3603 319 4 Istruzioni Nel linguaggio AWK le istruzioni possono apparire nell ambito della dichiarazione delle azioni abbinate a un certo criterio di selezione dei record oppure nel corpo della dichiarazione di una funzione Le istruzioni di AWK terminano normalmente alla fine della riga salvo quando nella parte finale della riga appare una virgola una parentesi graffa aperta una doppia e commerciale amp amp o una doppia barra verticale Eventualmente per continuare un istruzione nella riga successiva si pu utilizzare una barra obliqua inversa esattamente alla fine della riga come simbolo di continuazione Un istruzione pu essere terminata esplicitamente con un punto e virgola finale in modo da poter collocare pi istruzioni in sequenza sulla stessa riga Come gi stato descritto le righe vuote e quelle bianche vengono ignorate inoltre ci che preceduto dal simbolo fino alla fine della riga considerato un commento Le istruzioni di AWK possono essere delle espressioni di assegnamento delle chiamate di funzione oppure delle strutture di controllo 319 4 1 Istruzioni fondamentali Le istruzioni fondamentali di AWK sono quelle che permettono di emettere del testo attraverso lo
273. neggiato 324 2 Impostazione cliente servente e amministrazione Il DBMS di PostgreSQL si basa su un sistema cliente servente in cui il programma che vuo le interagire con una base di dati determinata deve farlo attraverso delle richieste inviate a un servente In questo modo il servizio pu essere esteso anche attraverso la rete L organizzazione di PostgreSQL prevede la presenza di un demone sempre in ascolto pu trat tarsi di un socket di dominio Unix o anche di una porta TCP che di solito corrisponde al numero 5432 Quando questo riceve una richiesta valida per iniziare una connessione attiva una copia 3670 PostgreSQL struttura e preparazione del servente vero e proprio back end a cui affida la connessione con il cliente Il demone in ascolto per le richieste di nuove connessioni postmaster mentre il servente postgres P Generalmente il demone postmaster viene avviato attraverso la procedura di inizializzazione del sistema in modo indipendente dal supervisore dei servizi di rete In pratica di solito si utilizza uno script collocato all interno di etc rc d init d4 0in un altra collocazione simile per l avvio e l interruzione del servizio Durante il funzionamento del sistema quando alcuni clienti sono connessi si pu osservare una dipendenza del tipo rappresentato dallo schema seguente postmaster postgres l postgres postgres 324 2 1 postmaster po
274. nel modo seguente dalla documentazione standard e La tabella un insieme di pi righe Una riga una sequenza non vuota di valori Ogni riga della stessa tabella ha la stessa cardinalit e contiene un valore per ogni colonna di Introduzione a SQL 3649 quella tabella L i esimo valore di ogni riga di una tabella un valore dell i esima colonna di quella tabella La riga l elemento che costituisce la pi piccola unit di dati che pu essere inserita in una tabella e cancellata da una tabella e Il grado di una tabella il numero di colonne della stessa In ogni momento il grado della tabella lo stesso della cardinalit di ognuna delle sue righe la cardinalit della tabella cio il numero delle righe contenute la stessa della cardinalit di ognuna delle sue colonne Una tabella la cui cardinalit sia zero viene definita come vuota In pratica la tabella un contenitore di informazioni organizzato in righe e colonne La tabella viene identificata per nome cos anche le colonne mentre le righe vengono identificate attraverso il loro contenuto Nel modello di SQL le colonne sono ordinate anche se ci non sempre un elemento indi spensabile dal momento che si possono identificare per nome Inoltre sono ammissibili tabelle contenenti righe duplicate 323 4 1 Creazione di una tabella La creazione di una tabella avviene attraverso un istruzione che pu assumere un articolazione molto compless
275. nella directory etc postgresa1l In particolare si trova in questa directory il file pg_hba conf che gi stato descritto in precedenza inoltre si trova un file aggiuntivo che viene interpretato dallo script della procedura di inizializzazione del sistema che si occupa di avviare e di arrestare il servizio Si tratta del file etc postgresgl postmaster init at traverso il quale si possono controllare tante piccole cose che altrimenti andrebbero controllate attraverso le opzioni della riga di comando del demone relativo etc postgresgl postmaster init Part of the Debian package postgresql The Debian packaging is Copyright c Oliver Elphick 1997 licensed under GPL v 2 3678 PostgreSQL struttura e preparazione This is the configurable initialisation of the postgresql package The defaults are shown but are commented out H POSTGRES_HOME grep postgres etc passwd awk F print 6 if z POSTGRES_HOME then POSTGRES_HOME var postgres fi Where to find the PostgreSQL database files including those that define PostgreSQL users and permissions POSTGRES_DATA var postgres data Where to send logging and debugging traces POSTGRES_LOG var log postgres log The number of shared memory buffers the postmaster is to allocate for backend server processes Each buffer is 8Kb PGBUFFERS 64 Debugging level at which the backend serve
276. ngloba nella gestione di un cur sore non pu aggiornarsi automaticamente se i dati originali cambiano per cui come se fosse sempre definita la parola chiave INSENSITIVE FETCH NEXT FROM Mio_cursore COMMIT L esempio mostra l uso tipico dell istruzione FETCH in cui si preleva la prossima riga rispetto alla posizione corrente del cursore e pi avanti si conclude la transazione con un COMMIT L esempio seguente identico con la differenza che si indica espressamente il passo FETCH RELATIVE 1 FROM Mio_cursore COMMIT Un cursore dovrebbe essere chiuso attraverso una richiesta esplicita con l istruzione CLOSE ma la chiusura della transazione chiude implicitamente il cursore se questo dovesse essere rimasto aperto L esempio seguente riepiloga quanto visto sopra completato dell istruzione CLOSE BEGIN DECLARE Mio_cursore INSENSITIVE CURSOR FOR SELECT FROM Indirizzi ORDER BY Cognome Nome L apertura del cursore non esiste in PostgreSQL OPEN Mio_cursore FETCH NEXT FROM Mio_cursore CLOSE Mio_cursore COMMIT 325 7 Particolarit di PostgreSQL Ogni DBMS per quanto compatibile con gli standard pu avere la necessit di introdurre delle estensioni al linguaggio di gestione per permettere l accesso a funzionalit speciali che dipendo no dalle sue caratteristiche particolari In questo capitolo si voluto porre l accento su ci che il pi
277. ni ottenute da una base di dati PostgreSQL o MySQL In questo capitolo si vuole vedere in partico lare l interazione rispetto alle basi di dati di PostgreSQL In ogni caso per poter leggere questo capitolo occorre sapere cosa sia un programma CGI e come interagisce con un servente HTTP come spiegato a partire dal capitolo 162 La scelta di collocare qui queste informazioni dovuta al fatto che si tratta di un argomento legato alla programmazione SQL inoltre WWW SQL praticamente un interprete di un linguaggio specifico che gli permette di definire le richieste alla base di dati e di generare il risultato finale desiderato molto probabile che la propria distribuzione GNU Linux abbia organizzato due pacchetti di stinti in base all uso che se ne intende fare per l abbinamento con PostgreSQL oppure con MySQL In questo modo il nome del programma CGI a cui si deve fare riferimento pu cambia re leggermente anche da una distribuzione all altra Qui si fa riferimento al nome www pgsql per quello che riguarda l uso con PostgreSQL 327 1 Principio di funzionamento Ammesso che il pacchetto organizzato dalla propria distribuzione sia stato realizzato nel mo do corretto l eseguibile www pgsql dovrebbe trovarsi nella directory pi adatta per i pro grammi CGI ovvero quella a cui si accede normalmente con PURI http localhost cgi bin In tal caso per accedere a questo programma basta avviare il proprio navigatore
278. ni spa vite40 Vite 4 mm LZ 127 Vitoni spa dado30 Dado 3 mm T22 ass 127 Vitoni spa vite30 Vite 3 mm TZT eis 122 Ferroni spa vite40 Vite 4 mm L2 eei 122 Ferroni spa dado30 Dado 3 mm LAZ 122 Ferroni spa Quando si esegue un operazione del genere normale che molte delle tuple risultanti siano prive di significato per gli scopi che ci si prefigge Di conseguenza quasi sempre si applica poi una selezione attraverso delle condizioni Nel caso dell esempio sarebbe ragionevole porre come condizione di selezione l uguaglianza tra i valori dell attributo Fornitorel e CodFor Tabella 319 10 La selezione delle tuple che rispettano la condizione di uguaglianza tra gli attributi rornitorel e CodFor Fornitorel CodFor Codice Descrizione Fornitorel CodFor Ditta ae I is s 35 34455555 3 3 le a se 3 353545 55 psss vite30 Vite 3 mm LZ a 127 Vitoni spa hess vite40 Vite 4 mm I2T a 127 Vitoni spa NESS dado30 Dado 3 mm I22 ess 122 Ferroni spa a i Generalmente nella pratica non esiste la possibilit di definire un join basato sull uguaglianza dei nomi degli attributi Di solito si esegue un join che genera un prodotto tra le relazioni quindi si applicano delle condizioni di selezione come nell esempio mostrato Quando la selezione in questione del tipo visto nell esempio cio basata sull uguaglianza del contenuto di attr
279. nibili in AWK 3600 AWK introduzione Tabella 319 5 Riepilogo degli operatori principali utilizzabili nelle espressioni di AWK Operatore e operandi Descrizione espressione Valuta l espressione contenuta tra parentesi prima di analizzare la parte esterna 0p Incrementa di un unit l operando prima che venga restituito il suo valore op Incrementa di un unit l operando dopo averne restituito il suo valore 0p Decrementa di un unit l operando prima che venga restituito il suo valore op Decrementa di un unit l operando dopo averne restituito il suo valore op Non ha alcun effetto dal punto di vista numerico op Inverte il segno dell operando numerico opl op2 Somma i due operandi numerici opl op2 Sottrae dal primo il secondo operando numerico opl op2 Moltiplica i due operandi numerici opl op2 Divide il primo operando per il secondo opl op2 Modulo il resto della divisione tra il primo e il secondo operando opl op2 Esponente eleva il primo operando alla potenza del secondo var valore Assegna alla variabile il valore alla destra e restituisce lo stesso valore opl op2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 opl op2 opl opl op2 opl amp amp op2 AND logico con cortocircuito opl l op2 OR logico con cortocircuito op NOT logico opl gt op2 Vero se il prim
280. nio per Gettext potrebbe essere convenientemente pippo arrivando al risultato seguente use POSIX use Locale gettext setlocale LC_ALL textdomain pippo bindtextdomain pippo opt pippo locale Potrebbe essere che la funzione bindtextdomain non si comporti come previsto in tal caso sarebbe meglio evitarne l uso Per il resto tutto funziona come per i sorgenti scritti in C print STDOUT gettext Hello world n Tuttavia Perl non identico al C per cui occorre osservare alcune situazioni specifiche In par ticolare non possibile inserire in un argomento della funzione gettext una variabile di Perl che deve essere espansa perch questa espansione avverrebbe prima che gettext possa ricevere tale argomento Pertanto l esempio seguente non pu essere tradotto Esempio errato print STDOUT gettext Il file file contiene caratteri non validi n Il modo giusto di agire quello di sostituire print con print f come nell esempio seguente Esempio corretto printf STDOUT gettext Il file s contiene caratteri non validi n file Infatti il parametro s viene sostituito alla fine da printf per cui inizialmente la stringa non viene modificata Un altro problema da considerare sono i messaggi lunghi che richiedono pi righe In Perl si potrebbe fare una cosa del genere printf STDOUT gettext Usage
281. nismo della variabile di ambiente non viene utilizzato specificando tale directory in fase di compilazione dei sorgenti Questa directory corrisponde solitamente anche alla directory iniziale dell utente di sistema per l amministrazione di PostgreSQL che dovrebbe essere postgres per cui si potrebbe anche indicare come postgres In ogni caso questa directory normalmente var lib pgsql e tutto ci che si trova al suo interno appartiene all utente postgres anche se i permessi per il gruppo e gli altri utenti variano a seconda della circostanza Inizialmente questa directory dovrebbe contenere una serie di file il cui nome inizia per pg_ Alcuni di questi sono file di testo altri sono dei cataloghi ovvero delle tabelle che servono alla gestione del DBMS e non fanno parte delle basi di dati normali Se per qualche ragione si utilizza l utente postgres essendo questa la sua directory personale potrebbero apparire altri file che riguardano la personalizzazione di questo utente profile bash_history o altre cose simili in funzione dei programmi che si utilizzano All interno di questa directory si trova normalmente la sottodirectory base da cui si arti colano le basi di dati che vengono create di volta in volta ogni base di dati ottiene una sua sottodirectory ulteriore Per creare una nuova base di dati PostgreSQL fa uso di una base di dati di partenza templatel
282. nne di una tabella Anche se non si tratta di un comando SQL standard per PostgreSQL importante che venga eseguita periodicamente una ripulitura con il comando VACUUM eventualmente attraverso uno script simile a quello seguente da avviare per mezzo del sistema Cron bin sh su postgres c psql 1 c VACUUM In pratica richiamando questo script con i privilegi dell utente root indicando come argomen to il nome della base di dati viene inserito al posto di 1 dalla shell si ottiene di avviare il comando VACUUM attraverso psql Per riuscire a fare il lavoro in serie per tutte le basi di dati si potrebbe scrivere uno script pi complesso come quello seguente In questo caso lo script deve essere avviato con 1 privilegi dell utente postgres bin sh BASI_DATI psql templatel t c SELECT datname from pg_database echo Procedimento di ripulitura e sistemazione delle basi di dati echo di PostgreSQL echo Se l operazione dovesse essere interrotta accidentalmente echo potrebbe essere necessaria l eliminazione del file pg_vlock echo contenuto nella directory della lt ttid gt base di dati lt ttid gt relativa for BASE_DATI in BASI_ DATI l Per comprendere bene il contenuto di questa sezione pu essere necessaria la lettura del prossimo capitolo Queste informazioni sono collocate qui soltanto per una questione di ordine logico nella posizione delle
283. no separando le due parti con l operatore punto L esempio seguente gi stato mostrato in precedenza ma serve a chiarire questo modo di identificazione delle colonne SELECT Indirizzi Cognome Indirizzi Nome Indirizzi Telefono FROM Indirizzi 3698 PostgreSQL il inguaggio cognome nome telefono Pallino Pinco 0222 222222 Tizi Tizio 0555 955555 Cai Caio 0888 888888 Semproni Sempronio 0999 999999 325 4 6 Interrogazioni simultanee di pi tabelle Se dopo la parola chiave FROM si indicano pi tabelle ci vale anche se si indica pi volte la stessa tabella si intende fare riferimento a una tabella generata dal prodotto di queste Si immagini di abbinare alla tabella Indirizzi la tabella Presenze contenente 1 dati visibili nella figura 325 2 Figura 325 2 La tabella Presenze Codice Giorno Ingresso Uscita Presenze 1 01 01 1999 07 30 13 30 2 01 01 1999 07 35 13737 3 01 01 1999 07 45 14 00 4 01 01 1999 08 30 16 30 1 01 02 1999 07 35 13738 210170271999 08 35 14 37 4 01 02 1999 07 40 t3330 I Come si pu intendere la prima colonna Codice serve a identificare la persona per la quale stata fatta l annotazione dell ingresso e dell uscita Tale codice viene interpretato in base al con tenuto della tabella Indirizzi Si immagini di volere ottenere un elenco contenente tutti gli ingressi e le uscite indic
284. nome della base di dati da utilizzare Pu essere utile quando per qualche motivo potrebbe essere ambigua l indicazione del suo nome come ultimo argomento f file_di_istruzioni Questo dettaglio dovrebbe permettere di comprendere il significato della segnalazione di errore che si ottiene se si tenta di avviare psql senza indicare una base di dati quando non ne esiste una con lo stesso nome dell utente 3682 PostgreSQL struttura e preparazione Permette di fornire a psql un file da interpretare contenente le istruzioni SQL oltre agli eventuali comandi specifici di psql senza avviare cos una sessione di lavoro interattiva h host Permette di specificare il nodo a cui connettersi per l interrogazione del servente PostgreSQL H Fa in modo che l emissione di tabelle avvenga utilizzando il formato HTML 3 0 In pratica ci utile per costruire un risultato da leggere attraverso un navigatore web o file_output Fa in modo che tutto l output venga inviato nel file specificato dall argomento p porta Nel caso in cui postmaster sia in ascolto su una porta TCP diversa dal numero 5432 corrispondente al valore predefinito si pu specificare con questa opzione il numero corretto da utilizzare cd Fa s che psql funzioni in modo silenzioso limitandosi all emissione pura e sempli ce di quanto generato da
285. nte PGLIB e PGDATA si pu fare anche a meno delle opzioni diversamente diventa necessario dare queste due informazioni attraverso le opzioni della riga di comando La directory definita dalla variabile PGLIB ovvero quella che di solito corrisponde a usr lib pgsql serve a initdb per raggiungere due file globall bki source e locall_templatel bki source Questi due sono in pratica degli script che servono rispet tivamente a generare 1 file della directory iniziale del sistema di basi di dati ovvero postgres x var lib pgsq1l e della base di dati templatel corrispondente di solito al con tenuto della directory postgres base template1 In breve template lo scheletro utilizzato per la creazione di ogni nuova base di dati Prima di avviare initdb bene utilizzare l identit dell utente amministratore di PostgreSQL su postgres PostgreSQL struttura e preparazione 3669 Successivamente avviando initdb con le indicazioni corrette delle directory corrisponden ti alle variabili PGLIB e PGDATA si ottengono delle segnalazioni simili a quelle seguen ti si presume che la directory iniziale PGDATA sia gi stata creata e appartenga all utente postgres postgres initdb pglib usr lib pgsql pgdata var lib pgsql We are initializing the database system with username postgres uid 100 This user will own a
286. nterpretare come un oggetto per Scheme 3499 3500 Scheme I O Tabella 309 2 Elenco di alcune funzioni per la gestione dei dati in ingresso Funzione Descrizione read char Legge e restituisce il carattere successivo dalla porta predefinita read char porta Legge e restituisce il carattere successivo dalla porta indicata peek char Restituisce una copia del carattere successivo dalla porta predefinita peek char porta Restituisce una copia del carattere successivo dalla porta indicata read Legge un oggetto dalla porta predefinita read porta Legge un oggetto dalla porta indicata eof object porta Vero la lettura dalla porta ha raggiunto la fine L esempio seguente mostra in che modo potrebbe essere utilizzata la funzione read char Si inizia aprendo il file etc passwd dal quale vengono letti i primi caratteri Si suppone che il primo record a essere letto sia quello di definizione dell utente root apre il file e gli associa la porta utenti define utenti open input file etc passwd legge un carattere alla volta read char utenti gt r read char utenti gt 0 read char utenti gt 0 read char utenti gt t read char utenti gt Pe chiude il file close input file utenti Nell esempio seguente si vuole mostrare l uso della funzione read Prima si suppone di avere preparato il file seguente prova_lettura
287. ntesto questo pu essere usato in modo letterale solo in una posizione pi avanzata Infine per indicare una parentesi quadra aperta letterale in un contesto normale al di fuori delle espressioni tra parentesi quadre basta l espressione 316 3 6 Corrispondenze multiple Alcuni caratteri speciali fungono da operatori che permettono di definire e controllare il ripetersi di un modello riferito a un carattere precedente a una sottoespressione precedente oppure a un riferimento all indietro delle espressioni regolari BRE In tutti i tipi di espressione regolare l asterisco corrisponde a nessuna o pi ripetizioni di ci che gli precede Per esempio l espressione regolare aiuto corrisponde alla sottostringa 3576 Espressioni regolari standard aiut oppure aiuto come anche ad aiuto0000000 ecc Inoltre il caso di osservare che l espressione regolare corrisponde a qualunque stringa di qualunque dimensione Per indicare un asterisco letterale in un contesto normale basta farlo precedere da una barra obliqua inversa Nel caso di espressioni regolari ERE si possono utilizzare anche gli operatori e per in dicare rispettivamente una o pi occorrenze dell elemento precedente oppure zero o al massi mo un occorrenza di tale elemento Per esempio l espressione regolare aiuto corrisponde alla sottostringa aiuto oppure aiutoo
288. ntre con crypt no ident l autenticazione avviene attraverso il protocollo IDENT capitolo 185 demandando il riconoscimento al sistema remoto e L ultimo campo dipende dal penultimo Nel caso di autenticazione ident si utilizza solitamente la parola chiave sameuser per indicare a PostgreSQL che i nomi usati dagli utenti nei sistemi remoti da cui possono accedere coincidono con quelli predisposti per la gestione del DBMS Nel caso di autenticazione password rappresenta il nome del file di testo contenente le parole d ordine 5 Perch il sistema possa funzionare correttamente sono sempre presenti almeno i record seguenti tipo database IP maschera autorizz local all trust host all L27010 1 255 255 255 255 trust Ci consente l accesso senza altre misure di sicurezza a tutti i clienti che accedono dallo stes so sistema locale attraverso un socket di dominio Unix e agli utenti dello stesso nodo locale localhost a tutte le basi di dati L esempio seguente permette l accesso da parte di utenti provenienti dalla rete locale 192 168 gt alla base di dati nostro_db affidando il compito di riconoscimento al siste ma remoto da cui avviene la connessione e utilizzando il nome dell utente fornito in questo modo come nome di utente PostgreSQL tipo database IP maschera autorizz host nostro_db 192 168 0 0 25952554070 ident sameuser L esempio seguente simile al
289. nzione for each molto simile a map nel senso che avvia una funzione ripetutamente quanti sono gli elementi delle liste successive garantendo di eseguire l operazione in ordine secondo la sequenza degli elementi nelle liste Tuttavia non restituisce nulla 308 4 Riferimenti e A Aaby Scheme Tutorial 1996 lt ttp Mes sa1 wwe eduf cs_depUKUIPRYScheme himi gt R RS Revised 5 Report on the Algorithmic Language Scheme 1998 hip www swissaimitedu jaffer5rs_toc himl http iwww swiss ai mit edulfipdirischeme teports r3rs ps g2 gt lt gt lt Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org capitoto S09 Scheme I O Scheme ha una gestione particolare dei file Per prima cosa i flussi di file che negli altri linguaggi sono dei file handle in Scheme prendono il nome di port porte Scheme distingue quindi tra porte in ingresso in grado di consegnare dei caratteri e porte in uscita in grado di accettare caratteri 309 1 Apertura e chiusura Scheme distingue tra flussi di file in ingresso e in uscita per cui le funzioni per aprire i file e trasformarli in porte sono due uno per l apertura in lettura ingresso e l altra per l apertura in scrittura uscita La tabella riassume le funzioni utili per aprire controllare e chiudere i file Gli esempi successivi dovrebbero aiutare a comprenderne l utilizzo
290. o affatto A questo punto se si vuole consentire al proprio programma Perl di funzionare anche in un ambiente non tanto amichevole si deve prevedere una via di uscita usr bin perl use POSIX use Locale gettext setlocale LC_ALL textdomain pippo sub gettext return _ 0 Come si vede nell esempio appare la dichiarazione di una funzione commentata il cui scopo sarebbe quello di sostituirsi alla funzione gettext del modulo Locale gettext Se non si dispone di Perl gettext basta commentare la prima parte e togliere i commenti dalla seconda ovviamente i messaggi rimarranno nella lingua di partenza usr bin perl 3562 Gettext introduzione fuse POSIX use Locale gettext setlocale LC_ALL textdomain pippo sub gettext return _ 0 Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Indice analitico del volume usr lib p2c p2crcd 3248 Basic 3544 3551 BC 3522 Bubblesort 3159 3235 3291 3382 3450 3512 3537 C 3169 calloc 3209 do whil 3183 EOF 3212 exit 3190 fclose 3214 fgets 3218 FILE 3212 w N Q Ke C C C C C C C C C C C C C C C C C malloc C printf C C C C C C C C C C C C C C C C C v Q e3 5 Eh Wii a LOS o o m
291. o 3 2 2 Introduzione ai DBMS Un DBMS Data base management system letteralmente un sistema di gestione di basi di dati che per attuare questa gestione utilizza il software Queste basi di dati sono dei contenitori atti a immagazzinare una grande quantit di dati per i quali il sistema di gestione necessario a permetterne la fruizione diverso il problema della semplice archiviazione dei dati 322 1 Caratteristiche fondamentali Un DBMS per essere considerato tale deve avere caratteristiche determinate Le pi importanti che permettono di comprenderne il significato sono elencate di seguito Un DBMS fatto per gestire grandi quantit di dati Convenzionalmente si pu intendere che un gruppo di informazioni sia di grandi dimensioni quando questo non possa essere contenuto tutto simultaneamente nella memoria centrale dell elaboratore In generale un DBMS non dovrebbe porre limiti alle dimensioni tranne quelle imposte dai supporti fisici in cui devono essere memorizzate le informazioni I dati devono poter essere condivisibili L idea che sta alla base dei sistemi di gestione dei dati quella di accentrare le informazioni in un sistema di amministrazione unico In tal senso poi necessario che questi dati siano condivisibili da diverse applicazioni e da diversi utenti I dati devono essere persistenti e affidabili I dati sono persistenti quando continuano a esistere dopo lo spegnimento della macchina con
292. o da parte della prima Si pongono le alternative seguenti e CASCADE Se nella tabella esterna il dato a cui si fa riferimento stato cambiato viene cambiato anche il riferimento nella tabella di partenza se nella tabella esterna la riga corrispondente viene rimossa viene rimossa anche la riga della tabella di partenza e SET NULL Se viene a mancare l oggetto a cui si fa riferimento viene modificato il dato attribuendo il valore indefinito e SET DEFAULT Se viene a mancare l oggetto a cui si fa riferimento viene modificato il dato attribuendo il valore predefinito 3652 Introduzione a SQL e NO ACTION Se viene a mancare l oggetto a cui si fa riferimento non viene modificato il dato contenuto nella tabella di partenza Le azioni da compiere si possono distinguere in base all evento che ha causato la rottura del riferimento cancellazione della riga della tabella esterna o modifica del suo contenuto 323 4 5 Modifica della struttura della tabella La modifica della struttura di una tabella riguarda principalmente la sua organizzazione in co lonne Le cose pi semplici che si possono desiderare di fare sono l aggiunta di nuove colonne e l eliminazione di colonne esistenti Vedendo il problema in questa ottica la sintassi si riduce ai due casi seguenti ALTER TABLE nome tabella ADD COLUMN nome_colonna tipo altre_caratteristiche ALTER TABLE nome tabella DROP COLUMN nome_co
293. o di un valore predefinito INSERT INTO Indirizzi Codice Cognome Nome Telefono VALUES 01 Pinco Pallino 0222 222222 3654 Introduzione a SQL 323 5 2 Aggiornamento delle righe La modifica delle righe pu avvenire attraverso una scansione della tabella dalla prima all ultima riga eventualmente controllando la modifica in base all avverarsi di determinate condizioni La sintassi per ottenere questo risultato leggermente semplificata la seguente UPDATE tabella SET colonna_1 espressione_1 colonna_N espressione _N WHERE condizione L istruzione UPDATE esegue tutte le sostituzioni indicate dalle coppie colonna espressione per tutte le righe in cui la condizione posta dopo la parola chiave WHERE si avvera Se tale condizione manca l effetto delle modifiche si riflette su tutte le righe della tabella L esempio seguente aggiunge una colonna alla tabella degli indirizzi per contenere il nome del comune di residenza successivamente viene inserito il nome del comune Sferopoli in base al prefisso telefonico ALTER TABLE Indirizzi ADD COLUMN Comune char 30 UPDATE Indirizzi SET Comune Sferopoli WHERE Telefono gt 022 AND Telefono lt 023 Eventualmente al posto dell espressione si pu indicare la parola chiave DEFAULT che fa in modo di assegnare il valore predefinito per quella colonna 323 5 3 Eliminazione
294. o di vista booleano per cui si tratta di un e spressione che si avvera sempre portando cos alla selezione di tutti i record l azione richiede l emissione della riga attuale rappresentata da 0 Se si realizza un file contenente la regola che stata mostrata supponendo di averlo chiamato banale per avviarlo basta il comando seguente awk f banale Nel comando non stato specificato alcun file da analizzare per cui l interprete awk lo atten de dallo standard input in questo caso dalla tastiera Per terminare la prova basta concludere l inserimento attraverso la combinazione Ctrl d Un programma cos breve pu essere fornito direttamente nella riga di comando awk 1 print 0 Per realizzare uno script basta mettere l intestazione corretta al file del programma ricordando poi di rendere eseguibile il file AWK introduzione 3595 usr bin awk f 1 print 0 Prima di proseguire il caso di vedere come funzionano 1 criteri di selezione BEGIN e END BEGIN print Inizio del programma 1 print 0 END print Fine del programma In questo modo prima di iniziare la riemissione del testo che proviene dal file in ingresso vie ne emesso un messaggio iniziale quindi alla fine di tutto viene emesso un altro messaggio conclusivo 319 1 5 Variabili predefinite AWK ha ereditato dalle shell l idea delle variabili predefinite con le quali si pu modi
295. o essere diffuse e riutilizzate in base alle con dizioni poste dalla licenza GNU General Public License come pubblicato dalla Free Software Foundation In caso di modifica dell opera e o di riutilizzo parziale della stessa secondo i termini della licen za le annotazioni riferite a queste modifiche e i riferimenti all origine di questa opera devono risultare evidenti e apportate secondo modalit appropriate alle caratteristiche dell opera stes sa In nessun caso consentita la modifica di quanto in modo evidente esprime il pensiero l opinione o i sentimenti del suo autore L opera priva di garanzie di qualunque tipo come spiegato nella stessa licenza GNU General Public License Queste condizioni e questo copyright si applicano all opera nel suo complesso salvo ove indicato espressamente in modo diverso The informations contained inside this work can be spread and reused under the terms of the GNU General Public License as published by the Free Software Foundation If you modify this work and or reuse it partially under the terms of the license the notices about these changes and the references about the original work must be evidenced conforming to the work characteristics IN NO EVENT IS ALLOWED TO MODIFY WHAT ARE CLEARLY THE THOUGHTS THE OPINIONS AND OR THE FEELINGS OF THE AUTHOR This work is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY wi thout even the implied warranty of MERC
296. o gli operandi e la loro posizione Operatore e operandi Descrizione opl 0p2 Vero se gli operandi si equivalgono opl op2 Vero se gli operandi sono differenti opl lt 0p2 Vero se il primo operando minore del secondo opl gt op2 Vero se il primo operando maggiore del secondo opl lt op2 Vero se il primo operando minore o uguale al secondo opl gt op2 Vero se il primo operando maggiore o uguale al secondo Lo standard POSIX stabilisce che queste espressioni possono apparire solo come condizione delle istruzioni if while e for inoltre esclusa la possibilit di comporre espressioni pi complesse con l uso di operatori booleani 311 3 5 Funzioni standard BC predispone poche funzioni standard che si distinguono in particolare per la lunghezza del loro nome Queste sono riepilogate in breve nella tabella 311 4 Tabella 311 4 Funzioni interne Funzione Valore restituito length espressione Quantit di cifre significative dell espressione scale espressione Quantit di cifre decimali dell espressione sqrt espressione Radice quadrata dell espressione Per quanto riguarda il caso particolare di scale si fa riferimento al numero di decimali che genera l espressione in base al contesto Per esempio se il valore della variabile scale zero qualunque divisione dar soltanto un risultato intero per cui scale restitui
297. o l articolo Infine seguono le tabelle che descrivono i codici dei fornitori e quelli dei clienti Si pu intendere che una sola tabella non avrebbe potuto essere utilizzata utilmente per esprimere tutte queste informazioni importante stabilire che nel modello relazionale il collegamento tra le tuple delle varie relazio ni avviene attraverso dei valori e non attraverso dei puntatori Infatti nella relazione Articoli l attributo Fornitorel contiene il valore 123 e questo significa solo che i dati di quel fornitore sono rappresentati da quel valore Nella relazione Fornitori la tupla il cui attributo CodFor contiene il valore 123 quella che contiene i dati di quel particolare fornitore Quindi 123 non rappresenta un puntatore ma solo una tupla che contiene quel valore nell attributo giusto In questo senso si ribadisce l indifferenza della posizione delle tuple all interno delle relazioni 322 2 2 Tipi di dati domini e informazioni mancanti Nelle relazioni ogni attributo contiene una singola informazione elementare di un certo tipo per il quale esiste un dominio determinato di valori possibili Ogni attributo di ogni tupla deve contenere un valore ammissibile nell ambito del proprio dominio Spesso capitano situazioni in cui i valori di uno o pi attributi di una tupla non sono disponibili per qualche motivo In tal caso si pone il problema di attribuire a questi attributi un valore che
298. o operando maggiore del secondo opl gt op2 Vero se il primo operando maggiore o uguale al secondo opl lt op2 Vero se il primo operando minore del secondo opl lt op2 Vero se il primo operando minore o uguale al secondo opl op2 Vero se i due operandi sono uguali opl op2 Vero se i due operandi sono diversi stringa regexp Vero se l espressione regolare ha una corrispondenza con la stringa stringa regexp Vero se l espressione regolare non ha alcuna corrispondenza stringal stringa2 Concatena le due stringhe Un tipo particolare di operatore logico l operatore condizionale che permette di eseguire espressioni diverse in relazione al risultato di una condizione La sua sintassi si esprime nel modo seguente condizione espressionel espressione2 In pratica se l espressione che rappresenta la condizione si avvera viene eseguita la prima espressione che segue il punto interrogativo altrimenti viene eseguita quella che segue i due punti Per quanto riguarda il confronto tra stringhe ed espressioni regolari si deve tenere presente che lo scopo solo quello di conoscere se c o meno una corrispondenza tra il modello e la stringa Inoltre molto importante tenere in considerazione il fatto che un espressione regolare costante che non si trovi alla destra di un operatore o viene interpretata come una forma contratta dell espressione 0 regexp
299. o risultato se il confronto fallisce Si tratta di una sorta di struttura di selezione case switch e simili in cui ogni terna di pa rametri rappresenta rispettivamente le due stringhe da controllare e il risultato se queste risultano uguali Un ultimo parametro facoltativo serve a definire un risultato da emettere nel caso l unica o tutte le coppie da controllare non risultino uguali Nella tradizione di M4 comune utilizzare ifelse con un solo parametro in tal caso non si pu ottenere alcun risultato pertanto questo fatto viene sfruttato per delimitare un commento M4 introduzione 3625 Esempi ifelse Questo un commento Utilizzando un solo parametro ifelse non restituisce alcunch ifelse mio mio Vero Falso Questa istruzione restituisce la parola Vero ifelse mio mao Vero Falso Questa istruzione restituisce la parola Falso 321 3 3 shift shift parametro La macro interna shift permette di eliminare il primo parametro restituendo i rimanenti se parati da una virgola La convenienza di utilizzare questa macro sta probabilmente nell uso assieme a e Esempi shift mio tuo suo Eliminando il primo parametro si ottiene il risultato seguente tuo suo 321 3 4 forloop forloop indice inizio fine stringa_iterata La macro interna forl
300. odo un istruzione VACUUM questo file non viene rimosso impedendo tutte le attivit sulla base di dati Se questa situazione dovesse verificarsi si pu disattivare il programma servente in modo da essere certi che non ci sia alcun accesso ai dati cos da poter eliminare successivamente il file che rappresenta questo blocco 325 7 3 Impostazione dell ora locale L SQL dispone dell istruzione SET TIME ZONE per definire l ora locale e di conseguenza lo scostamento dal tempo universale PostgreSQL dispone della stessa istruzione che funziona in modo molto simile allo standard per la precisione la definizione dell ora locale avviene attra verso le definizioni riconosciute dal sistema operativo nel caso di GNU Linux si tratta delle definizioni che si articolano a partire dalla directory usr share zoneinfo v ET TIME ZONE definizione_ora_locale LOCAL Per esempio per definire che si vuole fare riferimento all ora locale italiana si potrebbe usare il comando seguente SET TIME ZONE Europe Rome Questa impostazione riguarda la visione del programma cliente mentre il programma serven te pu essere stato preconfigurato attraverso le variabili di ambiente LC_ gt oppure la varia bile LANG che in questo caso hanno effetto sullo stile di rappresentazione delle informa zioni data orario Anche il programma cliente pu essere preconfigurato attraverso la variabi
301. ogramma in modo da generare e conservare queste informazioni diagnostiche L esempio seguente in particolare avvia postmaster in modo manuale e oltre a conservare le informazioni diagnostiche in un file le visualizza continuamente attraverso una console virtuale inutilizzata l ottava su postgresiImio nohup postmaster D var lib pgsql d 1 gt var log pglog 2 gt amp 1 amp Invio exit nvio nohup tail f var lib pgsql gt dev tty8 amp Invio PostgreSQL struttura e preparazione 3675 324 3 Accesso e autenticazione L accesso alle basi di dati viene consentito attraverso un sistema di autenticazione I sistemi di autenticazione consentiti possono essere diversi e dipendono dalla configurazione di PostgreSQL fatta all atto della compilazione dei sorgenti Il file di configurazione pg_hba conf Host based authentication che si trova della direc tory iniziale dell utente postgres cio l inizio della struttura delle basi di dati serve per controllare il sistema di autenticazione una volta installato PostgreSQL L autenticazione degli utenti pu avvenire in modo incondizionato trust cosa che si fa di solito quando chi accede un utente del sistema presso cui in funzione PostgreSQL stesso in pratica ci si fida del sistema di controllo fatto dal sistema operativo L autenticazione pu essere semplicemente disabilitata nel senso di impedire qualunque accesso incondizionat
302. ogramma AWK del quale deve essere iniziata l interpretazione Una coppia di trattini dichiara la conclusione delle opzioni normali e l inizio degli argo menti finali pu essere usato per evitare ambiguit nel caso ce ne possano essere Gli argomenti successivi possono essere il programma stesso se non stata utilizzata l opzione quindi i file da fornire in ingresso per l elaborazione Esempi awk f programma awk elenco AWK introduzione 3597 Avvia l esecuzione del programma contenuto nel file programma awk per l elaborazio ne del file elenco cat elenco awk f programma awk Esattamente come nell esempio precedente con la differenza che il file elenco viene fornito attraverso lo standard input awk f programma awk F etc passwd Esegue una qualche elaborazione attraverso il programma programma awk sui dati del file etc passwd Per questo motivo viene definito l utilizzo del carattere come separatore dei campi che compongono i record di quel file awk f programma awk v FS etc passwd Esattamente come nell esempio precedente intervenendo direttamente sulla variabile predefinita FS 319 3 Espressioni L espressione qualcosa che restituisce un valore I tipi di valori gestiti da AWK sono pochi numerici numeri reali stringhe e stringhe numeriche I valori booleani non hanno un tipo indi pendente lo zero numer
303. oinsiemi a cui si fa riferimento attraverso dei nomi standard In generale si tratta di distinguere tra lettere maiuscole lettere minuscole cifre numeriche cifre alfanumeriche ecc 316 3 Composizione di un espressione regolare e corrispondenza Un espressione regolare una stringa di caratteri che nel caso pi semplice rappresentano esat tamente la corrispondenza con la stessa stringa All interno di un espressione regolare possono essere inseriti dei caratteri speciali che permettono di rappresentare delle corrispondenze in si tuazioni pi complesse Per fare riferimento a tali caratteri in modo letterale occorre utilizzare delle tecniche di protezione che variano a seconda del contesto I caratteri speciali sono tali solo nel contesto per il quale sono stati previsti Al di fuori di quel contesto possono essere caratteri normali o caratteri speciali con un significato differente La corrispondenza tra un espressione regolare e una stringa quando avviene serve a delimitare una sottostringa che pu andare dalla dimensione nulla fino al massimo della stringa di partenza importante chiarire che anche la corrispondenza che delimita una stringa nulla pu avere signi ficato in quanto identifica una posizione precisa nella stringa di partenza In generale se sono possibili delle corrispondenze differenti viene presa in considerazione quella che inizia il pi a sinistra possibile e si estende il pi a destra possibil
304. ola non basta Perch una base di dati sia riconosciuta come tale occorre che questa sia stata annotata nel file postgres pg_database La dimensione massima dei nomi dipende dal modo in cui sono stati compilati i sorgenti o dalle caratteristiche della piattaforma Il limite di 16 caratteri sufficientemente basso da andare bene in ogni circostanza 3680 PostgreSQL struttura e preparazione 324 6 Accesso a una base di dati L accesso a una base di dati avviene attraverso un cliente ovvero un programma frontale o front end secondo la documentazione di PostgreSQL Questo si avvale generalmente della libreria LibPQ PostgreSQL fornisce un programma cliente standard psql che si comporta come una sorta di shell tra l utente e la base di dati stessa 8 Il programma psql permette un utilizzo interattivo attraverso una serie di comandi impartiti dall utente su una riga di comando oppure pu essere avviato in modo da eseguire il contenuto di un file o di un solo comando fornito tra gli argomenti Per quanto riguarda l utilizzo interattivo il modo pi semplice per avviarlo quello che si vede nell esempio seguente dove si indica semplicemente il nome della base di dati sulla quale intervenire psql mio_db nvio Welcome to the POSTGRESQL interactive sql monitor Please read the file COPYRIGHT for copyright terms of POSTGRESQL type for help on slash commands type q to quit type g or terminate with
305. olonne In questi casi il campo corrispondente riceve il valore NULL cio un valore indefinito oppure il valore predefinito attraverso quanto specificato con l espressione che segue la parola chiave DEFAULT In alcuni casi non possibile definire un valore predefinito e nemmeno accettabile che un dato resti indefinito In tali situazioni si pu aggiungere NOT NULL dopo la definizione del tipo 325 4 2 Modifica della tabella Per il momento le funzionalit di modifica della struttura di una tabella sono limitate alla sola ag giunta di colonne come nell esempio seguente dove viene aggiunta una colonna per l indicazione del comune di residenza alla tabella gi vista in precedenza ALTER TABLE Indirizzi ADD COLUMN Comune char 30 E bene osservare che non sempre si ottiene il risultato desiderato 3696 PostgreSQL il linguaggio 325 4 3 Inserimento dati in una tabella L esempio seguente mostra l inserimento dell indirizzo dell impiegato Pinco Pallino INSERT INTO Indirizzi VALUES 01 Pallino Pinco Via Biglie 1 O222 2222291 In questo caso si presuppone che i valori inseriti seguano la sequenza delle colonne cos co me stata creata la tabella in origine Se si vuole indicare un comando pi leggibile oc corre aggiungere l indicazione della sequenza delle colonne da compilare come nell esempio seguente INSERT INTO Indirizzi Codice Cognome
306. oltiplicazione tra due numeri positivi attraverso la somma stato descritto nella sezione 282 2 2 moltiplica b gr define m x y auto z i z 0 for i l i lt y i z z x return z Per calcolare la moltiplicazione si utilizzi la funzione m x y In alternativa si pu tradurre il ciclo for in un ciclo while define m x y auto z i BC esempi di programmazione 3533 z 0 i 1 while i lt y z z x i i 1 312 1 3 Divisione intera tra due numeri positivi Il problema della divisione tra due numeri positivi attraverso la sottrazione stato descritto nella sezione 282 2 3 k dividi b Divide esclusivamente valori positivi define d x y auto z i z 0 i x while i gt y i i y z z 1 return z Per calcolare la divisione intera si utilizzi la funzione d x y 312 1 4 Elevamento a potenza Il problema dell elevamento a potenza tra due numeri positivi attraverso la moltiplicazione stato descritto nella sezione 282 2 4 exp b a define x x y auto z i z 1 for i l i lt y i z Z x return z Per calcolare l elevamento a potenza si utilizzi la funzione x x y In alternativa si pu tradurre il ciclo for in un ciclo while define x x y auto z i z 1 i 1 while i lt y z z x i i 1 3534 BC esempi di programmazione E poss
307. ondenza della forma n rappresenta ci che stato trova to effettivamente attraverso la sottoespressione mentre se si volesse semplicemente ripetere lo stesso modello basterebbe riscriverlo tale e quale Espressioni regolari standard 3575 316 3 4 Sottoespressioni alternative solo ERE Esclusivamente nelle espressioni regolari ERE estese possibile indicare la corrispondenza alternativa tra due modelli utilizzando il carattere speciale la barra verticale Di solito si utilizza questa possibilit delimitando espressamente le sottoespressioni alternative in modo da evitare ambiguit tuttavia questo non dovrebbe essere necessario dal momento che si tratta di un operatore con un livello molto basso di precedenza Per esempio l espressione regolare auto dog matico pu corrispondere indifferente mente alla sottostringa automatico oppure dogmatico 316 3 5 Corrispondenza con un carattere singolo In un espressione regolare qualsiasi carattere che nel contesto non abbia un significato particolare corrisponde esattamente a se stesso Il carattere speciale il punto rappresenta un carattere qualunque a esclusione di lt NUL gt Per esempio l espressione regolare nuo o corrisponde a nuoto nuovo e ad altre sottostringhe simili Per indicare un punto letterale occorre utilizzare l espressione barra obliqua inversa punto E possibile definire a
308. one CONVEMT Formato di conversione da numero a stringa FILENAME Nome del file attuale in ingresso oppure FNR Numero del record attuale nel file attuale FS Separatore dei campi in lettura NF Numero totale dei campi nel record attuale NR Numero totale dei record letti fino a questo punto OFMT Formato di emissione dei numeri di solito si tratta di 6g OFS Separatore dei campi per print ORS Separatore dei record per print RS Separatore dei record in lettura RSTART Utilizzata da match per annotare l inizio di una corrispondenza RLENGTH Utilizzata da match per annotare la lunghezza di una corrispondenza il caso di ribadire alcuni concetti fondamentali riferiti alle variabili FS e RS e I record in ingresso sono distinti in base al contenuto della variabile RS Per restare ade renti allo standard POSIX questa pu contenere un carattere oppure la stringa nulla Di solito la variabile RS contiene il carattere lt LF gt ovvero il codice di interruzione di riga AWK introduzione 3609 comune nei sistemi Unix Nel caso in cui sia indicata la stringa nulla si di fronte a una situazione particolare i record sono separati da una o pi righe bianche o vuote e I campi dei record in ingresso sono distinti in base al contenuto della variabile Fs Questa variabile pu contenere un carattere singolo oppure un espressione regolare senza deli
309. one a SQL 324 PostgreSQL struttura e preparazione 325 PostgreSQL il linguaggio LL 326 PostgreSQL accesso attraverso PBACCESS LL 327 PostgreSQL accesso attraverso WWW SQL 0 nnne 328 Le funzioni e i trigger in PostgreSQL un esercitazione didattica Indice analitico del volume 3570 Parte lxili Linguaggi per la comparazione 316 Espressioni regolari standard L LL 3572 316 1 RE BRE ERE SRE ii iii ao 3572 316 2 Problemi di localizzazione LL Li 3572 316 3 Composizione di un espressione regolare e corrispondenza 3573 316 4 Espressioni tra parentesi quadre L Li 3576 316 5 IPIECERENZEe lie ai 3579 316 0 Riferiment siria ea e a 3579 317 Confronto sintetico tra le espressioni regolari reali LL 3580 3571 Capitolo 3 6 Espressioni regolari standard L espressione regolare un modo per definire la ricerca di stringhe attraverso un modello di comparazione Viene usato da diversi programmi di servizio ma non tutti aderiscono agli stessi standard In questo capitolo si vuole descrivere lo standard POSIX al riguardo Questo tipo di definizione non vale in generale e non corrisponde nemmeno ad alcuna situazione pratica in cui vengono utilizzate le espressioni regolari con i programmi che si trovano general mente con GNU Linux Tuttavia un riferimento utile per comprendere meglio la f
310. oni regolari di tipo BRE o di tipo ERE dipen dendo dal programma di servizio la scelta tra l una o l altra forma In generale la necessit di definire un modello grammaticale differente da SRE dipende dalla presenza di problemi legati alla localizzazione 316 2 Problemi di localizzazione L espressione regolare essendo un mezzo per identificare una porzione di testo risente di problemi legati alle definizioni locali degli insiemi di caratteri Per prima cosa occorre considerare che gli alfabeti nazionali sono differenti da un linguaggio all altro Dal punto di vista della localizzazione gli elementi che compongono gli alfabeti sono degli elementi di collazione collating element Questi elementi compongono un insieme or dinato definito sequenza di collazione collating sequence che permette di stabilire l ordine alfabetico delle parole In situazioni particolari alcuni elementi di collazione sono rappresentati da pi di un carattere cosa che pu dipendere da motivazioni differenti Per fare un esempio comune questo pu essere causato dalla mancanza del carattere adatto a rappresentare un certo elemento come succede nella lingua tedesca quando si utilizza un insieme di caratteri che non dispone delle vocali con la dieresi oppure manca la possibilit di indicare la lettera B 3572 Espressioni regolari standard 3573 B gt SS gt ae gt oe gt ue Nella lingua tedesca nel momento in cui si u
311. ono elencati nella tabella 311 1 Esiste tutta via un chiarimento da fare sull espressione op1 op2 che non si comporta secondo lo standard comune Infatti solo quando scale contiene il valore zero il risultato il resto della divisione intera diversamente si ottiene il resto della divisione tolto il risultato ottenuto in base alla quan tit di cifre decimali stabilito dalla variabile scale Per esempio se scale contiene il valore cinque 10 3 genera il risultato 0 00001 Infatti potendo gestire cinque cifre decimali 10 3 d il risultato 3 333 33 per cui il resto della divisione rimane solo 0 00001 3 33333 3 0 00001 10 Tabella 311 1 Elenco degli operatori aritmetici e di quelli di assegnamento relativi a valori numerici Operatore e operandi Descrizione 0p Incrementa di un unit l operando prima che venga restituito il suo valore op Incrementa di un unit l operando dopo averne restituito il suo valore 0p Decrementa di un unit l operando prima che venga restituito il suo valore op Decrementa di un unit l operando dopo averne restituito il suo valore op Non ha alcun effetto op Inverte il segno dell operando opl op2 Somma i due operandi opl op2 Sottrae dal primo il secondo operando opl op2 Moltiplica i due operandi opl op2 Divide il primo operando per il secondo opl op2 Modulo il resto della divisione tra il primo e il secondo operando
312. oop permette di svolgere una sorta di ciclo in cui l ultimo parametro il quarto viene eseguito tante volte quanto necessario a raggiungere il valore numerico espresso dal terzo parametro Nel corso di questi cicli il primo parametro viene trattato come una macro che di volta in volta restituisce un valore progressivo a partire dal valore del secondo parametro fino al raggiungimento di quello del terzo Esempi forloop i 1 7 vi r Restituisce la sequenza dei numeri da uno a sette seguiti da un punto e virgola li 2 3 4 5 6 T 321 4 Altre macro interne degne di nota In questa introduzione a M4 ci sono altre macro interne che importante conoscere per compren dere le possibilit di questo linguaggio Attraverso queste macro descritte nelle sezioni seguenti possibile eliminare un codice di interruzione di riga inserire dei file cambiare i delimitatori dei commenti e deviare l andamento del flusso di output 3626 M4 introduzione 321 4 1 dnl dn1 commento newline dnl una macro anomala nel sistema di M4 non utilizza parametri ed elimina tutto quello che appare dopo di lei fino alla fine della riga comprendendo anche il codice di interruzione di riga La natura di M4 in cui tutto fatto sotto forma di macro fa s che ci si trovi spesso di fronte al problema di righe vuote ottenute nell output per il solo fatto di avere utilizzato macro interne che non restituiscono alcun
313. oposti per evitare di visualizzare uno zero aggiuntivo conviene assegnare il valore restituito dalla funzione stessa v lt lista gt lt inizio gt lt fine gt define v 1 a z auto j for j a j lt z j 1111 return 312 3 1 Bubblesort Il problema del Bubblesort stato descritto nella sezione 282 4 1 Viene mostrato prima una soluzione iterativa e successivamente la funzione bsort in versione ricorsiva bsort b 1 l array da riordinare b lt inizio gt lt fine gt 3538 BC esempi di programmazione define b a z auto s j k Inizia il ciclo di scansione dell array for j a j lt z j JA Scansione interna dell array per collocare nella posizione j l elemento giusto for k 3j 1 k lt z k if 1 k J lt 1 j Scambia i valori s 1 k 1 k 1 j 1 j s return Bubblesort 1 t b lt inizio gt lt fine gt L array da riordinare 1 Segue la funzione bsort in versione ricorsiva define b a z auto s k if a lt z Scansione interna dell array per collocare nella posizione a l elemento giusto y for k a 1 k lt z k if 1 k lt l1 a Scambia i valori s 1 k 1 K 1 a l a s b a l z return 312 3 2 Torre di Hanoi Il problema della torre di Hanoi stato descritto nella sezione
314. oria SUM il valore massimo MAX il valore minimo MIN la media AVG L esempio seguente calcola lo stipendio medio degli impiegati ottenendo i dati da un ipotetica tabella Emolumenti limitandosi ad analizzare le righe riferite a un certo settore SELECT AVG Stipendio FROM Emolumenti WHERE Settore Amministrazione L esempio seguente una variante in cui si estraggono rispettivamente lo stipendio massimo medio e minimo SELECT MAX Stipendio AVG Stipendio MIN Stipendio FROM Emolumenti WHERE Settore Amministrazione L esempio seguente invece volutamente errato perch si mescolano funzioni aggreganti assieme a espressioni di colonna normali Esempio errato SELECT MAX Stipendio Settore FROM Emolumenti WHERE Settore Amministrazione 323 6 6 Raggruppamenti Le aggregazioni possono essere effettuate in riferimento a gruppi di righe distinguibili in base al contenuto di una o pi colonne In questo tipo di interrogazione si pu generare solo una tabella composta da tante colonne quante sono quelle prese in considerazione dalla clausola di raggruppamento assieme ad altre contenenti solo espressioni di aggregazione Alla sintassi normale gi vista nelle sezioni precedenti si aggiunge la clausola GROUP BY v ELECT specificazione_della_colonna_1 specificazione_della_colonna_N FROM specificazione_della_ta
315. orrispondente a un certo indice si usa l operatore in nel modo seguente indice in array Per esempio per verificare che esista l elemento prova 234 si pu usare un istruzione simile a quella seguente if 234 in prova print L elemento prova 234 corrisponde a prova 234 Per scandire tutti gli elementi di un array si usa la struttura di controllo for in un modo particolare for variabile in array istruzione In pratica per ogni elemento contenuto nell array viene eseguita l istruzione o il blocco di istruzioni che segue tenendo conto che alla variabile viene assegnato ogni volta l indice dell elemento in corso di elaborazione chiaro che l ordine in cui appaiono gli elementi dipende dall interprete AWK in generale do vrebbe dipendere dalla sequenza con qui questi sono stati inseriti L esempio seguente scandisce un array e mostra il contenuto di ogni elemento for i in elenco print elenco i elencol i 320 2 3 Cancellazione di un elemento L eliminazione di un elemento di un array si ottiene con l istruzione delete delete array indice Alcune realizzazioni di AWK sono in grado di eliminare completamente un array se non si indica l indice di un elemento In alternativa si ottiene questo risultato con la funzione split come si vede sotto L uso di questa funzione viene mostrato pi avanti split
316. ple di altre relazioni quando altre relazioni condizionano la validit di un attributo determinato I vincoli di tupla ovvero quelli che riguardano i primi due punti dell elenco appena indicato sono i pi semplici da esprimere perch non occorre conoscere altre informazioni esterne alla tupla stessa Per esempio un attributo che esprime un prezzo potrebbe essere definito in modo tale che non sia ammissibile un valore negativo nello stesso modo un attributo che esprime uno sconto su un prezzo potrebbe ammettere un valore positivo diverso da zero solo se il prezzo a cui si riferisce contenuto nella stessa tupla supera un valore determinato Introduzione ai DBMS 3635 Il caso pi importante di un vincolo interno alla relazione che coinvolge pi tuple quello che riguarda le chiavi In certe situazioni un attributo o un gruppo particolare di attributi di una relazione deve essere unico per ogni tupla Quindi questo attributo o questo gruppo di attributi valido solo quando non gi presente in un altra tupla della stessa relazione Quando le informazioni sono distribuite fra pi relazioni i dati sono validi solo quando tutti i riferimenti sono validi Volendo riprendere l esempio della gestione di magazzino visto pre cedentemente una tupla della relazione Movimenti che dovesse contenere un codice di un fornitore o di un cliente inesistente si troverebbe in pratica senza questa informazione 322 2 4 Chiavi
317. po corta altrimenti procede if i 1 se si tratta del primo elemento basta la funzione car per prelevarlo car x altrimenti si utilizza una chiamata ricorsiva i esimo elemento i 1 cdr x e Estrae l ultimo elemento define ultimo x if null x la lista vuota e questo un errore errore la lista vuota altrimenti si occupa di estrarre l ultimo elemento if null cdr x se si tratta di una lista contenente un solo elemento restituisce il primo e unico di questa car x altrimenti utilizza una chiamata ricorsiva ultimo cdr x e Elimina l ultimo elemento define elimina ultimo x if null x la lista vuota e questo un errore errore la lista vuota altrimenti si occupa di eliminare l ultimo elemento if null cdr x 3496 Scheme liste e vettori se si tratta di una lista contenente un solo elemento restituisce la lista vuota altrimenti utilizza una chiamata ricorsiva per comporre una lista senza l ultimo elemento cons car x elimina ultimo cdr x Restituisce la parte finale della lista escludendo alcuni elementi iniziali Si tratta precisamente di una funzione di libreria di Scheme denominata list tail define list tail x k if zero k se k pari a zero viene restituita tutta la lista X altrimenti occorre eliminare k 1 elementi iniziali i da cdr x list tail cdr x k 1
318. ppresentazione di informazioni data orario complete per il tipo TIMESTAMP La data separata dall ora da uno spazio 323 2 3 2 Costanti che esprimono intervalli Un informazione che rappresenta un intervallo di tempo inizia sempre con la parola chiave INTERVAL ed seguita da una stringa che contiene l indicazione di uno o pi valori seguiti ognuno dall unit di misura relativi ammesso che ci sia necessario Si osservino i due esempi seguenti INTERVAL 12 HOUR 30 MINUTE 50 SECOND INTERVAL 12 30 50 Queste due forme rappresentano entrambe la stessa cosa una durata di 12 ore 30 minuti e 50 secondi In generale dovrebbe essere preferibile la seconda delle due forme di rappresentazione INTERVAL 10 DAY 12 HOUR 30 MINUTE 50 SECOND INTERVAL 10 DAY 12 30 50 Come prima i due esempi che si vedono sopra sono equivalenti Intuitivamente si pu osser vare che non ci pu essere un altro modo di esprimere una durata in giorni senza specificarlo attraverso la parola chiave DAY Per completare la serie di esempi si aggiungono anche i casi in cui si rappresentano esplicita mente quantit molto grandi che di conseguenza sono approssimate al mese come richiede lo standard SQL92 INTERVAL 10 YEAR 11 MONTH INTERVAL 10 YEAR Gli intervalli di tempo possono servire per indicare un tempo trascorso rispetto al momento at tuale Per specificare espressamente questo f
319. r sempre solo zero Oltre a queste funzioni possibile chiedere a BC di mettere a disposizione alcune funzioni da una libreria standard Si tratta di quelle elencate nella tabella 311 5 BC 3529 Tabella 311 5 Funzioni della libreria standard Funzione Valore restituito s x Seno c x Coseno a x Arcotangente I x Logaritmo naturale e x Funzione esponenziale e elevato alla x j n x Funzione di Bessel 311 3 6 Strutture di controllo di flusso Il linguaggio BC gestisce le strutture di controllo di flusso principali anche se con qualche limi tazione E disponibile una struttura condizionale semplificata senza l analisi di un alternativa il ciclo iterativo e il ciclo enumerativo if condizione istruzione while condizione istruzione for espressionel espressione2 espressione3 istruzione Come nel linguaggio C dal momento che si possono raggruppare le istruzioni in blocchi racchiusi tra parentesi graffe in pratica si utilizzano queste strutture nel modo seguente if condizione istruzione while condizione istruzione for espressionel espressione2 espressione3 istruzione Naturalmente le tre espressioni tra parentesi del ciclo enumerativo vanno intese nel modo comu ne Per esempio ci che appare di seguito serve a mostrare 10 x attraverso il conteggio di una variabile for i 0 i lt 10 i
320. r plpgsqli nvio A questo punto per inserire un libro a prestito si user l istruzione standard biblioteca gt insert into prestiti n_inv cod ut data p gt values 3 2 2001 10 10 nvio Se il libro non gi a prestito si ottiene la segnalazione standard del fatto che il libro stato inserito Se si ritenta l inserimento di un prestito con lo stesso numero di inventario si ottiene solo la segnalazione di errore prevista biblioteca gt insert into prestiti n_inv cod ut data p gt Cvalues 3 3 2001 10 10 nvio ERROR il libro gi a prestito 328 3 Riferimenti e Bruce Momjian PostgreSQL Introduction and concepts capitolo Functions and trigger http www postgresql org docs aw_pgsql_bookfindex html e The PostgreSQL Global Development Group PostgreSQL Programmer s guide capitolo Pl pgSQL SQL procedural language lt http www postgresgql org idocs index php programmer htmI gt lt gt Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Indice analitico del volume etc postgresal pg_hba conf 3677 etc postgresql postmaster initl 3677 AWK 3592 3611 basi di dati 3631 BRE 3572 CGI TIA CGI accesso a una base di dati 3714 createdb 3679 createuse DBA 3632 DBMS 3631 DBMS DBA 3632 DBMS DDL 3632 DBMS DML 3632 DDL 3632 destroyuse DMI 3632 dropdb 3679 E
321. razione interpretato da SED deve ordinare quando emettere ogni riga 318 2 Logica di funzionamento Il primo compito di SED una volta avviato quello di raccogliere tutto ci che deve andare a comporre il programma di elaborazione pu trattarsi di direttive fornite singolarmente attra verso l opzione e e di gruppi di direttive fornite all interno di file appositi indicati attraverso l opzione f In particolare SED si prende cura di mantenerne intatto l ordine Successivamen te concatena i dati in ingresso secondo la sequenza indicata dei file posti alla fine della riga di comando oppure utilizza direttamente lo standard input Lo schema che appare nella figura si avvicina all idea del funzionamento di SED il flus so in ingresso viene letto sequenzialmente una riga alla volta ogni volta la riga viene messa in un area transitoria nota come pattern space viene confrontata la riga con ogni direttiva del programma di elaborazione e se nessuna di queste direttive coincide la riga non viene elabora ta compiendo semplicemente l azione predefinita prima di passare al prossimo ciclo di lettura Se una o pi direttive del programma di elaborazione corrispondono alla riga vengono esegui te sequenzialmente le elaborazioni previste poi alla fine si passa comunque per l esecuzione dell azione predefinita Figura 318 2 Struttura semplificata del funzionamento di SED denn gt Lettura di una riga
322. refisso di un numero positivo uno spazio Il prefisso di un numero positivo il segno Allinea a sinistra rispetto al campo Utilizza zeri invece di spazi per allineare a destra Prefissa un numero ottale con uno zero e un numero esadecimale con 0x Un numero definisce la dimensione minima del campo s Ro 3602 AWK introduzione Simbolo Corrispondenza n Per i numeri interi indica il numero minimo di cifre n Per i numeri a virgola mobile esprime la precisione ovvero il numero di decimali n Per le stringhe definisce la lunghezza massima In generale sarebbe bene non modificare il valore predefinito della variabile CONVFMT so prattutto non il caso di ridurre la precisione della conversione dal momento che la perdita di informazioni che ne deriverebbe potrebbe creare anche dei gravi problemi a un programma In altri termini il formato di conversione condiziona la precisione dei valori che possono essere gestiti in un programma AWK 319 3 6 Esempi di espressioni Prima di proseguire con la descrizione del linguaggio AWK vengono mostrati alcuni esempi di programmi banali in cui tutto si concentra sulla definizione delle espressioni per stabilire la selezione dei record L azione che si abbina molto semplice l emissione del record selezionato attraverso l istruzione print ls l etc awk 1 rw r r print 0 L esempio appena mostrato fornisc
323. ressione_1 N espressione_2 si printf stringa di formato espressione_1 L espressione 2 s L istruzione ovvero la funzione printf si comporta come la sua omonima del linguaggio C il primo argomento una stringa di formato contenente una serie di simboli che iniziano con il simbolo che vanno rimpiazzati ordinatamente con gli argomenti successivi Le tabelle 319 6 e 319 7riepilogano i simboli utilizzabili nelle stringhe di formato di sprint f Eventualmente per una descrizione pi dettagliata si pu leggere la pagina di manuale sprintf 3 3604 AWK introduzione A differenza di print printf non fa uso delle variabili OFS e ORS dal momento che quello che serve pu essere inserito tranquillamente nella stringa di formato il carattere lt LF gt corrispondente al codice di interruzione di riga viene indicato con la sequenza di escape n 319 4 2 Ridirezione dell output L output generato dalle istruzioni print e printf pu essere ridiretto all interno del pro gramma AWK stesso utilizzando gli operatori gt gt gt e Questo permette di ridirigere i dati verso file differenti diversamente converrebbe intervenire all esterno del programma per mezzo del sistema operativo print gt file printf gt file print gt gt file printf gt gt file print comando
324. risultato La macro dnl serve principalmente per questo eliminando anche il codice di interruzione di riga si risolve il problema delle righe vuote inutili Teoricamente AnI potrebbe essere utilizzata anche con l aggiunta di parametri tra parentesi Il risultato che si ottiene che i parametri vengono raccolti e interpretati come succederebbe con un altra macro normale senza per produrre risultati Naturalmente questo tipo di pratica sconsigliabile Esempi dnl Questo un commento vero e proprio define CIAO maramao dnl CIAO L esempio mostra i due usi tipici di dnl come introduzione di un commento fino alla fine della riga oppure soltanto come un modo per sopprimere una riga che risulterebbe vuota nell output Il risultato dell elaborazione composto da una sola riga maramao 321 4 2 changecom changeconm simbolo_iniziale la simbolo_finale changecom permette di modificare i simboli di apertura e di chiusura dei commenti Solita mente i commenti sono introdotti dal simbolo e sono terminati dal codice di interruzione di riga Quando si utilizza M4 per produrre il sorgente di un certo linguaggio di programmazione o un file di configurazione probabile che i commenti di questi file debbano essere modifica ti attraverso le macro stesse In questo senso spesso diventa utile cancellare la definizione dei commenti che impedirebbero la loro espansion
325. rit degli operatori AND e OR quando sono coinvolti valori indefiniti How Il j v Z 3 J Il Vr v v l Hi j mey 4 cv P_PPEP PED D Z 3 J H Ho At ou HM og Il Hj Ee e e e r s e e Hj Il O 0 O 0 0 0 0 ARI RAI AR A R D Z 322 3 5 Relazioni derivate e viste Precedentemente si accennato al fatto che la rappresentazione finale dei dati pu essere diversa da quella logica Nel modello relazionale possibile ottenere delle relazioni derivate da altre attraverso una funzione determinata che stabilisce il modo con cui ottenere queste derivazioni Si distingue fondamentalmente tra e relazioni derivate virtuali o viste che non generano nuove relazioni memorizzate nella base di dati il cui contenuto viene generato al volo al momento della necessit e relazioni derivate materializzate che generano una nuova relazione nella base di dati Il primo dei due casi semplice da gestire perch i dati sono sempre allineati correttamente ma pesante dal punto di vista elaborativo il secondo ha invece i pregi e i difetti opposti Con il termine vista si intende fare riferimento alle relazioni derivate virtuali Introduzione ai DBMS 3641 322 4 Riferimenti e Paolo Atzeni Stefano Ceri Stefano Paraboschi Riccardo Torlone Basi di dati concetti linguaggi e architetture McGraw Hill Appunti di informatica libera 2003 01 01 Copyright
326. rizzi ORDER BY Cognome Nome codice cognome nome indirizzo telefono 3 Cai Caio Via Caini 1 0888 888888 1 Pallino Pinco Via Biglie 1 0222 222222 4 Semproni Sempronio Via Sempi 7 0999 999999 2 Tizi Tizio Via Tazi 5 055573955355 La selezione delle colonne permette di ottenere un risultato con le sole colonne desiderate per mettendo anche di cambiarne l intestazione L esempio seguente permette di mostrare solo i nominativi e il telefono cambiando un po le intestazioni SELECT Cognome as cognomi Nome as nomi Telefono as numeri_telefonici FROM Indirizzi Quello che si ottiene simile all elenco seguente cognomi nomi numeri_telefonici Pallino Pinco 0222 222222 Tizi Tizio 0555 555555 Cai Caio 0888 888888 Semproni Sempronio 0999 999999 La selezione delle righe pu essere fatta attraverso la condizione che segue la parola chiave WHERE Nell esempio seguente vengono selezionate le righe in cui l iniziale dei cognomi compresa tra N e T SELECT FROM Indirizzi WHERE Cognome gt N AND Cognome lt T Dall elenco che si ottiene si osserva che Caio stato escluso codice cognome nome indirizzo telefono 1 Pallino Pinco Via Biglie 1 0222 222222 2 Tizi Tizio Via Tazi 5 05597555595 4 Semproni Sempronio Via Sempi 7 0999 999999 Come si vedr meglio in seguito per evitare ambiguit possono essere indicati i nomi delle co lonne prefissati dal nome della tabella a cui appartengo
327. rs are to operate 1 trace connection traffic only gt 2 turn on debugging in the backends giving more information according to the debug level Debug logs are sent to POSTGRES_LOG PGDEBUG 0 Whether to echo queries to the debug log yes no PGECHO n0o Whether to disable the fsync call after each transaction If fsync is disabled performance will improve at the cost of an increased risk of data corruption in the event of power or other hardware failure yes no PGESYNC yes How to present dates to the frontend The choices are American mm dd yyyy or European dd mm yyyy PGDATESTYLE European How much memory to use for internal sorts before resorting to the disk This value is in kilobytes PGSORTMEM 512 Whether to print timing and other statistics after each query yes no PGSTATS no Whether to allow connections through TCP IP as well as through Unix sockets yes no By default for greater security we do not allow TCP IP access This means that only users on this machine can access the database PGALLOWTCPIP yes he Internet TCP port on which postmaster is to listen for connections from frontend applications PGPORT 5432 Locale setting for the postmaster and backend to use this is not necessary for USA users but most others will probably want to set it it controls things like the format of numbers and dates for example us LANG en_GB for British English LANG it_IT
328. rtabili usr bin bc 311 5 BC nella realizzazione GNU La realizzazione GNU di BC consente l uso di diverse estensioni rispetto allo standard POSIX in particolare completa la struttura di controllo condizionale con l alternativa else aggiunge l istruzione print per una gestione migliore della visualizzazione di informazioni e consente l uso di operatori booleani nelle espressioni logiche che possono essere usate anche al di fuori del contesto restrittivo stabilito da POSIX Tuttavia possibile richiedere un funzionamento stret tamente aderente allo standard POSIX utilizzando l opzione s oppure creando la variabile di ambiente POSIXLY_ CORRECT L eseguibile bc consente l uso di pi opzioni della riga di comando alcune delle quali vengono descritte brevemente nel seguito Alcune opzioni 1 mathlib Richiede l uso delle librerie matematiche standard impostando la variabile scale al valore 20 W warn Segnala l uso di estensioni allo standard POSIX standard Restringe il funzionamento allo standard POSIX 311 6 Riferimenti e IEEE P1003 2 Draft 11 2 September 1991 bc Arbitrary precision arithmetic language lt http www funet fi pub doc posix o 1003 2741 1 274 3 gt Appunti di informatica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org GNU BC GNU GPL Capitolo d
329. ruzione SELECT pu servire per creare una nuova tabella a partire dai dati ottenuti dalla sua interrogazione vu ELECT specificazione_della_colonna_1 specificazione_della_colonna_N INTO TABLE tabella_da_generare FROM specificazione_della_tabella_1 L Sspecificazione_della_tabella_N WHERE condizione L esempio seguente crea la tabella Mia_prova come risultato della fusione delle tabelle Indirizzi e Presenze SELECT Presenze Giorno Presenze Ingresso Presenze Uscita Indirizzi Cognome Indirizzi Nome INTO TABLE Mia_prova FROM Presenze Indirizzi WHERE Presenze Codice Indirizzi Codice 323 7 2 Inserimento in una tabella esistente L inserimento di dati in una tabella esistente prelevando da dati contenuti in altre pu essere fatta attraverso l istruzione INSERT sostituendo la clausola VALUES con un interrogazione SELECT INSERT INTO nome_tabella colonna_1 colonna_N SELECT espressione_l espressione_N FROM tabelle_di_origine WHERE condizione L esempio seguente aggiunge alla tabella dello storico delle presenze le registrazioni vecchie che poi vengono cancellate INSERT INTO PresenzeStorico PresenzeStorico Codice PresenzeStorico Giorno PresenzeStorico Ingresso PresenzeStorico Uscita Cp ELECT Presenze Codice Presenze Giorno Presenze Ingresso Presenze Uscita FROM Presenze WHERE Presenze G
330. rvalli rispet tivamente tra a e c e tra g e z Al contrario l espressione regolare a c z indica l intervallo da a a c oppure il trattino perch fuori dal contesto previsto per indicare un intervallo oppure 2 Quando si indicano degli intervalli non tanto ovvi occorre prestare attenzione alla localiz zazione per sapere esattamente cosa viene coinvolto In generale per questo motivo le espres sioni regolari che contengono espressioni tra parentesi quadre con l indicazioni di intervalli non sono portabili da un sistema all altro 316 4 5 Protezione all interno di espressioni tra parentesi quadre 69 Dal momento che in un espressione tra parentesi quadre i caratteri e hanno un signi ficato speciale per poterli utilizzare occorrono degli accorgimenti se si vuole usare l accento circonflesso in modo letterale necessario che questo non sia il primo per indicare il trattino si pu descrivere un intervallo in cui sia posto come carattere iniziale o finale In alternativa i caratteri che non si riescono a indicare come le parentesi quadre possono essere racchiuse attraverso i delimitatori dei simboli di collazione perle parentesi e per un trattino All interno di un espressione tra parentesi quadre i caratteri che sono speciali al di fuori di questo contesto qui perdono il loro signif
331. sata per importare dati dallo standard input necessario che dopo l ultima riga che contiene attributi da inserire nella tabella sia presente una sequenza di escape speciale una barra obliqua inversa seguita da un punto Il file ottenuto quando si esporta verso lo standard output contiene questo simbolo di conclusione Il file di testo in questione pu contenere anche altre sequenze di escape che si trovano descritte nella tabella 325 6 Tabella 325 6 Sequenze di escape nei file di testo generati e utilizzati da copy Escape Descrizione Una barra obliqua inversa Simbolo di conclusione del file N NULL delimitatore Protegge il simbolo che viene gi utilizzato come delimitatore lt LF gt Tratta lt LF gt in modo letterale importante fare mente locale al fatto che l istruzione viene eseguita dal servente Ci signi fica che i file di testo quando non si tratta di standard input o di standard output sono creati o cercati secondo il file system che questo servente si trova ad avere sotto di s COPY Indirizzi TO STDOUT L esempio mostra l istruzione necessaria a emettere attraverso lo standard output del programma cliente psql la trasformazione in testo del contenuto della tabella Indirizzi COPY Indirizzi TO tmp prova USING DELIMITERS In questo caso si genera il file tmp prova nel file system dell elaboratore servente inoltre g
332. scere le variabili di ambiente PGHOST e PGPORT La prima serve a stabilire l indirizzo o il nome di dominio del servente indicando implicitamente che la connessione avviene attraverso una connessione TCP e non con un socket di dominio Unix la seconda specifica il numero della porta ammesso che si voglia utilizzare un numero diverso da 5432 L uso di queste variabili non indispensabile ma serve solo per non dover specificare queste informazioni attraverso opzioni della riga di comando PostgreSQL struttura e preparazione 3681 Si pu osservare utilizzando psql che l invito mostrato cambia leggermente a seconda del contesto inizialmente appare nella forma mentre quando in corso l inserimento di un istruzione SQL non ancora terminata si trasforma in gt Il comando g viene usato prevalentemente in questa situazione gt gt gInvio Le istruzioni SQL possono anche essere raccolte in un file di testo normale In tal caso si pu utilizzare il comando i per fare in modo che psql interpreti il suo contenuto come nell esempio seguente dove il file in questione mio_file sql gt i mio_file sqli nvio Nel momento in cui si utilizza questa possibilit quella di scrivere le istruzioni SQL in un file facendo in modo che poi questo venga letto e interpretato diventa utile il poter annotare dei commenti Questi sono iniziati da una sequenza di due trattini
333. scm somma L 2 moltiplicazione 2 5 stringa ciao valore numerico 123 fine Supponendo che il file si chiami prova_lettura scm si osservi la sequenza di istruzioni Scheme seguente assieme a ci che si ottiene dalla lettura del file apre il file e gli associa la porta prova define prova open input file prova_lettura scm legge il primo oggetto read utenti gt 1 2 legge il secondo oggetto read utenti gt 2 5 legge il terzo oggetto read utenti gt ciao legge il quarto oggetto read utenti gt 123 Scheme I O 3501 chiude il file close input file prova Si intende l importanza della funzione read per facilitare l inserimento di dati nei programmi in modo interattivo 309 3 Uscita dei dati L emissione dei dati ovvero la scrittura avviene in maniera simile alla lettura con la stessa distinzione tra le funzioni write char e write Anche in questo caso la prima scrive un ca rattere alla volta mentre la seconda emette la rappresentazione di un oggetto alla volta Tuttavia si aggiunte un altra funzione fondamentale output Questa funzione viene usata preferibil mente per mostrare dei messaggi senza codici di escape soprattutto per non lasciare le virgolette di delimitazione delle stringhe Tabella 309 3 Elenco di alcune funzioni per la gestione dei dati in ingresso Funzione Des
334. simbolo come commento allo scopo di poter realizzare facilmente degli script iniziando con usr bin bc ma si tratta di un estensione che non fa parte dello standard POSIX Le istruzioni del linguaggio BC terminano normalmente alla fine della riga ma possibile usare anche il punto e virgola se si preferisce oppure se si vogliono indicare pi istruzioni assieme sulla stessa riga La continuazione di un istruzione in una riga successiva si ottiene mettendo una barra obliqua inversa alla fine esattamente prima del codice di interruzione di riga istruzione P istruzione continuazione _istruzione Si possono definire dei raggruppamenti di istruzioni racchiudendoli tra parentesi graffe Anche in questo caso le istruzioni possono essere separate attraverso interruzioni di riga oppure con il punto e virgola istruzione istruzione istruzione istruzione istruzione istruzione Il linguaggio consente la dichiarazione di variabili e di funzioni che possono avere un nome composto esclusivamente da una lettera minuscola Alcune realizzazioni di BC consentono l uso di nomi pi articolati ma si tratta di estensioni non compatibili con le specifiche POSIX Il linguaggio BC non prevede una funzione principale come avviene invece in C Infatti si tratta di un linguaggio interpretato dove tutto viene eseguito appena possibile anche le
335. sione delle informazioni BC prevede poche funzioni predefinite interne ma non mette a disposizione una funzione per l emissione di stringhe Se necessario una costante stringa viene visualizzata semplicemente indicandola come un istruzione con un piccolo accorgimento Un espressione che si traduce in un numero porta alla visualizzazione del risultato seguito da un codice di interruzione di riga pertanto 4567 3456 seguito da nvio genera il risultato 15783552 che viene mostrato e il cursore viene quindi portato sulla riga successiva 4567 3456 15783992 Al contrario la visualizzazione di una stringa non fa avanzare alla riga successiva permettendo l aggiunta di altre stringhe e di un solo valore numerico finale Infatti ciao amore bello nvio Si traduce in ciao amore bello _ con il cursore alla destra del punto esclamativo Aggiungendo un numero la visualizzazione sulla riga termina Anni 35 Invio Anni 35 Il risultato delle espressioni viene visualizzato se questo non viene catturato da un assegnamento a una variabile Pertanto BC 3527 7 5 Invio 35 Invece a 7 5 Invio non visualizza alcunch Tuttavia possibile mostrare il risultato di un espressione il cui risultato viene assegnato a una variabile racchiudendola all interno di parentesi tonde Pertanto a 7 5 nvio 35 311 3 4 Espressioni Gli operatori che intervengono su valori numerici s
336. sioni regolari reali Date le diversit notevoli tra tutti i tipi di espressione regolare che si utilizzano in pratica con i programmi che ne fanno uso vale la pena di riepilogare le differenze fondamentali tra lo standard POSIX e le realt pi importanti In questo capitolo si raccolgono solo alcune tabelle di compara zione che mostrano l abbinamento tra diversi modelli di espressione compatibili Le descrizioni sono scarne tuttavia quello che si vede dovrebbe servire per collegare le cose permettendo di comprendere quali sono le estensioni di ogni realizzazione Tabella 31 1 Confronto tra gli operatori fondamentali BRE POSIX escape ancora ancora alternativa raggruppamento 0 elenco riferimento n Tabella 31 7 2 Confronto tra gli operatori interni alle espressioni tra parentesi quadre BRE POSIX sequenze xy intervalli XV elementi di col LJ lazione a caratteri equiva TE lenti enti classi di caratteri Tabella 31 3 Simboli speciali BRE POSIX alnum _ M alnum _ inizio di parola fine di parola inizio o fine pa rola interno di una parola blank blank digit A digit 3580 Confronto sintetico tra le espressioni regolari reali 3581 Tabella 31 4 Operatori di ripetizione BRE POSIX x il minimo di x il minimo di x il minimo di x x n x n il minimo di x n x n m il minimo d
337. so si intende lo zero in modo predefinito La deviazione zero corrisponde al flusso normale ogni altro numero positivo rappresenta una deviazione differente Quando termina l input da elaborare vengono rilasciati i vari blocchi accu mulati di output in ordine numerico crescente In alternativa si pu usare la macro undivert per richiedere espressamente il recupero di output deviato se questa viene utilizzata senza para metri si intende il recupero di tutte le deviazioni altrimenti si ottengono solo quelle elencate nei parametri Esiste un caso particolare di deviazione che serve a eliminare l output si ottiene utilizzando il numero di deviazione 1 Questa tecnica viene usata spesso anche come un modo per delimitare un area di commenti che non si vuole siano riprodotti nell output Come si pu intuire queste macro non restituiscono alcun valore Esempi 1 divert 1 2 Questo testo deviato 3 divert 4 Questo testo segue l andamento normale L esempio si traduce nell output seguente dove le righe sono state numerate per facilitarne l individuazione Come si pu notare al termine del file di input viene rilasciato l output deviato precedentemente 1 4 Questo testo segue l andamento normale 2 Questo testo deviato divert 1 Questo testo deviato divert Questo testo segue l andamento normale undivert 1 UD SWISH Questo esempio una variante di quello precedente con la dich
338. spondente Il fatto che la posizione delle tuple all interno della relazione non sia importante significa che non necessario poterle identificare le tuple si distinguono in base al loro contenuto In questo senso una relazione non pu contenere due tuple uguali la presenza di doppioni non avrebbe alcun significato A differenza delle tuple gli attributi devono essere identificati attraverso un nome Infatti il semplice contenuto delle tuple non sufficiente a stabilire di quale attributo si tratti Osservando la prima riga dell esempio Introduzione ai DBMS 3633 Pallino Pinco Via Biglie 1 02 22 22272272 diventa difficile distinguere quale sia il nome e quale il cognome Attribuendo agli attributi cio alle colonne un nome diventa indifferente la disposizione fisica di questi all interno delle tuple 322 2 1 Relazioni collegate Generalmente una relazione da sola non sufficiente a rappresentare tutti i dati riferiti a un problema o a un interesse della vita reale Quando una relazione contiene tante volte le stesse informazioni opportuno scinderla in due o pi relazioni pi piccole collegate in qualche mo do attraverso dei riferimenti Si osservi il caso delle relazioni rappresentate dalle tabelle che si vedono nella figura 322 2 Figura 322 2 Relazioni di un ipotetica gestione del magazzino Articoli Codice Descrizione Fornitorel Fornitore2 un i
339. stmaster opzioni postmaster il demone che si occupa di restare in ascolto in attesa di una richiesta di con nessione con un servente postgres il programma terminale o back end in questo contesto Quando riceve questo tipo di richiesta mette in connessione il cliente o front end con una nuova copia del servente postgres Per poter compiere il suo lavoro deve essere a conoscenza di alcune notizie essenziali tra cui in particolare la collocazione di postgres se questo non in uno dei percorsi della variabile PATH e la directory da cui si dirama il sistema di file che costituisce il sistema delle varie basi di dati Queste notizie possono essere predefinite nella configurazione usata al momento della compilazione dei sorgenti oppure possono essere indicate attraverso la riga di comando postmaster assieme ai processi da lui controllati il back end gestiscono una serie di file che compongono le varie basi di dati del sistema Trattandosi di un sistema di gestione dei dati molto complesso bene evitare di inviare il segnale SIGKILL 9 perch con questo si provoca la conclusione immediata del processo destinatario e di tutti i suoi discendenti senza permettere una conclusione corretta Al contrario gli altri segnali sono accettabili come per esempio un SIGTERM che viene utilizzato in modo predefinito quando si esegue un kill Alcune opzioni D directory_dei
340. strato all inizio di questa sezione 318 4 Direttive Ogni direttiva di un programma di elaborazione SED fa riferimento esplicitamente o impli citamente a un gruppo di righe identificate in qualche modo a cui vengono applicati dei comandi selezione_righe comando Il modello sintattico mostra l indicazione di un comando dopo la selezione delle righe questo comando pu essere un raggruppamento di comandi indicato all interno di parentesi graffe 318 4 1 Selezione delle righe La selezione delle righe per una direttiva SED il primo elemento importante per queste La mancanza dell indicazione di questa selezione rappresenta implicitamente la selezione di tutte le righe E importante osservare che le righe possono essere indicate anche attraverso la corrispondenza con un espressione regolare che comunque non deve essere confusa con i comandi che a loro volta possono avere a che fare con altre espressioni regolari Inoltre necessario ricordare che SED numera le righe a partire dalla prima del primo file continuando fino alla fine dell ultimo file senza interrompere la numerazione e in Un numero puro e semplice indica precisamente la riga n esima Un dollaro rappresenta l ultima riga dell ultimo file e espressione_regolare_elementare Un espressione regolare elementare BRE racchiusa tra due barre oblique normali serve a selezionare tutte le ri
341. suo ripristino Si tratta di archiviare e poi eventualmente ripristinare tutto il contenuto della directory che la contiene Per esempio tar czvf base tar gz postgres base archivia nel file pase tar gz tutte le basi di dati che si articolano a partire da postgres base Come esempio ulteriore tar czvf pubblico tar gz postgres base pubblico archivia nel file pubblico tar gz solo la base di dati pubblico che si trova esattamente nella directory postgres base pubblico Il recupero non nulla di speciale tranne per il fatto che si deve recuperare una base dati per intero ovvero ci che di solito si articola in una sottodirectory di postgres base Se di dovessero perdere informazioni sui permessi occorre ricordare che i file devono appartenere all utente postgres ovvero colui che rappresenta l amministratore del DBMS Per poter spostare una base di dati nel file system occorre ricordare che l informazione sulla sua collocazione contenuta nel catalogo pg_database per cui su questo che occorre inter venire per informare PostgreSQL della nuova posizione che gli si vuole dare Eventualmente c sempre la possibilit di eliminare la base di dati con il comando dropdb ricreandola nel la nuova posizione sostituendo poi tutti i file con quella vecchia In pratica all interno dei file che compongono una base di dati non c l informazione della loro collocaz
342. ta a piacimento a seconda dei punti di vista Di conseguenza la configurazione delle variabili LC_ o eventualmente di LANG deve av venire per l ambiente riferito al funzionamento di postmaster per cui occorre preparare uno script apposito bin sh LANG it_IT ISO 8859 1 LC_CTYPE it_IT ISO 8859 1 LC_COLLATE it_IT ISO 8859 1 LC_MONETARY it_IT ISO 8859 1 export LANG export LC_CTYPE LC_COLLATE LC_MONETARY usr bin postmaster i S D var lib pgsql Lo script che si vede sopra serve a definire la variabile di ambiente LANG a esportarla e ad avviare postmaster Questo script deve essere avviato dalla procedura di inizializzazione del sistema all interno della quale sar utilizzato presumibilmente su in modo da attribui re l identit dell utente amministratore di PostgreSQL Se si usa un sistema di script per l av vio o la conclusione dei servizi cosa che di solito si colloca nella directory etc init d o etc rc d init d potrebbe essere necessario intervenire su quello che si occupa di avviare postmaster bin sh case 1 in start echo n Avvio del servizio PostgreSQL su l postgres c usr bin postmaster i S D var lib pgsql echo EF stop echo n Disattivazione del servizio PostgreSQL killall postmaster echo ri echo Utilizzo postgresql start stop exit 1 esac Quello che si vede sopra lo sch
343. tabella e UPDATE rappresenta l operazione di aggiornamento del valore di un oggetto della risorsa per esempio la modifica del contenuto di una riga di una tabella DELETE rappresenta l eliminazione di un oggetto dalla risorsa come la cancellazione di una riga da una tabella e ALL PRIVILEGES rappresenta simultaneamente tutti i privilegi possibili riferiti a un oggetto 323 9 3 Concedere i privilegi I privilegi su una tabella o su un altra risorsa vengono concessi attraverso l istruzione GRANT GRANT privilegi ON risorsa N TO utenti WITH GRANT OPTION Nella maggior parte dei casi le risorse da controllare coincidono con una tabella L esempio seguente permette all utente Pippo di leggere il contenuto della tabella Movimenti GRANT SELECT ON Movimenti TO Pippo L esempio seguente concede tutti i privilegi sulla tabella Movimenti agli utenti Pippo e Arturo GRANT ALL PRIVILEGES ON Movimenti TO Pippo Arturo L opzione WITH GRANT OPTION permette agli utenti presi in considerazione di concedere a loro volta tali privilegi ad altri utenti L esempio seguente concede all utente Pippo di accedere in lettura al contenuto della tabella Movimenti e gli permette di concedere lo stesso privilegio ad altri GRANT SELECT ON Movimenti TO Pippo WITH GRANT OPTION 323 9 4 Revocare i privilegi I privilegi su una tabella o
344. tale stringa non pu essere interpre tato come il nome di una macro inoltre nemmeno i commenti vengono presi in considerazione M4 introduzione 3621 come tali La differenza fondamentale rispetto alle macro normali sta nel fatto che l espansione avviene una volta sola Quando si usano le stringhe delimitate tra le opzioni di una macro normale necessario tenere presente che queste vengono trattate la prima volta nel modo appena descritto allo scopo di fornire i parametri effettivi alla macro ma dopo l espansione della macro avviene un ulteriore elaborazione del risultato In generale sarebbe conveniente e opportuno indicare i parametri di una macro sempre utilizzando le stringhe delimitate a meno di voler indicare esplicitamente altre macro Ci facilita la lettura umana di un linguaggio di programmazione gi troppo complicato In ogni caso non si deve dimenticare il ruolo degli spazi finali che vengono sempre inclusi nei parametri Per esempio la macro miamacro mostrata sotto miamacro a biy ce d ha sempre come primo parametro la lettera a seguita da uno spazio a nulla serve in questo caso l uso degli apici o meglio sarebbe stato pi opportuno usarli nel modo seguente miamacro a Bhp ce d il caso di precisare che le sequenze di caratteri numerici sono comunque delle stringhe per M4 per cui miamacro 123 perfettamente uguale a miama
345. te sia pronta Per esempio volendo crea re la base di dati mia a partire da home postgresql sapendo che poi in pratica la sot todirectory mia viene collocata su home postgresql base occorre predisporre tutto questo mkdir home postgresql mkdir home postgresql base chown R postgres home postgresql La preparazione delle directory pu essere fatta con l aiuto di initlocation ma questo comando non fa niente di particolare in pi Per completare l esempio viene mostrato il co mando con cui si crea la base di dati mia utilizzando come riferimento la directory home postgresql postgres createdb D home postgresql mia Per concludere se si osserva il catalogo pg_database si noter che il percorso indicato della base di dati appena creata home postgresqgl mia mentre invece la directory vera e propria home postgresql base mia 324 8 4 Copia e spostamento di una base di dati in modo indipendente dalla piattaforma Dopo aver visto in che modo possibile copiare e archiviare una base di dati rimanendo sulla stessa piattaforma ma soprattutto rimanendo nell ambito della stessa versione di PostgreSQL necessario vedere in che modo si pu risolvere il problema quando la piattaforma cambia o quando cambia la versione di PostgreSQL Ricapitolando quindi i problemi sono due la piattaforma e la versione di PostgreSQL In linea di princ
346. terazione In pratica in quel caso non funzionano i cicli iterativi e gli altri comandi correlati PostgreSQL accesso attraverso WWW SQL 3717 327 3 1 Espressioni Si distinguono due tipi di espressioni che si possono valutare all interno delle istruzioni di WWW SQL quelle che si applicano ai valori numerici e quelle che si applicano alle stringhe Le tabelle 327 1 e 327 2 elencano gli operatori che possono essere utilizzati a questo proposi to Si osservi in particolare l operatore che permette di fare un confronto tra una stringa e un espressione regolare Tabella 32 1 Elenco degli operatori utilizzabili con operandi numerici Operatore e operandi Descrizione op Non ha alcun effetto op Inverte il segno dell operando opl op2 Somma i due operandi opl op2 Sottrae dal primo il secondo operando opl op2 Moltiplica i due operandi opl op2 Divide il primo operando per il secondo opl op2 Modulo il resto della divisione tra il primo e il secondo operando opl op2 Eleva il primo operando alla potenza del secondo opl op2 Vero se gli operandi sono uguali opl op2 Vero se gli operandi sono uguali sinonimo di opl op2 Vero se gli operandi sono differenti opl gt op2 Vero se il primo operando maggiore del secondo opl lt op2 Vero se il primo operando minore del secondo opl gt op2 Vero se il primo operando maggiore o uguale al secondo opl lt
347. ti mio_db nel nodo locale utilizzando il meccanismo del socket di dominio Unix psql d mio_db Esattamente come nell esempio precedente con l uso dell opzione che serve a evitare ambiguit sul fatto che mio_db sia il nome della base di dati psql u d mio_db Come nell esempio precedente ma fa in modo che psql chieda all utente il nominativo e la parola d ordine da usare per collegarsi E necessario usare questa opzione quando il servizio a cui ci si connette richiede un autenticazione basata sull uso di parole d ordine psql u h dinkel brot dg d mio_db Come nell esempio precedente ma questa volta l accesso viene fatto a una base di dati con lo stesso nome presso il nodo dinkel brot dg psql f istruzioni sql d mio_db Cerca di connettersi con la base di dati mio db nel nodo locale utilizzando il mec canismo del socket di dominio Unix quindi esegue le istruzioni contenute nel file istruzioni sql ISe si utilizza un autenticazione basata sul file pg_hba conf l autenticazione di tipo trust consente questo cambiamento di identificazione altrimenti il tipo ident lo impedisce La configurazione normale prevede che il no do locale 127 0 0 1 possa accedere con un autenticazione di tipo trust cosa che permette di cambiare il nome dell utente in questo comando 3684 PostgreSQL struttura e preparazione 324 6 2 Variabile P
348. ti assieme alle informazioni sugli utenti il catalogo pg_shadow quello seguente postgres psql e templatel lt basi dati dump La situazione tipica in cui necessario utilizzare pg_dumpall per scaricare tutto il sistema del le basi di dati quella del momento in cui ci si accinge ad aggiornare la versione di PostgreSQL In breve in quella occasione si devono eseguire i passaggi seguenti 1 con la versione vecchia di PostgreSQL si deve utilizzare pg_dumpall in modo da scaricare tutto il sistema delle basi di dati in un solo file di testo 2 si aggiorna PostgreSQL 3 si elimina il contenuto della directory postgres ovvero quella che altrimenti viene definita PGDATA prima conviene forse fare una copia di sicurezza 4 si ricrea il sistema delle basi di dati vuoto attraverso initdb 5 si ricaricano le basi di dati precedenti assieme alle informazioni sugli utenti attraverso psql utilizzando il file generato in precedenza attraverso pg_dumpall Quello che manca di solito si tratta del file postgres pg_hda conf per la configurazione dei sistemi di accesso e autenticazione deve essere ripristinato manualmente PostgreSQL struttura e preparazione 324 9 Riferimenti 3691 e PostgreSQL lt http www postgresql org gt e Bruce Momjian PostgreSQL introduction and concepts lt http www postgresql org docsfawbook html gt e Al Dev Alavoor Vasudevan
349. tica libera 2003 01 01 Copyright 2000 2003 Daniele Giacomini daniele swlibero org Capitoto 308 Scheme liste e vettori Scheme dispone di due strutture di dati particolari liste e vettori Le liste sono una sequenza di elementi a cui si accede con una certa difficolt senza la possibilit di utilizzare un indice mentre i vettori sono l equivalente degli array degli altri linguaggi 308 1 Liste e coppie La lista la struttura di dati fondamentale di Scheme In questo linguaggio le stesse istruzioni le chiamate delle funzioni sono espresse in forma di lista elemento La lista un elenco di elementi ordinati Gli elementi di una lista possono essere oggetti di qualunque tipo comprese altre liste Ci sono molte situazioni in cui i parametri di una funzione di Scheme sono delle liste per esempio la dichiarazione di una funzione attraverso define define corpo nome_funzione elenco_parametri_formali Come si vede il primo parametro della funzione define una lista in cui il primo elemento il nome della funzione che si crea mentre gli elementi successivi sono la descrizione dei parametri formali Le liste vuote sono rappresentate da una coppia di parentesi aperta e chiusa rappresentando degli oggetti speciali nella filosofia di Scheme Tabella 308 1 Elenco di alcune funzioni specifiche per la gestione delle stringhe Funzione
350. tilizzano le stringhe ae oe ue e ss in sostituzione delle lettere che invece avrebbero dovuto essere utilizzate queste stringhe vanno considerate come la rappresentazione di tali lettere costituendo cos un elemento di collazione unico Per esempio in tedesco la parola schal viene prima di sch len anche se la seconda fosse scritta come schaelen Ai fini della definizione di un espressione regolare questo fatto si traduce nella possibilit di fare riferimento a degli elementi di collazione attraverso la stringa corrispondente nel momen to in cui non possibile o non conviene usare il carattere che lo rappresenta simbolicamente in base a una codifica determinata Tuttavia il testo su cui si esegue la ricerca attraverso un espressione regolare viene interpretato a livello di carattere per cui non possibile iden tificare un elemento di collazione in una sottostringa composta da pi caratteri In pratica un espressione regolare non riuscirebbe a riconoscere la lettera i nella parola schaelen Alcuni elementi di collazione possono essere classificati come equivalenti Per esempio nella lingua italiana le lettere e con o senza accento rappresentano questo tipo di equivalenza Gli elementi di collazione equivalenti costituiscono una classe di equivalenza Infine i caratteri e non pi gli elementi di collazione possono essere classificati in base a diversi altri tipi di sott
351. trebbe essere un altra macro se fosse questo il caso la macro verrebbe espansa a sua volta Per evitare che accada una cosa del genere si possono usare gli apici in uno dei due modi seguenti miamacro_x 1 cro_z miamacro_x 1 cro_z Il problema pu essere visto anche in modo opposto se l espansione di una macro quando questa attaccata a un altra pu impedire il riconoscimento della seconda L esempio seguente mostra 3622 M4 introduzione infatti che la seconda macro miamacro_y non pu essere riconosciuta a causa dell espansione della prima miamacro_x 1l miamacro_y Una considerazione finale va fatta sulle macro che non restituiscono alcunch ovvero che si traducono semplicemente nella stringa nulla Spesso si tratta di macro interne che svolgono in realt altri compiti come potrebbe fare una funzione void di un linguaggio di programmazione normale In questo senso per una macro che non restituisce alcun valore viene anche detto che restituisce void che in questo contesto esattamente la stringa nulla 321 2 2 Definizione di una macro define nome_macro espansione Come si pu osservare dalla sintassi mostrata la creazione di una macro avviene attraverso una macro interna define per la quale deve essere fornito un parametro obbligatorio corrispon dente al nome della macro da creare a cui si pu aggiungere il valore in cui questa si deve espandere Se non vi
352. tualmente per inserire un apice singolo in una stringa delimitata con apici singoli dovrebbe essere sufficiente il suo raddoppio In pratica per scrivere una stringa del tipo l albero dovrebbe essere possibile scrivere l albero 323 2 2 Valori numerici I tipi numerici si distinguono in esatti e approssimati intendendo con la prima definizione quelli di cui si conosce il numero massimo di cifre numeriche intere e decimali mentre con la seconda si fa riferimento ai tipi a virgola mobile In ogni caso le dimensioni massime o la precisione massima che possono avere tali valori dipende dal sistema in cui vengono utilizzati NUMERIC NUMERIC precisione scala Il tipo NUMERIC permette di definire un valore numerico composto da un massimo di tante cifre numeriche quante indicate dalla precisione cio il primo argomento tra parentesi Se viene spe cificata anche la scala si intende riservare quella parte di cifre per quanto appare dopo la virgola Per esempio con NUMERIC 5 2 si possono rappresentare valori da 999 99 a 999 99 Se non viene specificata la scala si intende che si tratti solo di valori interi se non viene speci ficata nemmeno la precisione viene usata la definizione predefinita per questo tipo di dati che dipende dalle caratteristiche del DBMS DECIMAL DECIMAL precisione scala DEC DEC precisione IG scala 3644 Introdu
353. tupd passwd valuntil ac l3 l il 1 5 alli l postgres 100 t lt HE lt Sat Jan 31 nobody 99 lE lt tizio 1001 t lt E t 324 8 1 3 Catalogo pg_database Il catalogo pg_database una tabella che contiene le informazioni sulle basi di dati esistenti La figura 324 3 mostra un esempio di come potrebbe essere composta La consultazione della tabella si ottiene con il comando SQL templatel gt SELECT FROM pg_database Figura 324 3 Esempio di un catalogo pg_database datname datdba encoding datpath isa i 3 lt 5 558il 833 55445 5558 5 templatell 100 O templatel pubblico 100 O pubblico prova 100 0 home postgres prova proval 100 Olproval prova2 1001 O prova2 La prima colonna rappresenta il nome della base di dati la seconda riporta il numero UID del l utente che rappresenta il suo DBA cio colui che l ha creata la terza rappresenta il percorso in cui si trova Per esempio si pu osservare che la base di dati prova2 stata creata dall utente 1001 che da quanto riportato in pg_user tizio La colonna che rappresenta il percorso della base di dati pi complessa da interpretare In generale i nomi che appaiono senza l indicazione di un percorso si riferiscono alla directo ry postgres base corrispondendo in pratica alla directory che contiene i file
354. u utilizzare il vincolo PRIMARY KEY che pu essere utilizzato una sola volta Questo vincolo stabilisce anche che i dati contenuti oltre a non poter essere doppi non possono essere indefiniti CREATE TABLE nome_tabella nome_colonna tipo SS PRIMARY KEY nome_colonna L L esempio seguente crea la stessa tabella gi vista negli esempi precedenti specificando che la colonna del codice deve essere considerata la chiave primaria CREATE TABLE Indirizzi Codice integer Cognome char 40 NOT NULL Nome char 40 NOT NULL Indirizzo varchar 60 DEFAULT sconosciuto Telefono varchar 40 NOT NULL PRIMARY KEY Codice 323 4 4 Vincoli esterni alla tabella I vincoli esterni alla tabella riguardano principalmente la connessione con altre tabelle e la neces sit che i riferimenti a queste siano validi La definizione formale di questa connessione molto complessa e qui non viene descritta Si tratta in ogni caso dell opzione FOREIGN KEY seguita da REFERENCES Vale la pena per di considerare 1 meccanismi che sono coinvolti Infatti nel momento in cui si inserisce un valore il sistema pu impedire l operazione perch non valida in base all assenza di quel valore in un altra tabella esterna specificata Il problema nasce per nel momento in cui nella tabella esterna viene eliminata o modificata una riga che era oggetto di un riferiment
355. uente da un interpretazione diversa da quella letterale A Ancora dell inizio di una stringa Corrisponde a un carattere qualunque Ancora della fine di una stringa Indica due possibilit alternative alla sua sinistra e alla sua destra Definiscono un raggruppamento Definiscono un espressione tra parentesi quadre xy Un elenco di caratteri alternativi x y Un intervallo di caratteri alternativi A I caratteri che non appartengono all insieme x Nessuna o pi volte x Equivalente a x 0 x Nessuna o al massimo una volta x Equivalente a x 0 1 x Una o pi volte x Equivalente a x 1 x n Esattamente n volte x x n Almeno n volte x x n m Danam volte x In generale improbabile che siano disponibili i simboli di collazione e le classi di equivalenza come definito dallo standard POSIX per le espressioni tra parentesi quadre Nel caso particolare della versione GNU di AWK si possono usare le classi di caratteri nella forma nome Anche a causa di queste carenze ogni realizzazione di AWK utilizza le proprie estensioni partico lari che di solito sono rappresentate da sequenze di escape particolari La tabella 319 4 riepiloga le estensioni GNU che riguardano quindi gawk 8 Le espressioni regolari GNU prevedono normalmente la sequenza di escape b come riferimento alla stringa nulla all inizio o alla fine di una parola Tuttavia dal momento che con AW
356. un altra risorsa vengono revocati attraverso l istruzione REVOKE REVOKE privilegi ON risorsa IE sal FROM utenti L esempio seguente toglie all utente Pippo il permesso di accedere in lettura al contenuto della tabella Movimenti REVOKE SELECT ON Movimenti FROM Pippo L esempio seguente toglie tutti i privilegi sulla tabella Movimenti agli utenti Pippo e Arturo REVOKE ALL PRIVILEGES ON Movimenti FROM Pippo Arturo 3664 Introduzione a SQL 323 10 Controllo delle transazioni Una transazione SQL una sequenza di istruzioni che rappresenta un corpo unico dal punto di vista della memorizzazione effettiva dei dati In altre parole secondo l SQL la registrazione delle modifiche apportate alla base di dati avviene in modo asincrono raggruppando assieme l effetto di gruppi di istruzioni determinati Una transazione inizia nel momento in cui l interprete SQL incontra delle istruzioni determi nate terminando con l istruzione COMMIT oppure ROLLBACK nel primo caso si conferma la transazione che viene memorizzata regolarmente mentre nel secondo si richiede di annullare le modifiche apportate dalla transazione COMMIT WORK ROLLBACK WORK Stando cos le cose si intende la necessit di utilizzare regolarmente l istruzione COMMIT per memorizzare i dati quando non esiste pi la necessit di annullare le modifich
357. un servente DBMS lt SQL CONNECT host utente parola_d ordine gt 3722 PostgreSQL accesso attraverso WWW SQL L istruzione lt SQL CONNECT gt permette di iniziare una connessione con un DBMS Dipende dal DBMS stesso se possibile accedere senza alcun sistema di autenticazione In generale se non si indica il nodo a cui accedere si intende localhost inoltre se non si indica l utente si fa riferimento al numero UID con il quale funziona il programma servente del servizio HTTP che a sua volta avvia il programma CGI Se si utilizza una distribuzione GNU Linux Debian occorre considerare che il servente HTTP funziona con i privilegi dell utente www data e che si tratta di un nome impossibile per PostgreSQL In questo caso occorre indicare dettagliatamente tutti gli argomenti con l eccezione della parola d ordine che pu essere omessa se PostgreSQL stato configurato in modo da non richiederla L esempio che segue richiede di connettersi al servente DBMS PostgreSQL che opera nello stesso elaboratore locale utilizzando l identit dell utente nobody e senza specificare alcuna parola d ordine lt SQL CONNECT localhost nobody gt e Selezione di una base di dati specifica lt SQL DATABASE nome_base_di_dati gt L istruzione lt SOL DATABASE gt permette di aprire una base di dati specifica per la precisione utilizzando PostgreSQL l acc
358. universale UTC Per esempio 22 05 10 1 00 rappresenta le 22 05 e 10 secondi del Pora locale italiana durante l inverno mentre il tempo universale corrispondente sarebbe invece 21 05 10 0 00 Quanto mostrato fino a questo punto rappresenta un valore che indica un momento preciso nel tempo una data o un orario o entrambe le cose Per rappresentare una durata si parla di inter valli Per SQL si possono gestire gli intervalli a due livelli di precisione anni e mesi oppure giorni ore minuti secondi ed eventualmente anche le frazioni di secondo L intervallo si indica con la parola chiave INTERVAL seguita eventualmente dalla precisione con qui questo deve essere rappresentato INTERVAL unit _di_misura_data_orario To unit _di_misura_data_orario In pratica si pu indicare che si tratta di un intervallo senza specificare altro oppure si possono definire una o due unit di misura che limitano la precisione di questo pur restando nei limiti a cui si gi accennato Tanto per fare un esempio concreto volendo definire un intervallo che possa esprimere solo ore e minuti si potrebbe dichiarare con INTERVAL HOUR TO MINUTE La tabella 323 1 elenca le parole chiave che rappresentano queste unit di misura Tabella 323 1 Elenco delle parole chiave che esprimono unit di misura data orario Parola chiave Significato YEAR Anni MONTH Mesi DAY Giorni HOUR Ore MINUTE Minuti SECOND Secondi
359. unzione non viene usato nella chiamata per un assegnamento que sto viene visualizzato anche se ci non fosse desiderabile Per evitare questo inconveniente possibile assegnare a una variabile fittizia il valore restituito dalla funzione Anche se possibile fornire un array come parametro in una chiamata di funzione l istruzione return non pu restituire un array La chiamata di una funzione avviene nel modo seguente anche in questo caso x rappresenta il nome della funzione chiamata x parametro parametro wa I parametri possono essere variabili oppure valori costanti Nel primo caso se la funziona cambia il contenuto delle variabili corrispondenti tali modifiche non si riperquotono nelle variabili usate nella chiamata 3526 BC Le funzioni possono anche non avere parametri in quei casi si indicano le parentesi tonde senza alcun contenuto sia nella dichiarazione sia nella chiamata L esempio seguente molto semplice mostra la dichiarazione di una funzione che esegue la moltiplicazione define m x y auto z z x y return z Se questa funzione venisse salvata nel file moltiplica si potrebbe usare BC nel modo seguente bc moltiplical nvio m 7 2 Inmio 14 Ctrl d La parola chiave return pu essere usata senza l indicazione del valore da restituire e quindi senza le parentesi tonde In tal caso viene restituito il valore zero 311 3 3 Emis
360. uzione a SQL 3653 Per esempio l inserimento di una riga nella tabella Indirizzi gi mostrata in precedenza potrebbe avvenire nel modo seguente INSERT INTO Indirizzi VALUES 01 Pallino Pinco Via Biglie 1 0222 222222 Se i valori inseriti sono meno del numero delle colonne della tabella i valori mancanti in coda ottengono quanto stabilito come valore predefinito o NULL in sua mancanza sempre che ci sia concesso dai vincoli della tabella L inserimento dei dati pu avvenire in modo pi chiaro e sicuro elencando prima i nomi delle colonne in modo da evitare di dipendere dalla sequenza delle colonne memorizzata nella tabella La sintassi seguente mostra il modo di ottenere questo INSERT INTO nome_ tabella colonna_1 colonna N 1 VALUES espressione_ L espressione _N Y L esempio gi visto potrebbe essere tradotto nel modo seguente pi prolisso ma anche pi chiaro INSERT INTO Indirizzi Codice Cognome Nome Indirizzo Telefono VALUES 01 Pallino Pinco Via Biglie 1 0222 222222 Questo modo esplicito di fare riferimento alle colonne garantisce anche che eventuali modifiche di lieve entit nella struttura della tabella non debbano necessariamente riflettersi nei programmi L esempio seguente mostra l inserimento di alcuni degli elementi della riga lasciando che gli altri ottengano l assegnament
361. z vector set vettore z scambio visualizza define visualizza do i 0 i 1 gt i n elementi display vector ref vettore i display newline permuta lt inizio gt lt fine gt define permuta a z define k 0 Se il segmento di array contiene almeno du lementi si procede if gt z a 1 Inizia un ciclo di scambi tra l ultimo elemento e uno degli altri contenuti nel segmento di array do k z k 1 lt k a Scambia i valori inverti elementi k z Esegue una chiamata ricorsiva per permutare un segmento pi piccolo dell array permuta a z 1 Scambia i valori inverti elementi k z Altrimenti visualizza l array e utilizza una variabile dichiarata globalmente visualizza Inizio del programma display Inserire la quantit di elementi display DIM display al massimo set n elementi read newline if gt n elementi DIM set n elementi DIM display Inserire i valori del vettore newline do i 0 i 1 Scheme esempi di programmazione 3519 gt i n elementi display elemento display i display vector set vettore i read newline Il vettore non viene trasferito come argomento della funzione ma risulta accessibil sternament permuta 0 n elementi 1 Appunti di informatica libera 2003 01 01 Copyright
362. za LL 3533 312 15 Radice quadrata iii 3534 312 16 Fattornale seses iaia aaa pr 3534 312 1 7 Massimo comune divisore LL 3535 312 15 N m to pimo siii 3535 312 2 Scansione di Afray siii Ae eee 3536 312 2 1 Ricerca sequenziale LL 3536 312 2 2 Ricerca binaria iii 3537 312 3 Algoritmi tradizionali LL 3537 312 3 1 Bubblesoft nata 3537 312 3 2 Tore di HINON onore oaiae EEEE AE EE E EEEE EE a E aE h 3538 To OWC KSO ia a 3539 312 34 Petm tazi ni sicari E EE aAA ERA R ERS 3540 3531 3532 BC esempi di programmazione 312 1 Problemi elementari di programmazione In questa sezione vengono mostrati alcuni algoritmi elementari portati in BC Per la spiegazione degli algoritmi se non sono gi conosciuti occorre leggere quanto riportato nel capitolo 282 312 1 1 Somma tra due numeri positivi Il problema della somma tra due numeri positivi attraverso l incremento unitario stato descritto nella sezione 282 2 1 k somma b Somma esclusivamente valori positivi define s x y auto z i Z X for i l i lt y i z z 1 return z Per calcolare la somma si utilizzi la funzione s x y In alternativa si pu tradurre il ciclo for in un ciclo while define s x y auto z i z X i 1 while i lt y z z 1 i i 1 312 1 2 Moltiplicazione di due numeri positivi attraverso la somma Il problema della m
363. zione 321 2 1 Macro M4 un linguaggio di programmazione il cui scopo principale quello di gestire opportunamente la sostituzione di testo in base a delle macro Tuttavia alcune macro potrebbero servire a ottenere qualche funzione in pi rispetto alla semplice sostituzione di testo In generale per uniformit si parla sempre di macro anche quando il termine potrebbe essere improprio per la precisione si distingue tra macro interne builtin che pur non essendo dichiarate fanno parte di M4 e macro normali dichiarate esplicitamente Una macro pu essere invocata attraverso due modi possibili nome nome parametro_1 parametro_2 parametro_N Nel primo caso si tratta di una macro senza parametri ovvero senza argomenti nel secondo si tratta di una macro con l indicazione di parametri importante osservare che quando si utilizzano i parametri la parentesi aperta iniziale deve seguire immediatamente il nome della macro senza spazi aggiuntivi inoltre se una macro non ha parametri non si possono utilizzare le parentesi aperta e chiusa senza l indicazione di parametri perch questo sarebbe equivalente a fornire la stringa nulla come primo parametro La cosa pi importante da apprendere il modo in cui viene trattato il contenuto che appare tra parentesi che serve a descrivere i parametri di una macro infatti prima di espandere la macro viene espanso il contenuto che appare tra parentesi Un
364. zione come nell esempio seguente define x 20 x gt 20 define f y 2 x gt 40 define x 100 x gt 100 gt 200 Qualunque oggetto con un identificatore pu essere ridefinito Si osservi l esempio seguente in cui si imbrogliano le carte e si fa in modo che l identificatore corrisponda a una funzione che esegue la somma mentre prima valeva per una moltiplicazione define x y x y 3 5 gt 8 Si ricorda che per modificare il contenuto di una variabile allocata senza allocare un altra area di memoria si utilizza generalmente la funzione set 307 2 Definizione lambda Scheme tratta gli identificatori delle funzioni i loro nomi nello stesso modo di quelli delle variabili In altri termini le funzioni sono variabili che contengono un riferimento a un bloc co di codice possibile dichiarare una funzione attraverso la funzione Lambda che resti tuisce la funzione stessa In questo modo una funzione pu essere dichiarata anche attraverso l assegnamento di una variabile che poi diventa una funzione a tutti gli effetti Prima di vedere come si usa la dichiarazione di una funzione attraverso la funzione lambda bene ribadire che attraverso questo meccanismo possibile dichiarare una funzione in tutte quelle situazioni in cui possibile inizializzare o assegnare una variabile lambda elenco_parametri_formali corpo
365. zione a SQL Il tipo DECIMAL simile al tipo NUMERIC con la differenza che le caratteristiche della pre cisione e della scala rappresentano le esigenze minime mentre il sistema potr fornire una rappresentazione con precisione o scala maggiore INTEGER INT SMALLINT I tipi INTEGER e SMALLINT rappresentano tipi interi la cui dimensione dipende generalmente dalle caratteristiche del sistema operativo e dall hardware utilizzato L unico riferimento sicuro che il tipo SMALLINT permette di rappresentare interi con una precisione inferiore o uguale al tipo INTEGER FLOAT FLOAT precisione REAL DOUBLE PRECISION Il tipo FLOAT definisce un tipo numerico approssimato a virgola mobile con una precisio ne binaria pari o superiore di quella indicata tra parentesi se non viene indicata dipende dal sistema Il tipo REAL e il tipo DOUBLE PRECISION sono due tipi a virgola mobile con una precisione prestabilita Questa precisione dipende dal sistema ma in generale il secondo dei due tipi deve essere pi preciso dell altro 323 2 2 1 Costanti numeriche I valori numerici costanti vengono espressi attraverso la semplice indicazione del numero senza delimitatori La virgola di separazione della parte intera da quella decimale si esprime attraverso il punto 323 2 3 Valori Data orario e intervalli di tempo I valori
366. zioni vere e proprie dal momento che tutto viene svolto attraverso delle macro Tuttavia alcune macro interne permettono di gestire delle strutture di controllo Dal momento che il risultato dell espansione di una macro viene scandito successivamente alla ricerca di altre macro da espandere in qualche modo possibile anche la realizzazione di cicli ricorsivi Resta il fatto che questo sia probabilmente un ottimo modo per costruire macro molto difficili da leggere e da controllare 321 3 1 ifdef ifdef nome_macro stringa_se_esiste L stringa_se_non_esiste ifdef permette di verificare l esistenza di una macro Il nome di questa viene indicato come primo parametro mentre il secondo parametro serve a definire la stringa da restituire in caso la condizione di esistenza si avveri Se si indica il terzo parametro questo viene restituito se la condizione di esistenza fallisce Esempi ifdef CIAO Y define CIAO maramao Verifica l esistenza della macro CIAO se questa non risulta gi definita la crea 321 3 2 ifelse ifelse commento ifelse stringa_1 stringa_2 risultato_se_uguali IE risultato_se_diverse ifelse stringa_1 stringa_2 risultato_se_uguali risultato_altrimenti La macro interna ifelse serve generalmente per confrontare una o pi coppie di stringhe restituendo un risultato se il confronto valido o un altr

Download Pdf Manuals

image

Related Search

Related Contents

  Samsung CE292DN Manual de Usuario  Nikon D750 Experience - Douglas J. Klostermann Photography  低温反応装置  ASSMANN Electronic AK-440205-012-S power cable  Mercedes Benz V  TABLE DES MATIÈRES - Wauquiez Gladiateur  81343 bouncer IB web  VES-MATIC 20 / 20Plus New - DIESSE Diagnostica Senese  User Manual - Brainstorm Electronics  

Copyright © All rights reserved.
Failed to retrieve file