SHOW:
|
|
- or go back to the newest paste.
| 1 | --Vježba 9 – VIEWS, STORED PROCEDURE, TRIGGERS | |
| 2 | ||
| 3 | --NAPOMENA: Vježba se radi nad bazom podataka Pubs. | |
| 4 | --1. Kreirati proceduru za upis podataka u tabelu authors. Izvršiti proceduru, tj. dodati novog autora sa testnim podacima. | |
| 5 | USE pubs | |
| 6 | CREATE PROCEDURE dodaj_autora | |
| 7 | AS | |
| 8 | INSERT INTO authors | |
| 9 | VALUES ('133-53-9929','Smith','Mike','283 555-3353','Neverstreet','Newcity','HC',99966,'True')
| |
| 10 | EXEC dodaj_autora | |
| 11 | ||
| 12 | SELECT * | |
| 13 | FROM authors | |
| 14 | ||
| 15 | DROP PROCEDURE dodaj_autora | |
| 16 | ||
| 17 | --2. Kreirati proceduru za izmjenu podataka u tabeli authors. Izvršiti proceduru, tj. izmijeniti određene podatke prethodno dodanog autora. | |
| 18 | USE pubs | |
| 19 | CREATE PROCEDURE izmjeni_autora | |
| 20 | AS | |
| 21 | UPDATE authors | |
| 22 | SET au_fname='George', au_lname='Martin' | |
| 23 | WHERE au_id='133-53-9929' | |
| 24 | EXEC izmjeni_autora | |
| 25 | ||
| 26 | SELECT * | |
| 27 | FROM authors | |
| 28 | WHERE au_id='133-53-9929' | |
| 29 | ||
| 30 | DROP PROCEDURE izmjeni_autora | |
| 31 | ||
| 32 | --3. Kreirati proceduru za brisanje zapisa iz tabele authors. Izvršiti proceduru, tj. obrisati prethodno dodanog autora. | |
| 33 | USE pubs | |
| 34 | CREATE PROCEDURE brisi_autora | |
| 35 | AS | |
| 36 | DELETE FROM authors | |
| 37 | WHERE au_id='133-53-9929' | |
| 38 | ||
| 39 | EXEC brisi_autora | |
| 40 | ||
| 41 | SELECT * | |
| 42 | FROM authors | |
| 43 | WHERE au_id='133-53-9929' | |
| 44 | ||
| 45 | DROP PROCEDURE brisi_autora | |
| 46 | ||
| 47 | --4. Izmijeniti proceduru kreiranu u zadatku 1. U istoj proceduri, dodanog autora pridružiti kao koautora na dvije postojeće knjige. | |
| 48 | -- U proceduri koristiti dvije INSERT komande (Tabele: authors, titleauthor). Izvršiti proceduru, tj. dodati novog autora sa njegovim knjigama. | |
| 49 | USE pubs | |
| 50 | CREATE PROCEDURE dodaj_autora | |
| 51 | AS | |
| 52 | INSERT INTO authors | |
| 53 | VALUES ('133-53-9929','Smith','Mike','283 555-3353','Neverstreet','Newcity','HC',99966,'True')
| |
| 54 | INSERT INTO titleauthor | |
| 55 | VALUES('133-53-9929','PS3333',2,100)
| |
| 56 | EXEC dodaj_autora | |
| 57 | ||
| 58 | SELECT * | |
| 59 | FROM authors | |
| 60 | ||
| 61 | DROP PROCEDURE dodaj_autora | |
| 62 | ||
| 63 | --5. Kreirati pogled (view) sa sljedećim podacima: naziv izdavača, ime i prezime autora (odvojeno), naziv knjige, zarada od prodaje knjige/a. | |
| 64 | USE pubs | |
| 65 | CREATE VIEW autori | |
| 66 | AS | |
| 67 | SELECT p.pub_name AS 'Naziv izdavaca',a.au_fname'Ime autora',a.au_lname'Prezime autora',t.title'Naziv knjige',s.qty*t.price AS 'Zarada od prodaje knjige' | |
| 68 | FROM publishers AS p JOIN titles AS t | |
| 69 | ON p.pub_id=t.pub_id JOIN titleauthor AS ta | |
| 70 | ON t.title_id=ta.title_id JOIN authors AS a | |
| 71 | ON ta.au_id=a.au_id JOIN sales AS S | |
| 72 | ON S.title_id=t.title_id | |
| 73 | ||
| 74 | SELECT * | |
| 75 | FROM autori | |
| 76 | ||
| 77 | DROP VIEW autori | |
| 78 | ||
| 79 | --6. Kreirati proceduru koja prima sljedeće parametre: ime i prezime autora, naziv izdavača, naziv knjige. U zavisnosti od proslijeđenog parametra procedura treba da vrati zaradu od prodaje knjige/a. | |
| 80 | -- Koristiti view kreiran u zadatku 5. | |
| 81 | CREATE PROCEDURE zarada | |
| 82 | @imeautora nvarchar(20)='nema vrijednost', | |
| 83 | @prezimeautora nvarchar(40)='nema vrijednost', | |
| 84 | @nazivizdavaca nvarchar(40)='nema vrijednost', | |
| 85 | @nazivknjige nvarchar(80)='nema vrijednost' | |
| 86 | AS | |
| 87 | SELECT p.pub_name AS 'Naziv izdavaca',a.au_fname'Ime autora',a.au_lname'Prezime autora',t.title'Naziv knjige',s.qty*t.price AS 'Zarada od prodaje knjige' | |
| 88 | FROM publishers AS p JOIN titles AS t | |
| 89 | ON p.pub_id=t.pub_id JOIN titleauthor AS ta | |
| 90 | ON t.title_id=ta.title_id JOIN authors AS a | |
| 91 | ON ta.au_id=a.au_id JOIN sales AS S | |
| 92 | ON S.title_id=t.title_id | |
| 93 | WHERE a.au_fname LIKE @imeautora OR a.au_lname LIKE @prezimeautora OR p.pub_name LIKE @nazivizdavaca OR t.title LIKE @nazivknjige | |
| 94 | ||
| 95 | EXEC zarada @nazivknjige='The Gourmet Microwave' | |
| 96 | ||
| 97 | DROP PROCEDURE zarada | |
| 98 | ||
| 99 | --7. Kreirati trigger (INSTEAD OF) koji će spriječiti izvršavanje DELETE komande nad tabelom titleauthor. Ukoliko se pokuša obrisati zapis u tabeli titleauthor ispisati odgovarajuću poruku. | |
| 100 | -- Koristiti komandu PRINT za ispis poruke. | |
| 101 | CREATE TRIGGER nodelete | |
| 102 | ON titleauthor | |
| 103 | INSTEAD OF DELETE | |
| 104 | AS | |
| 105 | PRINT 'Zabranjeno brisanje podataka u tabeli author' | |
| 106 | ROLLBACK | |
| 107 | ||
| 108 | DELETE FROM titleauthor | |
| 109 | WHERE au_id='213-46-8915' | |
| 110 | ||
| 111 | DROP TRIGGER nodelete | |
| 112 | ||
| 113 | DELETE FROM titleauthor | |
| 114 | WHERE au_id='213-46-8915' | |
| 115 | ||
| 116 | --8. Kreirati proceduru koja briše autora dodanog u zadatku 4, zajedno sa svim njegovim knjigama. Izvršiti proceduru, tj. pokušati obrisati autora. | |
| 117 | -- Trigger kreiran u zadatku 7 treba da spriječi izvršavanje ove procedure. | |
| 118 | CREATE PROCEDURE brisiautora | |
| 119 | AS | |
| 120 | DELETE titleauthor | |
| 121 | FROM authors AS a JOIN titleauthor AS ta | |
| 122 | ON a.au_id=ta.au_id | |
| 123 | WHERE a.au_id='133-53-9929' | |
| 124 | DELETE authors | |
| 125 | FROM authors | |
| 126 | WHERE au_id='133-53-9929' | |
| 127 | ||
| 128 | EXEC brisiautora | |
| 129 | ||
| 130 | SELECT * | |
| 131 | FROM titles AS t JOIN titleauthor AS ta | |
| 132 | ON t.title_id=ta.title_id JOIN authors AS a | |
| 133 | ON a.au_id=ta.au_id | |
| 134 | WHERE a.au_id='133-53-9929' |