Modification to Views Via Triggers

Slides:



Advertisements
Similar presentations
BD05/06 PL/SQL  Introduction  Structure of a block  Variables and types  Accessing the database  Control flow  Cursors  Exceptions  Procedures.
Advertisements

AN INTRODUCTION TO PL/SQL Mehdi Azarmi 1. Introduction PL/SQL is Oracle's procedural language extension to SQL, the non-procedural relational database.
PL/SQL. Introduction to PL/SQL PL/SQL is the procedure extension to Oracle SQL. It is used to access an Oracle database from various environments (e.g.
SQL*PLUS, PLSQL and SQLLDR Ali Obaidi. SQL Advantages High level – Builds on relational algebra and calculus – Powerful operations – Enables automatic.
Stored Procedure Language Stored Procedure Overview Stored Procedure is a function in a shared library accessible to the database server can also write.
Murali Mani Persistent Stored Modules (Stored Procedures) : PSM.
Chapter 4B: More Advanced PL/SQL Programming
Fall 2001Arthur Keller – CS 18011–1 Schedule Oct. 30 (T) Embedded SQL. u Read Section 8.1. u Assignment 5 due. Not accepted late. u Project Part 4 due.
Fall 2001Arthur Keller – CS 18010–1 Schedule Oct. 25 (TH) More Constraints, Triggers. u Read Sections Oct. 30 (T) Embedded SQL. u Read Section.
Winter 2002Arthur Keller – CS 18010–1 Schedule Today: Feb. 5 (T) u Triggers, PL/SQL. u Read Sections 7.4, 8.2. Assignment 4 due. Feb. 7 (TH) u PL/SQL,
Winter 2002Arthur Keller – CS 1809–1 Schedule Today: Jan. 31 (TH) u Constraints. u Read Sections , Project Part 3 due. Feb. 5 (T) u Triggers,
1 SQL/PSM Procedures Stored in the Database General-Purpose Programming.
A Guide to SQL, Seventh Edition. Objectives Embed SQL commands in PL/SQL programs Retrieve single rows using embedded SQL Update a table using embedded.
1 Real SQL Programming Persistent Stored Modules (PSM) PL/SQL Embedded SQL.
1 PL/SQL Oracle’s Version of Triggers and PSM. 2 PL/SQL uOracle uses a variant of SQL/PSM which it calls PL/SQL. uPL/SQL not only allows you to create.
Introduction to PL/SQL Lecture 0 – Self Study Akhtar Ali.
Cursors in Pl/SQL Database 1. Practice. Sample Database The schema of the sample database is the following: Drinkers (name, occupation, birthday, salary)
PL / SQL P rocedural L anguage / S tructured Q uery L anguage Chapter 7 in Lab Reference.
1 Real SQL Programming Persistent Stored Modules (PSM) PL/SQL Embedded SQL.
SCUHolliday - coen 1789–1 Schedule Today: u Constraints, assertions, triggers u Read Sections , 7.4. Next u Triggers, PL/SQL, embedded SQL, JDBC.
Winter 2006Keller, Ullman, Cushing10–1 Modification to Views Via Triggers Oracle allows us to “intercept” a modification to a view through an instead-of.
Winter 2006Keller, Ullman, Cushing9–1 Constraints Commercial relational systems allow much more “fine-tuning” of constraints than do the modeling languages.
Overview · What is PL/SQL · Advantages of PL/SQL · Basic Structure of a PL/SQL Block · Procedure · Function · Anonymous Block · Types of Block · Declaring.
1 Real SQL Programming Persistent Stored Modules (PSM) PL/SQL Embedded SQL.
CIS4368: Advanced DatabaseSlide # 1 PL/SQL Dr. Peeter KirsSpring, 2003 PL/SQL.
BIS Database Systems School of Management, Business Information Systems, Assumption University A.Thanop Somprasong Chapter # 8 Advanced SQL.
Database Systems Design, Implementation, and Management Coronel | Morris 11e ©2015 Cengage Learning. All Rights Reserved. May not be scanned, copied or.
1 Real SQL Programming - 2 Persistent Stored Modules (PSM) PL/SQL Embedded SQL These slides are reused from Jeffrey Ullman’s class with the author’s permission.
Databases 1 9th lecture. Main topic: Oracle PL/SQL What is PL/SQL? ▫Procedural Langauge extension for standard SQL.. PL/SQL not only allows you to create.
Introduction to PL/SQL. Main topic: Oracle PL/SQL What is PL/SQL? ▫Procedural Langauge extension for standard SQL.. PL/SQL not only allows you to create.
Chapter 9: Advanced SQL and PL/SQL Guide to Oracle 10g.
1 Real SQL Programming Persistent Stored Modules (PSM) PL/SQL Embedded SQL.
A Guide to SQL, Eighth Edition Chapter Eight SQL Functions and Procedures.
Professor: Dr. Shu-Ching Chen TA: Hsin-Yu Ha Stored Procedure used in PosgreSQL.
Professor: Dr. Shu-Ching Chen TA: Hsin-Yu Ha Function, Trigger used in PosgreSQL.
Professor: Dr. Shu-Ching Chen TA: Hsin-Yu Ha Views, Sequence, and Stored Procedure used in PosgreSQL.
SCU Fall 2002JoAnne Holliday10–1 Schedule Today u Triggers, Procedures, PL/SQL. u Read Sections , 8.1, 8.5. Next u Transaction concepts, security.
Database Management COP4540, SCS, FIU Database Trigger.
Chapter 7: Constraints and Triggers Foreign Keys Local and Global Constraints Triggers 1.
SCUHolliday - coen 1789–1 Schedule Today: u Constraints, assertions, triggers u Read Sections , 7.4. Next u Embedded SQL, JDBC. u Read Sections.
1 Database Design: DBS CB, 2 nd Edition SQL in a Server Environment: Stored Procedure & Embedded SQL Ch. 9.3, 9.4.
1 Introduction to Database Systems, CS420 SQL Persistent Stored Modules (PSM) – Stored Procedure.
CS422 Principles of Database Systems Oracle PL/SQL Chengyu Sun California State University, Los Angeles.
CS422 Principles of Database Systems Stored Procedures and Triggers Chengyu Sun California State University, Los Angeles.
1 Lecture 11 PL/SQL Slides from
Introduction to Database Systems, CS420
User Defined Functions and Triggers Tutorial
A Guide to SQL, Seventh Edition
CMSC-461 Database Management Systems
PL/SQL.
Database Systems: Design, Implementation, and Management Tenth Edition
Views, Stored Procedures, Functions, and Triggers
Database Application Development
Stored Procedure used in PosgreSQL
CS4222 Principles of Database System
PL/SQL Scripting in Oracle:
CPSC-310 Database Systems
CPSC-310 Database Systems
Object-Relational Systems
Stored Procedure used in PosgreSQL
Stored Procedure used in PosgreSQL
Stored Procedure used in PosgreSQL
Persistent Stored Modules (PSM) PL/SQL Embedded SQL
CMSC-461 Database Management Systems
Oracle9i Developer: PL/SQL Programming Chapter 8 Database Triggers.
Chapter 8 Advanced SQL.
Chapter 8 Advanced SQL Pearson Education © 2009.
Database Systems: Design, Implementation, and Management Tenth Edition
Stored Procedure Language
Database Application Development
Presentation transcript:

Modification to Views Via Triggers Oracle allows us to “intercept” a modification to a view through an instead-of trigger. Example Likes(driver, car) Sells(dealer, car, price) Frequents(driver, dealer) CREATE VIEW Synergy AS SELECT Likes.driver, Likes.car, Sells.dealer FROM Likes, Sells, Frequents WHERE Likes.driver = Frequents.driver AND Likes.car = Sells.car AND Sells.dealer = Frequents.dealer; 5/4/2019 Dr. G. Wiggins CSC 5-415

CREATE TRIGGER ViewTrig INSTEAD OF INSERT ON Synergy FOR EACH ROW BEGIN INSERT INTO Likes VALUES( :new.driver, :new.car); INSERT INTO Sells(dealer, car) VALUES(:new.dealer, :new.car); INSERT INTO Frequents VALUES( :new.driver, :new.dealer); END; . run 5/4/2019 Dr. G. Wiggins CSC 5-415

SQL Triggers Read in text. Some differences, including: The Oracle restriction about not modifying the relation of the trigger or other relations linked to it by constraints is not present in SQL (but Oracle is real; SQL is paper). The action in SQL is a list of (restricted) SQL statements, not a PL/SQL statement. 5/4/2019 Dr. G. Wiggins CSC 5-415

PL/SQL Oracle’s version of PSM (Persistent, Stored Modules). Use via sqlplus. A compromise between completely procedural programming and SQL’s very high-level, but limited statements. Allows local variables, loops, procedures, examination of relations one tuple at a time. Rough form: DECLARE declarations BEGIN executable statements END; . run; DECLARE portion is optional. Dot and run (or a slash in place of run;) are needed to end the statement and execute it. 5/4/2019 Dr. G. Wiggins CSC 5-415

Simplest Form: Sequence of Modifications Likes(driver, car) BEGIN INSERT INTO Likes VALUES('Sally', 'Mustang'); DELETE FROM Likes WHERE driver = 'Fred' AND car = 'Miller'; END; . run; 5/4/2019 Dr. G. Wiggins CSC 5-415

Procedure Declarations Procedures Stored database objects that use a PL/SQL statement in their body. Procedure Declarations CREATE OR REPLACE PROCEDURE <name>(<arglist>) AS <declarations> BEGIN <PL/SQL statements> END; . run; 5/4/2019 Dr. G. Wiggins CSC 5-415

Argument list has name-mode-type triples. Mode: IN, OUT, or IN OUT for read-only, write-only, read/write, respectively. Types: standard SQL + generic types like NUMBER = any integer or real type. Since types in procedures must match their types in the DB schema, you should generally use an expression of the form relation.attribute %TYPE to capture the type correctly. 5/4/2019 Dr. G. Wiggins CSC 5-415

Example A procedure to take a car and price and add it to Joe’s menu. Sells(dealer, car, price) CREATE PROCEDURE joeMenu( b IN Sells.car %TYPE, p IN Sells.price %TYPE ) AS BEGIN INSERT INTO Sells VALUES('Joe''s dealer', b, p); END; . run; Note “run” only stores the procedure; it doesn’t execute the procedure. 5/4/2019 Dr. G. Wiggins CSC 5-415

Invoking Procedures A procedure call may appear in the body of a PL/SQL statement. Example: BEGIN joeMenu('Mustang', 25,000); joeMenu(‘SL 300', 50,000); END; . run; 5/4/2019 Dr. G. Wiggins CSC 5-415

Assignment Branches Loops Assign expressions to declared variables with :=. Branches IF <condition> THEN <statement(s)> ELSE END IF; But in nests, use ELSIF in place of ELSE IF. Loops LOOP . . . EXIT WHEN <condition> END LOOP; 5/4/2019 Dr. G. Wiggins CSC 5-415

Queries in PL/SQL Single-row selects allow retrieval into a variable of the result of a query that is guaranteed to produce one tuple. Cursors allow the retrieval of many tuples, with the cursor and a loop used to process each in turn. 5/4/2019 Dr. G. Wiggins CSC 5-415

Single-Row Select Example Select-from-where in PL/SQL must have an INTO clause listing variables into which a tuple can be placed. It is an error if the select-from-where returns more than one tuple; you should have used a cursor. Example Find the price Joe charges for Mustang (and drop it on the floor). Sells(dealer, car, price) DECLARE p Sells.price %TYPE; BEGIN SELECT price INTO p FROM Sells WHERE dealer = 'Joe''s ' AND car = 'Mustang'; END; . run 5/4/2019 Dr. G. Wiggins CSC 5-415

Functions (PostgreSQL Version) Server-side functions can be written in several languages: SQL PL/PGSQL PL/TCL PL/Perl C 5/4/2019 Dr. G. Wiggins CSC 5-415

SQL Functions (PostgreSQL Version) Like Oracle stored procedures. CREATE FUNCTION requires the following information: Function name Number of function arguments Data type of each argument Function return type Function action Language used by the function action 5/4/2019 Dr. G. Wiggins CSC 5-415

Example A simple SQL function to convert a temperature from Fahrenheit to centigrade degrees. CREATE FUNCTION ftoc(float) RETURNS float AS 'SELECT ($1 - 32.0) * 5.0 / 9.0;' LANGUAGE 'sql'; SELECT ftoc(68); ftoc ------ 20 (1 row) 5/4/2019 Dr. G. Wiggins CSC 5-415

Functions (Continued) SQL functions can return multiple values using SETOF. Function actions can also contain INSERTs, UPDATEs, and DELETEs as well as multiple queries separated by semicolons. Arguments: $1 is automatically replaced by the first argument of the function call. $2 is the second argument, etc. 5/4/2019 Dr. G. Wiggins CSC 5-415

Example SQL server-side function to compute a sales tax. CREATE FUNCTION tax(numeric) RETURNS numeric AS 'SELECT ($1 * 0.06::numeric(8,2))::numeric(8,2);' LANGUAGE 'sql'; SELECT tax(100); tax ------ 6.00 (1 row) Notice the casts to NUMERIC(8,2) using the double-colon form of type casting, rather than CAST. 5/4/2019 Dr. G. Wiggins CSC 5-415

Server Side Functions in SQL Queries CREATE TABLE part ( part_id INTEGER, name CHAR(10), cost NUMERIC(8,2), weight FLOAT ); INSERT INTO part VALUES (637, 'cable', 14.29, 5); INSERT INTO part VALUES (638, 'sticker', 0.84, 1); INSERT INTO part VALUES (639, 'bulb', 3.68, 3); SELECT part_id, name, cost, tax(cost), cost+tax(cost) AS total FROM part ORDER BY part_id; part_id | name | cost | tax | total ---------+------------+-------+------+------- 637 | cable | 14.29 | 0.86 | 15.15 638 | sticker | 0.84 | 0.05 | 0.89 639 | bulb | 3.68 | 0.22 | 3.90 (3 rows) 5/4/2019 Dr. G. Wiggins CSC 5-415

Example: Shipping CREATE FUNCTION shipping(numeric) RETURNS numeric AS 'SELECT CASE WHEN $1 < 2 THEN CAST(3.00 AS numeric(8,2)) WHEN $1 >= 2 AND $1 < 4 THEN CAST(5.00 AS numeric(8,2)) WHEN $1 >= 4 THEN CAST(6.00 AS numeric(8,2)) END;' LANGUAGE 'sql'; SELECT part_id, trim(name) AS name, cost, tax(cost), cost+tax(cost) AS subtotal, shipping(weight), cost+tax(cost)+shipping(weight) AS total FROM part ORDER BY part_id; part_id | name | cost | tax | subtotal | shipping | total --------+---------+-------+------+----------+----------+------ 637 | cable | 14.29 | 0.86 | 15.15 | 6.00 | 21.15 638 | sticker | 0.84 | 0.05 | 0.89 | 3.00 | 3.89 639 | bulb | 3.68 | 0.22 | 3.90 | 5.00 | 8.90 (3 rows) 5/4/2019 Dr. G. Wiggins CSC 5-415

Triggers (PostgreSQL Version) Create a function for states that uses the new RECORD variable to perform the following actions: Reject a state code that is not exactly two alphabetic characters Reject a state name that contains nonalphabetic characters Reject a state name less than three characters in length Uppercase the state code Capitalize the state name 5/4/2019 Dr. G. Wiggins CSC 5-415

Example Function CREATE FUNCTION trigger_insert_update_statename() RETURNS opaque AS 'BEGIN IF new.code ! ''[A-Za-z][A-Za-z]$'' THEN RAISE EXCEPTION ''State code must be two alphabetic characters.''; END IF; IF new.name ! ''[A-Za-z ]*$'' THEN RAISE EXCEPTION ''State name must be only alphabetic characters.''; IF length(trim(new.name)) < 3 THEN RAISE EXCEPTION ''State name must longer than two characters.''; new.code = upper(new.code); -- uppercase statename.code new.name = initcap(new.name); -- capitalize statename.name RETURN new; END;' LANGUAGE 'plpgsql'; 5/4/2019 Dr. G. Wiggins CSC 5-415

Trigger (PostgreSQL Version) CREATE TRIGGER trigger_statename BEFORE INSERT OR UPDATE ON statename FOR EACH ROW EXECUTE PROCEDURE trigger_insert_update_statename() ; 5/4/2019 Dr. G. Wiggins CSC 5-415

Example Execution INSERT INTO statename VALUES ('a', 'alabama'); ERROR: State code must be two alphabetic characters. INSERT INTO statename VALUES ('al', 'alabama2'); ERROR: State name must be only alphabetic characters. INSERT INTO statename VALUES ('al', 'al'); ERROR: State name must longer than two characters. INSERT INTO statename VALUES ('al', 'alabama'); INSERT 292898 1 SELECT * FROM statename; code | name -----+-------------------------------- AL | Alabama (1 row) 5/4/2019 Dr. G. Wiggins CSC 5-415

Cursors Declare by: CURSOR <name> IS select-from-where statement Cursor gets each tuple from the relation produced by the select-from-where, in turn, using a fetch statement in a loop. Fetch statement: FETCH <cursor name> INTO variable list; Break the loop by a statement of the form: EXIT WHEN <cursor name> %NOTFOUND; True when there are no more tuples to get. Open and close the cursor with OPEN and CLOSE. 5/4/2019 Dr. G. Wiggins CSC 5-415

Example A procedure that examines the menu for Joe’s dealer and raises by $100 all prices that are less than $30,000. Sells(dealer, car, price) This simple price-change algorithm can be implemented by a single UPDATE statement, but more complicated price changes could not. 5/4/2019 Dr. G. Wiggins CSC 5-415

CREATE PROCEDURE joeGouge() AS thecar Sells.car%TYPE; thePrice Sells.price%TYPE; CURSOR c IS SELECT car, price FROM Sells WHERE dealer = 'Joe''s '; BEGIN OPEN c; LOOP FETCH c INTO thecar, thePrice; EXIT WHEN c%NOTFOUND; IF thePrice < 30000 THEN UDPATE Sells SET price = thePrice + 100 WHERE dealer = 'Joe''s ' AND car = thecar; END IF; END LOOP; CLOSE c; END; . run 5/4/2019 Dr. G. Wiggins CSC 5-415

Row Types Anything (e.g., cursors, table names) that has a tuple type can have its type captured with %ROWTYPE. We can create temporary variables that have tuple types and access their components with dot. Handy when we deal with tuples with many attributes. 5/4/2019 Dr. G. Wiggins CSC 5-415

Example The same procedure with a tuple variable bp. CREATE PROCEDURE joeGouge() AS CURSOR c IS SELECT car, price FROM Sells WHERE dealer = 'Joe''s '; bp c%ROWTYPE; BEGIN OPEN c; LOOP FETCH c INTO bp; EXIT WHEN c%NOTFOUND; IF bp.price < 30000 THEN UDPATE Sells SET price = bp.price + 100 WHERE dealer = 'Joe''s ' AND car = bp.car; END IF; END LOOP; CLOSE c; END; . run 5/4/2019 Dr. G. Wiggins CSC 5-415