Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Stored Procedure (database) - backend, Dispense di Database Relazionali

Stored Procedure (database) - backend

Tipologia: Dispense

2022/2023

In vendita dal 13/09/2023

carla-boscolo
carla-boscolo 🇮🇹

4.5

(13)

520 documenti

1 / 17

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INSERIRE DENTRO VIVAIO
CLIENTE PRIVATO
INSERIRE UN DATO IN UNA RIGA
INSERT INTO cliente_privato (NAME, FAMILY_NAME)
VALUES ('Roberto', 'Penna');
CANCELLA DATI DALLA TABELLA
DELETE FROM cliente_privato;
IMPORTA DATI DA UN’ALTRA TABELLA
INSERT INTO cliente_privato(Name, Family_name)
SELECT nome, cognome
FROM cliente
WHERE tipo = 'privato';
CAMBIA L’INDIRIZZO DI GERARDO LOGGIA
UPDATE cliente_privato
SET Address ='Torino'
WHERE name ='Loggia' AND Family_name ='Gerardo';
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Anteprima parziale del testo

Scarica Stored Procedure (database) - backend e più Dispense in PDF di Database Relazionali solo su Docsity!

INSERIRE DENTRO VIVAIO

CLIENTE PRIVATO

INSERIRE UN DATO IN UNA RIGA

INSERT INTO cliente_privato (NAME, FAMILY_NAME) VALUES ('Roberto', 'Penna');

CANCELLA DATI DALLA TABELLA

DELETE FROM cliente_privato;

IMPORTA DATI DA UN’ALTRA TABELLA

INSERT INTO cliente_privato(Name, Family_name) SELECT nome, cognome FROM cliente WHERE tipo = 'privato';

CAMBIA L’INDIRIZZO DI GERARDO LOGGIA

UPDATE cliente_privato SET Address = 'Torino' WHERE name = 'Loggia' AND Family_name = 'Gerardo';

CAMBIARE NOME E COGNOME VISTO CHE

SONO INVERTITI

UPDATE cliente_privato SET name = 'Gerardo' , Family_name = 'Loggia' WHERE name = 'Loggia' AND Family_name = 'Gerardo';

CANCELLA RIGA CON INDIRIZZO

VALORIZZATO, MA PER FARE QUESTO TUTTI I

VALORI DEVONO ESSERE NULL

DELETE FROM cliente_privato WHERE Address IS NOT NULL

SUBQUERY

Vedere NumOre ed attività richieste dagli utenti

privati

si può fare anche così

SELECT d.cognome, d.nome, d.tipo FROM dipendente as d, svolge as s, attivita as a, prenotazione as p, utilizza as u WHERE d.id = s.idDipendente AND p.idAttivita = s.idAttivita AND p.id = u.idPrenot AND u.idPianta in (SELECT Id FROM pianta as p2 WHERE p2.stagioneFioritura = 'estate') AND a.nome = 'Piantumazione'

STORED PROCEDURE

query che deve essere rifatta più volte SELECT customerName, city, state, postalCode, country FROM customers ORDER BY customerName;

DELIMITER $$

CREATE PROCEDURE GetCustomers() BEGIN SELECT customerName, city, state, postalCode, country FROM customers ORDER BY customerName; END$$ DELIMITER ; vantaggi: ● anziche inviare statement lunghi, invoco una procedura sql che voglio eseguire (riduzione traffico di rete) ● i dati sono abbinati alle applicazioni, che li tratta. Creare ke procedure mi agevola nella creazione delle applicazioni (model view control)

● si aumenta la sicurezza nel db (user e passwor per accedderci). DBA può concedere determinate privilegi o accesso diretto ad alcune persone. script che mi agevoli inserimento di un cliente invocazione come rendere dinamica la procedura (altrimenti inserirebbe sempre la stessa cosa) ● i parametri si passano dove si invoca la funzione inserire anche i privati ● inserire prima i clienti ● in base al parametro p_tipo vale privato allora esegue un altro insert anche in cliente_privato

