IT420: Database Management and Organization SQL Views, Triggers and Stored Procedures 17 February 2006 Adina Crăiniceanu www.cs.usna.edu/~adina 1 Last time SQL Views Kroenke, Database Processing 2 Today Updates on views Triggers Stored procedures Kroenke, Database Processing 3 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 Processing 4 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 Processing 5 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 Processing 6 Using Views Customer(CustID, CustName, Address, Phone) CREATE VIEW CustomerV AS SELECT * FROM Customers Customers CustID CustName 01 Amy Gale Annapolis, MD 410-293-5234 02 Tom Smith Baltimore, MD 443-5674-7899 05 Address Phone Chris O’Neal Annapolis, MD 410-295-6583 - 21402 SELECT * FROM CustomerV query result: SELECT * FROM CustomerV CustID CustName 01 Amy Gale Annapolis, MD 410-293-5234 02 Tom Smith Baltimore, MD 05 Kroenke, Database Processing Address Phone 443-56747899 Chris O’Neal Annapolis, MD 410-295-6583 - 21402 7 Using Views CREATE VIEW CustomerV AS SELECT * FROM Customers SELECT * FROM CustomerV WHERE Address LIKE ‘%Annapolis%’ Customers CustID CustName 01 Amy Gale Annapolis, MD 410-293-5234 02 Tom Smith Baltimore, MD 443-5674-7899 05 Address Phone Chris O’Neal Annapolis, MD 410-295-6583 - 21402 SELECT query result: CustID CustName 01 Amy Gale 05 Kroenke, Database Processing Address Phone Annapolis, MD 410-293-5234 Chris O’Neal Annapolis, MD 410-295-6583 - 21402 8 UPDATE on Views CREATE VIEW CustomerV AS SELECT * FROM Customers UPDATE CustomerV SET Phone = ‘410-123-1234’ WHERE CustID = 01 UPDATE impacts the Customers table Customers table before update: CustID CustName Address Phone 01 Amy Gale Annapolis 410-293-5234 02 Tom Smith Baltimore, MD 443-5674-7899 Chris O’Neal Annapolis, MD 410-295-6583 - 21402 05 Customers table after update: CustID CustName Address Phone 01 Amy Gale Annapolis 410-123-1234 02 Tom Smith Baltimore, MD 443-56747899 05 Chris O’Neal Annapolis, MD 410-295-6583 - 21402 Kroenke, Database Processing 9 INSERT on Views CREATE VIEW CustomerV AS SELECT * FROM Customers INSERT INTO CustomerV VALUES(‘08’,’Scott White’,’DC’,’401-456-3415’) INSERT impacts the Customers table Customers table CustID CustName Address Phone 01 Amy Gale Annapolis 410-293-5234 02 Tom Smith Baltimore, MD 443-5674-7899 Chris O’Neal Annapolis, MD 410-295-6583 - 21402 05 Customers table after insert: CustID CustName Address Phone 01 Amy Gale Annapolis 410-123-1234 02 Tom Smith Baltimore, MD 443-56747899 05 Chris O’Neal Annapolis, MD 410-295-6583 - 21402 08 Scott White Kroenke, Database Processing DC 401-456-3415 10 DELETE on Views CREATE VIEW CustomerV AS SELECT * FROM Customers DELETE FROM CustomerV WHERE Address LIKE ‘%Annapolis%’ Customers table CustID CustName Address Phone 01 Amy Gale Annapolis 410-293-5234 02 Tom Smith Baltimore, MD 443-5674-7899 Chris O’Neal Annapolis, MD 410-295-6583 - 21402 05 Customers table after delete: CustID CustName Address Phone 02 Tom Smith Baltimore, MD 443-56747899 DELETE impacts the Customers table Kroenke, Database Processing 11 Using Views – Case 2 Customer(CustID, CustName, Address, Phone) CREATE VIEW CustomerV2 AS SELECT CustID, CustName, Phone FROM Customers SELECT * FROM CustomerV2 Customers CustID CustName 01 Amy Gale Annapolis, MD 410-293-5234 02 Tom Smith Baltimore, MD 443-5674-7899 05 Address Phone Chris O’Neal Annapolis, MD 410-295-6583 - 21402 SELECT * FROM CustomerV2 query result: CustID CustName Phone 01 Amy Gale 410-293-5234 02 Tom Smith 443-5674-7899 05 Chris O’Neal 410-295-6583 Kroenke, Database Processing 12 INSERT on Views - Case 2 CREATE VIEW CustomerV2 AS SELECT CustID, CustName, Phone FROM Customers INSERT INTO CustomerV2 VALUES(‘08’,’Scott White’,’401-456-3415’) Address NOT NULL, INSERT fails Customers table CustID CustName Address Phone 01 Amy Gale Annapolis 410-293-5234 02 Tom Smith Baltimore, MD 443-5674-7899 Chris O’Neal Annapolis, MD 410-295-6583 - 21402 05 Customers table after insert: CustID CustName Address Phone 01 Amy Gale Annapolis 410-123-1234 02 Tom Smith Baltimore, MD 443-56747899 05 Chris O’Neal Annapolis, MD 410-295-6583 - 21402 08 Scott White Kroenke, Database Processing NULL 401-456-3415 13 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 Rental RentalID CustID PlaneID NbHours HRate 01 111 01 3 $400 02 111 13 7 $250 05 112 01 1 $420 SELECT * FROM RentalView query result: RentalID CustID PlaneID Charge 01 111 01 $1200 02 111 13 $1750 05 112 01 $420 Kroenke, Database Processing 14 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! Rental RentalID CustID PlaneID NbHours HRate 01 111 01 3 $400 02 111 13 7 $250 05 112 01 1 $420 SELECT * FROM RentalView query result: RentalID CustID PlaneID Charge 01 111 01 $1200 02 111 13 $1750 05 112 01 $420 Kroenke, Database Processing 15 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 Processing 16 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 Processing 17 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 Processing 18 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 Processing 19 Create trigger CREATE TRIGGER trigger_name ON table_or_view_name AFTER | BEFORE | INSTEAD OF INSERT | UPDATE | DELETE AS trigger_code Kroenke, Database Processing 20 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 Processing 21 Create trigger Declare variables Built-in function Kroenke, Database Processing 22 Kroenke, Database Processing 23 Trigger for Referential Integrity Actions – generic code Kroenke, Database Processing 24 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 Processing 25 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 Processing 26 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 Processing 27 Kroenke, Database Processing 28 Triggers vs. Stored Procedures Kroenke, Database Processing 29 Project 1 – Due March 3, 2006 National College Learning Center Organization (NCLCA) www.nclca.org 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 Kroenke, Database Processing 30