110 likes | 257 Vues
Operazione immissione persona. Vogliamo implementare il seguente progetto:. Inserisci Persona. Cerca Persona. Inserisci Persona. Immissione persona. Anno N. Nome Cognome. Controllo e Immissione. Errore. OK. Errore:. Successo:. Progetto di dettaglio. menu.html. Inserisci Persona.
E N D
Operazione immissione persona • Vogliamo implementare il seguente progetto: Inserisci Persona Cerca Persona Inserisci Persona Immissione persona Anno N. Nome Cognome Controllo e Immissione Errore OK Errore: .... Successo: ....
Progetto di dettaglio menu.html Inserisci Persona Cerca Persona Inserisci Persona immetti(IlNome, Immissione persona Anno N. Nome Cognome controllaDati(IlNome, Controllo e Immissione Errore OK Errore: .... Successo: .... warning(IlNome,... warning(IlNome,...
Progetto di dettaglio • Stato 0: menu iniziale • Stato 1 • Operazione: immetti • Parametri: IlNome, IlCognome, LAnnoNascita • Stato 2 • Operazione: controllaDati • Parametri: IlNome, IlCognome, LAnnoNascita • Stato 3 • Operazione: warning • Parametri: Messaggio errore • Parametri di giro: IlNome, IlCognome, LAnnoNascita
PER IMPLEMENTARE • Il menu iniziale: posso implementarlo come un file statico • Gli altri quattro stati: procedure che ricevono parametri: • Immissione persona: • Definisco lo schema • Definisco la schermata iniziale • Memorizzo la procedura di immissione • Memorizzo la procedura di verifica errori • Memorizzo la procedura di visualizzazione risultato
Definizione dello schema • Creo una directory ese1bdl • Copio nella directory tutti i files che trovo in ~ghelli/bdl01/ese1 • Mi connetto a lina, entro nella direcory, e mi connetto a sqlplus: sqlplus <username> • Da sqlplus carico il file create.sql: • @create • drop table Persone • ERROR at line 1: • ORA-00942: table or view does not exist • Table created. • Per provare il funzionamento, posso caricare insert.sql e query.sql • Sulla macchina locale lancio emacs/pine *.sql per provare ad aggiungere un attributo
Creazione dello stato di immissione • Modifico la forma ‘menu.html’ • Creo una directory sotto $HTML/bdl01/ese: • cd $HTML/bdl01/ese • mkdir <mionomeaccount> • Rendo menu.html visibile al web server (la directory $HTML corrisponde ad http://lina.cli.di.unipi:8000) • ln -s $HOME/ese1bdl/menu.html $HTML/bdl01/ese/<mionomeaccount>/menu.html • controllare: cat $HTML/bdl01/ese/<mionomeaccount>/menu.html • controllare: sia il link che il file devono essere leggibili da tutti: • Ls –l • Eseguite ‘rendileggibile’ • Chiedo al docente di fare ripartire il web server (link Ammin. Web Server in Procedure per l’amministrazione) • Esploro la forma creata: • http://lina.cli.di.unipi:8000/bdl01/ese/<mionomeaccount>/menu.html
Il Menu • Il tag: • <FORM METHOD = "GET" ACTION = "http://lina.cli.di.unipi.it:8000/prenota/owa/mioaccount.p_ese1.immetti"> • specifica che: • prenota/: è una directory protetta da password, per la quale è stato specificato al Web server di attivare un agente • owa/: è il nome dell’agente attivato • mioaccount.p_ese1.immetti è il nome della procedura attivata (schema.modulo.procedura) • Un tag: • <INPUT TYPE = "hidden" NAME = "IlCognome"> • specifica che alla procedura verrà passato un parametro “Cognome” inizializzato a null
Il sorgente di menu • Il tag: • <FORM METHOD = "GET" ACTION = "http://lina.cli.di.unipi.it:8000/prenota/owa/mioaccount.p_ese1.controllaDati") • specifica che: • mioaccount.p_ese1.controllaDati è il nome della procedura attivata (schema.modulo.procedura) • Un tag: • <INPUT TYPE = "text" NAME = "Cognome"> • specifica che alla procedura verrà passato un parametro “Cognome” inizializzato con il valore immesso nel tag
Creazione della procedura di controllo dati ed immissione • La procedura è nel file ese1.sql • Dopo avere eseguito @ese1 dovete anche caricare @grant per dare al’agente ‘owa’ (che gira con l’identità dell’utente prenota) il diritto di eseguire la vostra procedura: • grant execute • on p_ese1 • to prenota; • Provate a modificare la procedura • Dentro menu.html modificare ACTION da ...XXXuser... a ...<mioUtenteOracle>...
SQLPLUS: messaggi di errore • Non confondere gli errori nel package (interfaccia) con quelli nel package body • Comandi utili: • mostra errori: • show err : mostra gli errori del body • show err package p_pippo • (dove pippo non è il nome del file ma del package): mostra gli errori nel package • pausa ogni pagina: • set pagesize 25 • set pause on • lista le righe 80-100: • l 80 100 • Messaggi tipici: • @pippo • 43 • 44 • => avete scordato di scrivere "/"
Testare le procedure • Scrivete la url: http://lina...8000/prenota/owa/schema.package.proc?par1=val1&..&parn=valn • I messaggi di errore dell’agente prenota/owa si leggono in: • $LOG/prenota.err ($ORACLE_HOME/ows/log/prenota.err) (si può leggere solo da lina) • Attenzione: contiene tutti i messaggi di errore, anche relativi ad altri utenti • Errori più comuni: • prenota non ha il diritto di eseguire la procedura (il messaggio dice che -non esiste-) • il nome della procedura o quello dei parametri sono stati descritti male (oveflows integer datatype) • c'è qualche parametro in più o in meno • tipi sbagliati dei parametri (numeric or value error)