SQL Extensions




CS185c

Chris Pollett

Apr 8, 2010

Outline

Introduction

Transactions

ACID Properties of Transactions

Correct Execution of Transactions

Transaction Commit

Transaction Rollback

Units of Recovery

A timeline of an update database transaction

Transactions in SQL

More Transaction SQL Syntax

Stored Procedures

Type of Stored Procedure in DB2

Stored Procedure (External) Example

CREATE PROCEDURE MYPROC (IN INT, OUT INT, OUT DECIMAL(7,2))
LANGUAGE COBOL
EXTERNAL NAME MYMODULE
PARAMETER STYLE GENERAL 
WLM ENVIRONMENT PARTSA 
DYNAMIC RESULT SETS 1;
Compiling an external stored procedure

Stored Procedure (SQL - External) Example

CREATE PROCEDURE MEDIAN (OUT medianSalary DECIMAL(7,2) 
LANGUAGE SQL FENCED 
BEGIN
DECLARE v_numRecords INTEGER DEFAULT 1; 
DECLARE v_counter INTEGER DEFAULT 0; 
DECLARE c1 CURSOR FOR
   SELECT salary FROM staff ORDER BY salary;
SET medianSalary = 0; 
SELECT COUNT(*) INTO v_numRecords 
FROM STAFF; 
OPEN c1; 
WHILE v_counter < (v_numRecords / 2 + 1) 
DO
FETCH c1 INTO medianSalary;
SET v_counter = v_counter + 1; 
END WHILE; 
CLOSE c1; 
END

Stored Procedure (SQL - External) Flow

Stored Procedure (SQL - Native) Example

CREATE PROCEDURE MEDIAN (OUT medianSalary DECIMAL(7,2)) 
BEGIN
DECLARE v_numRecords INTEGER DEFAULT 1; 
DECLARE v_counter INTEGER DEFAULT 0; 
DECLARE c1 CURSOR FOR
  SELECT salary FROM staff ORDER BY salary;
SET medianSalary = 0; 
SELECT COUNT(*) INTO v_numRecords FROM STAFF; 
OPEN c1; 
WHILE v_counter < (v_numRecords / 2 + 1) DO
FETCH c1 INTO medianSalary;
SET v_counter = v_counter + 1; 
END WHILE; 
CLOSE c1;
END

Stored Procedure (SQL -- Native) Flow

External vs. Native SQL Procedures

User-defined Types -- Distinct Types

User-Defined Function (UDF)

Example of User-Defined Function (Scalar)

CREATE FUNCTION DAYSINMONTH(DATE) 
RETURNS INTEGER
EXTERNAL NAME 'DAYMTH' LANGUAGE COBOL;

SELECT EMPNO, LASTNME, BIRTHDATE,
DAYSINMONTH(BIRTHDATE)
FROM DSN8810.EMP 
WHERE DAYSINMONTH(BIRTHDATE) < 31

Example of User-Defined Function (Table)

CREATE FUNCTION FOOTBALL_RESULTS(INTEGER) 
RETURNS TABLE (WEEK INTEGER,
   WINNER CHAR(20), 
   WINNER_SCORE INTEGER, 
   LOSER CHAR(20), 
   LOSER_SCORE INTEGER)
EXTERNAL NAME FOOTBALL 
LANGUAGE C 
CARDINALITY 300;

SELECT WINNER, WINNER_SCORE, LOSER, LOSER_SCORE 
FROM FOOTBALL_RESULTS(5) 
WHERE LOSER_SCORE = 0;

Example of User-Defined Function (Source)

CREATE DISTINCT TYPE SHOESIZE AS INTEGER;

CREATE FUNCTION '+' (SHOESIZE, SHOESIZE) 
RETURNS SHOESIZE
SOURCE SYSIBM. '+' (INTEGER, INTEGER);

Example of User-Defined Function (SQL Scalar)

CREATE FUNCTION TAN (X DOUBLE) 
RETURNS DOUBLE 
LANGUAGE SQL 
CONTAINS SQL
NO EXTERNAL ACTION 
DETERMINISTIC 
RETURN SIN(X)/COS(X);

DB2 Triggers

Example Trigger

CREATE TRIGGER TOT_COMP 
AFTER UPDATE OF SALARY, BONUS, COMM 
ON EMP 
REFERENCING 
NEW AS N, 
OLD AS O
FOR EACH ROW MODE DB2SQL
WHEN (N.SALARY <> O.SALARY OR N.BONUS<> O.BONUS 
   OR N.COMM <> O.COMM) 
BEGIN ATOMIC UPDATE EMP_SALARY SET
TOT_COMP = N.SALARY + N.BONUS + N.COMM 
WHERE EMP_SALARY.EMPNO = N.EMPNO;
END