inserire dentro la tabella prenotazione una nuova riga per il cliente mario rossi, controlla che l’attività non sia già stata inserita e il cliente sia già stato inserito altrimenti si inserisce PROVA DELIMITER $$ CREATE PROCEDURE vivaio.InserisciPrenotazione( in c_nome varchar(20), in c_cognome varchar(20), in a_attivita varchar(20), in p_dataPrenot date, in p_dataInizio date, in p_dataFine date, in a_numOre int(5) ) MODIFIES SQL DATA BEGIN INSERT INTO prenotazione VALUES (p_dataPrenot, p_dataInizio, p_dataFine, p_numOre, p_idCliente, p_idAttivita) WHERE p_idCliente in (SELECT id FROM cliente WHERE cognome ; // if p_idCliente END$$ DELIMITER ; call.vivaio.InserisciPrenotazione(‘luca’, ‘rossi’, 'piantumazione', '2022-03-06', '2022-03-10' ,'2022-03-24', '12');

se non esiste varrà 0 o null STORED PROCEDURE https://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx con phpmyadmin https://medium.com/mobiosolutions/create-stored-procedures-in-php-myadmin-ccf02c323a e valori passati alla procedura invocare la procedura

INparametri

● il programma chiamante deve passare un argomento alla procedura

memorizzata.

● il parametro è protetto -> il suo valore originale rimane invariato al termine

della procedura memorizzata.

DELIMITER //

CREATE PROCEDURE GetOfficeByCountry(

IN countryName VARCHAR(255)

BEGIN

SELECT *

FROM offices

WHERE country = countryName;

END //

DELIMITER ;

CALL GetOfficeByCountry('USA'); CALL GetOfficeByCountry('France') CALL GetOfficeByCountry(); OUTparametri

● parametro può essere modificato all'interno della procedura memorizzata e il

suo nuovo valore viene restituito al programma chiamante.

● la stored procedure non può accedere al valore iniziale del OUT parametro

all'avvio.

DELIMITER $$

CREATE PROCEDURE GetOrderCountByStatus (

IN orderStatus VARCHAR(25),

OUT total INT

BEGIN

SELECT COUNT(orderNumber)

INTO total

FROM orders

WHERE status = orderStatus;

END$$

DELIMITER ;

CALL GetOrderCountByStatus('Shipped',@total); SELECT @total;

CALL GetOrderCountByStatus('in process',@total);

SELECT @total AS total_in_process;

INOUTparametri

● combinazione di IN e OUT parametri.

● il programma chiamante può passare l'argomento e la procedura

memorizzata può modificare il INOUT parametro e restituire il nuovo valore al

programma chiamante.

DELIMITER $$

CREATE PROCEDURE SetCounter(

INOUT counter INT,

IN inc INT

LOOP

[label]: LOOP

-- terminate the loop

IF condition THEN

LEAVE [label];

END IF;

END LOOP;

ESEMPIO

● La procedura memorizzata costruisce una stringa dai numeri pari, ad esempio

2, 4 e 6.

● loop_label Prima LOOPdell'istruzione da utilizzare con le istruzioni ITERATEe

LEAVE.

● Se il valore di x è maggiore di 10, il ciclo viene terminato a causa LEAVE

dell'istruzione.

● Se il valore di x è un numero dispari, ITERATE ignora tutto ciò che si trova al di

sotto e avvia una nuova iterazione del ciclo.

● Se il valore di x è un numero pari, il blocco ELSEnell'istruzione creerà la stringa

del risultato da numeri pari.

DROP PROCEDURE LoopDemo;

DELIMITER $$

CREATE PROCEDURE LoopDemo()

BEGIN

DECLARE x INT;

DECLARE str VARCHAR(255);

SET x = 1;

SET str = '';

loop_label: LOOP

IF x > 10 THEN

LEAVE loop_label;

END IF;

SET x = x + 1;

IF (x mod 2) THEN

ITERATE loop_label;

ELSE

SET str = CONCAT(str,x,',');

END IF;

END LOOP;

SELECT str;

END$$

DELIMITER ;

CALL LoopDemo();

Come creare una procedura

● clicco cartella procedures, creo una procedura ● clicco source

output : 24 OPPURE (sotto forma di funzione) come funziona il fattoriale fattoriale completo

NON VA

Fatta con la procedura non va query sql http://groups.di.unipi.it/~leoni/BDeSI/E2.Esercizi%20di%20SQL.pdf Creare una stored procedure phpmyadmin https://www.youtube.com/watch?v=dwVj_g3TpZ Lucid (modello er) https://lucid.app/lucidchart/00d439bd-ad6c-4d5f-9115-6e6c44afe209/edit?invitationId=inv_ 07b44d-8fd4-4aa1-aad2-e20ed5303f9d&page=0_0#