1 IT420: Database Management and Organization SQL Views, Triggers and Stored Procedures 17 February 2006 Adina Crăiniceanu
Kroenke, Database Processing2 Last time SQL Views
Kroenke, Database Processing3 Today Updates on views Triggers Stored procedures
Kroenke, Database Processing4 SQL Views SQL view is a virtual table that is constructed from other tables or views It has no data of its own, but obtains data from tables or other views It only has a definition
Kroenke, Database Processing5 CREATE VIEW Command CREATE VIEW command: CREATE VIEW view_name AS select_statement Use the view: In SELECT statements Sometimes in INSERT statements Sometimes in UPDATE statements Sometimes in DELETE statements
Kroenke, Database Processing6 Uses for SQL Views Security: hide columns and rows Display results of computations Hide complicated SQL syntax Provide a level of isolation between actual data and the user’s view of data three-tier architecture Assign different processing permissions to different views on same table Assign different triggers to different views on same table
Kroenke, Database Processing7 Using Views Customer(CustID, CustName, Address, Phone) CREATE VIEW CustomerV AS SELECT * FROM Customers SELECT * FROM CustomerV CustIDCustNameAddressPhone 01Amy GaleAnnapolis, MD Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD CustIDCustNameAddressPhone 01Amy GaleAnnapolis, MD Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD Customers SELECT * FROM CustomerV query result:
Kroenke, Database Processing8 Using Views CREATE VIEW CustomerV AS SELECT * FROM Customers SELECT * FROM CustomerV WHERE Address LIKE ‘%Annapolis%’ CustIDCustNameAddressPhone 01Amy GaleAnnapolis, MD Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD CustIDCustNameAddressPhone 01Amy GaleAnnapolis, MD Chris O’NealAnnapolis, MD Customers SELECT query result:
Kroenke, Database Processing9 UPDATE on Views CREATE VIEW CustomerV AS SELECT * FROM Customers UPDATE CustomerV SET Phone = ‘ ’ WHERE CustID = 01 CustIDCustNameAddressPhone 01Amy GaleAnnapolis Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD CustIDCustNameAddressPhone 01Amy GaleAnnapolis Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD Customers table before update: Customers table after update: UPDATE impacts the Customers table
Kroenke, Database Processing10 INSERT on Views CREATE VIEW CustomerV AS SELECT * FROM Customers INSERT INTO CustomerV VALUES(‘08’,’Scott White’,’DC’,’ ’) CustIDCustNameAddressPhone 01Amy GaleAnnapolis Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD CustIDCustNameAddressPhone 01Amy GaleAnnapolis Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD Scott WhiteDC Customers table Customers table after insert: INSERT impacts the Customers table
Kroenke, Database Processing11 DELETE on Views CREATE VIEW CustomerV AS SELECT * FROM Customers DELETE FROM CustomerV WHERE Address LIKE ‘%Annapolis%’ CustIDCustNameAddressPhone 01Amy GaleAnnapolis Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD CustIDCustNameAddressPhone 02Tom SmithBaltimore, MD Customers table Customers table after delete: DELETE impacts the Customers table
Kroenke, Database Processing12 Using Views – Case 2 Customer(CustID, CustName, Address, Phone) CREATE VIEW CustomerV2 AS SELECT CustID, CustName, Phone FROM Customers SELECT * FROM CustomerV2 CustIDCustNameAddressPhone 01Amy GaleAnnapolis, MD Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD CustIDCustNamePhone 01Amy Gale Tom Smith Chris O’Neal Customers SELECT * FROM CustomerV2 query result:
Kroenke, Database Processing13 INSERT on Views - Case 2 CREATE VIEW CustomerV2 AS SELECT CustID, CustName, Phone FROM Customers INSERT INTO CustomerV2 VALUES(‘08’,’Scott White’,’ ’) CustIDCustNameAddressPhone 01Amy GaleAnnapolis Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD CustIDCustNameAddressPhone 01Amy GaleAnnapolis Tom SmithBaltimore, MD Chris O’NealAnnapolis, MD Scott WhiteNULL Customers table Customers table after insert: Address NOT NULL, INSERT fails
Kroenke, Database Processing14 Views – Case 3 Rental(RentalID, CustID, PlaneID, NbHours, HRate) CREATE VIEW RentalView AS SELECT RentalID, CustID, PlaneID, NbHours*HRate AS Charge FROM Rental SELECT * FROM RentalView RentalIDCustIDPlaneIDNbHoursHRate $ $ $420 RentalIDCustIDPlaneIDCharge $ $ $420 Rental SELECT * FROM RentalView query result:
Kroenke, Database Processing15 INSERT on Views – Case 3 CREATE VIEW RentalView AS SELECT RentalID, CustID, PlaneID, NbHours*HRate AS Charge FROM Rental INSERT INTO RentalView VALUES (03,113,01,1250) INSERT fails! UPDATE Charge fails! RentalIDCustIDPlaneIDNbHoursHRate $ $ $420 RentalIDCustIDPlaneIDCharge $ $ $420 Rental SELECT * FROM RentalView query result:
Kroenke, Database Processing16 Updateable Views Views based on a single table No computed columns All non-null columns present in view Views with INSTEAD OF triggers defined on them Views based on a single table, primary key in view, some non-null columns missing from view Updates for non-computed columns ok Deletes ok Inserts not ok
Kroenke, Database Processing17 Triggers Trigger: stored program that is executed by the DBMS whenever a specified event occurs Associated with a table or view Three trigger types: BEFORE, INSTEAD OF, and AFTER Each type can be declared for INSERT, UPDATE, and DELETE Resulting in a total of nine trigger types
Kroenke, Database Processing18 Programming Languages for Triggers Depends on DBMS Java or PL/SQL for Oracle T-SQL for SQL Server C++, C#, Visual Basic.NET for SQL Server 2005
Kroenke, Database Processing19 Firing Triggers When a trigger is fired, the DBMS supplies: Old and new values for the update New values for inserts Old values for deletions The way the values are supplied depends on the DBMS product Trigger applications: Provide default values Enforce data constraints Update views Perform referential integrity actions
Kroenke, Database Processing20 Create trigger CREATE TRIGGER trigger_name ON table_or_view_name AFTER | BEFORE | INSTEAD OF INSERT | UPDATE | DELETE AS trigger_code
Kroenke, Database Processing21 Trigger for Complex Default Value Trans(TransactionID, WorkID, AcquisitionPrice, AskingPrice) ArtistWorkNet(SaleID, WorkID, NetPrice) AskingPrice = max of 2*AcquisitionPrice AcquisitionPrice+AVG(Past_NetPrice), if WorkID already in table
Kroenke, Database Processing22 Declare variables Create trigger Built-in function
Kroenke, Database Processing23
Kroenke, Database Processing24 Trigger for Referential Integrity Actions – generic code
Kroenke, Database Processing25 Class Exercise Students(Alpha, LName, FName, GPA) Enroll(Alpha, CourseID, Semester, Grade) GradeValues(LetterGrade, PointValue) Define a trigger to update the GPA every time the student gets a new grade, or a grade changes
Kroenke, Database Processing26 Stored Procedures A stored procedure is a program that is stored within the database and is compiled when used In Oracle, it can be written in PL/SQL or Java In SQL Server, it can be written in TRANSACT-SQL Stored procedures can receive input parameters and they can return results Stored procedures can be called from: Programs written in standard languages, e.g., Java, C# Scripting languages, e.g., JavaScript, VBScript SQL command prompt, e.g., SQL*Plus, Query Analyzer
Kroenke, Database Processing27 Stored Procedure Advantages Greater security as store procedures are always stored on the database server SQL can be optimized by the DBMS compiler Code sharing resulting in: Less work Standardized processing Specialization among developers
Kroenke, Database Processing28
Kroenke, Database Processing29 Triggers vs. Stored Procedures
Kroenke, Database Processing30 Project 1 – Due March 3, 2006 National College Learning Center Organization (NCLCA) Membership Conferences organized Have: Partial user requirements (forms) Tasks: Design the ER model Transform ER model to tables Verify tables are normalized Write SQL to create the tables in SQL Server Write SQL to answer typical user queries Write-up explaining your work