Advertisement
eramic

sql vjezba 9

Sep 10th, 2015
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 6.11 KB | None | 0 0
  1.    
  2.  
  3.     USE pubs
  4.      
  5.      
  6.     /*
  7.     Kreirati proceduru za upis podataka u tabelu authors.
  8.      Izvršiti proceduru, tj. dodati novog autora sa testnim podacima. */
  9.      
  10.      CREATE PROCEDURE usp_authors_insert
  11.      (
  12.             @au_ID VARCHAR(11),
  13.             @au_Iname VARCHAR(40),
  14.             @au_Fname VARCHAR(20),
  15.             @phone CHAR(12),
  16.             @adress VARCHAR(40) = NULL,
  17.             @city VARCHAR(20) = NULL,
  18.             @state CHAR(2) = NULL,
  19.             @zip CHAR(5) = NULL,
  20.             @contact bit
  21.      )
  22.      AS
  23.      BEGIN
  24.      INSERT INTO authors
  25.      VALUES (@au_ID, @au_Iname, @au_Fname, @phone, @adress, @city, @state, @zip, @contact)
  26.      END
  27.      
  28.      EXEC usp_authors_insert '123-12-1234', 'Blaho','Autor','123123',NULL,NULL,NULL,NULL,1
  29.      
  30.      SELECT * FROM authors WHERE au_fname LIKE 'Autor'
  31.      
  32.      /* Kreirati proceduru za izmjenu podataka u tabeli authors.
  33.      Izvršiti proceduru, tj. izmijeniti određene podatke prethodno dodanog autora.*/
  34.      
  35.      DROP PROCEDURE usp_authors
  36.      
  37.      CREATE PROCEDURE usp_authors_update
  38.      (
  39.             @au_ID VARCHAR(11),
  40.             @au_Iname VARCHAR(40),
  41.             @au_Fname VARCHAR(20),
  42.             @phone CHAR(12),
  43.             @adress VARCHAR(40) = NULL,
  44.             @city VARCHAR(20) = NULL,
  45.             @state CHAR(2) = NULL,
  46.             @zip CHAR(5) = NULL,
  47.             @contact bit
  48.      )
  49.      AS
  50.      BEGIN
  51.             UPDATE authors
  52.             SET au_lname = @au_Iname, au_fname = @au_Fname, phone = @phone,
  53.                     [address] = @adress, city = @city, [state] = @state, zip = @zip, [contract] = @contact
  54.             WHERE au_id = @au_ID
  55.      END
  56.      
  57.       EXEC usp_authors_update '123-12-1234', 'Blaho','Autor','666 666',NULL,NULL,NULL,NULL,1
  58.      
  59.      SELECT * FROM authors WHERE au_fname LIKE 'Autor'
  60.      
  61.      /*Kreirati proceduru za brisanje zapisa iz tabele authors.
  62.      Izvršiti proceduru, tj. obrisati prethodno dodanog autora.*/
  63.      
  64.      CREATE PROCEDURE usp_authors_delete
  65.      (
  66.             @au_id VARCHAR(11)
  67.      )
  68.      AS
  69.      BEGIN
  70.             DELETE FROM authors
  71.             WHERE au_id = @au_id
  72.      END
  73.      
  74.      EXEC usp_authors_delete '123-12-1234'
  75.      
  76.      SELECT * FROM authors WHERE au_fname LIKE 'Autor'
  77.      
  78.      /* Izmijeniti proceduru kreiranu u zadatku 1.
  79.       U istoj proceduri, dodanog autora pridružiti kao koautora na dvije postojeće knjige.
  80.       U proceduri koristiti dvije INSERT komande (Tabele: authors, titleauthor).
  81.       Izvršiti proceduru, tj. dodati novog autora sa njegovim knjigama. */
  82.      
  83.       CREATE PROCEDURE usp_authors_insert2
  84.      (
  85.             @au_ID VARCHAR(11),
  86.             @au_Iname VARCHAR(40),
  87.             @au_Fname VARCHAR(20),
  88.             @phone CHAR(12),
  89.             @adress VARCHAR(40) = NULL,
  90.             @city VARCHAR(20) = NULL,
  91.             @state CHAR(2) = NULL,
  92.             @zip CHAR(5) = NULL,
  93.             @contact bit,
  94.             @au_ord tinyint,
  95.             @royaltyper INT,
  96.             @title_ID nvarchar(6)
  97.      )
  98.      AS
  99.      BEGIN
  100.      INSERT INTO authors
  101.      VALUES (@au_ID, @au_Iname, @au_Fname, @phone, @adress, @city, @state, @zip, @contact)
  102.      
  103.      INSERT INTO titleauthor
  104.      VALUES (@au_ID, @title_ID, @au_ord,@royaltyper)
  105.      END
  106.      
  107.        EXEC usp_authors_insert2 '123-12-1234', 'Blaho','Autor',
  108.        '666 666',NULL,NULL,NULL,NULL,1,2,1,'PS3333'
  109.      
  110.      SELECT * FROM titleauthor
  111.      
  112.      /*Kreirati pogled (view) sa sljedećim podacima:
  113.      naziv izdavača, ime i prezime autora (odvojeno),
  114.       naziv knjige, zarada od prodaje knjige/a. */
  115.      
  116.       CREATE VIEW pogled_izdavac_autor_zarada
  117.       AS
  118.       SELECT [pub_name],[au_lname] + ' ' + [au_fname] AS autor, [title], SUM([qty]*[price]) AS zarada
  119.        FROM titles AS T JOIN titleauthor AS TA ON T.title_id = TA.title_id
  120.       JOIN authors AS A ON A.au_id = TA.au_id JOIN sales AS S ON S.title_id = T.title_id
  121.       JOIN publishers AS P ON P.pub_id = T.pub_id
  122.       GROUP BY [pub_name],[au_lname],[au_fname],[title]
  123.      
  124.       SELECT * FROM pogled_izdavac_autor_zarada
  125.      
  126.       /*
  127.       Kreirati proceduru koja prima sljedeće parametre:
  128.       ime i prezime autora, naziv izdavača, naziv knjige.
  129.       U zavisnosti od proslijeđenog parametra procedura treba da vrati
  130.        zaradu od prodaje knjige/a. Koristiti view kreiran u zadatku 5. */
  131.      
  132.        CREATE PROCEDURE usp_izdavac_autor_zarada
  133.        (
  134.                     @auname VARCHAR(61) = NULL,
  135.                     @pubname VARCHAR(40) = NULL,
  136.                     @title VARCHAR(80) = NULL
  137.        )
  138.       AS
  139.       SELECT [pub_name],[au_lname] + ' ' + [au_fname] AS autor, [title], SUM([qty]*[price]) AS zarada
  140.        FROM titles AS T JOIN titleauthor AS TA ON T.title_id = TA.title_id
  141.       JOIN authors AS A ON A.au_id = TA.au_id JOIN sales AS S ON S.title_id = T.title_id
  142.       JOIN publishers AS P ON P.pub_id = T.pub_id
  143.       WHERE ([au_lname] + ' ' + [au_fname] LIKE @auname OR @auname IS NULL) AND
  144.                     ([pub_name] LIKE @pubname OR @pubname IS NULL) AND
  145.                     ( [title] LIKE @title OR @title IS NULL)              
  146.       GROUP BY [pub_name],[au_lname],[au_fname],[title]
  147.      
  148.       EXEC usp_izdavac_autor_zarada @title = 'The Gourmet Microwave'
  149.  
  150. /*Kreirati trigger (INSTEAD OF) koji će spriječiti izvršavanje DELETE komande nad tabelom titleauthor.
  151. Ukoliko se pokuša obrisati zapis u tabeli titleauthor ispisati odgovarajuću poruku.
  152. Koristiti komandu PRINT za ispis poruke. */
  153.  
  154. CREATE TRIGGER tr_delete
  155. ON [dbo].[titleauthor]
  156. instead OF DELETE
  157. AS
  158. print ' nema brisanja!'
  159.  
  160. SELECT * FROM titleauthor
  161.  
  162. DELETE FROM titleauthor WHERE title_id = 'PS3333'
  163.  
  164. /*Kreirati proceduru koja briše autora dodanog u zadatku 4, zajedno sa svim njegovim knjigama.
  165. Izvršiti proceduru, tj. pokušati obrisati autora.
  166. Trigger kreiran u zadatku 7 treba da spriječi izvršavanje ove procedure.*/
  167.  
  168. CREATE PROCEDURE usp_titleautor_delete
  169. (
  170.     @auid VARCHAR(11)
  171. )
  172. AS
  173. BEGIN
  174. DELETE FROM titleauthor WHERE au_id = @auid
  175.  
  176. DELETE FROM authors WHERE au_id = @auid
  177.  
  178. END
  179.  
  180. EXEC usp_titleautor_delete '123-12-1234'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement