----------------------------------------------------------------------------- -- (c) Copyright IBM Corp. 2007 All rights reserved. -- -- The following sample of source code ("Sample") is owned by International -- Business Machines Corporation or one of its subsidiaries ("IBM") and is -- copyrighted and licensed, not sold. You may use, copy, modify, and -- distribute the Sample in any form without payment to IBM, for the purpose of -- assisting you in the development of your applications. -- -- The Sample code is provided to you on an "AS IS" basis, without warranty of -- any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR -- IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do -- not allow for the exclusion or limitation of implied warranties, so the above -- limitations or exclusions may not apply to you. IBM shall not be liable for -- any damages you suffer as a result of using, copying, modifying or -- distributing the Sample, even if IBM has been advised of the possibility of -- such damages. ----------------------------------------------------------------------------- -- -- SOURCE FILE NAME: nestcase.db2 -- -- SAMPLE: To create the BUMP_SALARY SQL procedure -- -- To create the SQL procedure: -- 1. Connect to the database -- 2. Enter the command "db2 -td@ -vf nestcase.db2" -- -- To call the SQL procedure from the command line: -- 1. Connect to the database -- 2. Enter the following command: -- db2 "CALL bump_salary (51)" -- -- You can also call this SQL procedure by compiling and running the -- C embedded SQL client application, "nestcase", using the nestcase.sqc -- source file available in the sqlpl samples directory. ----------------------------------------------------------------------------- -- -- For more information on the sample scripts, see the README file. -- -- For information on creating SQL procedures, see the Developing SQL and External Routines book. -- -- For information on using SQL statements, see the SQL Reference. -- -- For the latest information on programming, building, and running DB2 -- applications, visit the DB2 Information Center: -- http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp ----------------------------------------------------------------------------- CREATE PROCEDURE bump_salary (IN deptnumber SMALLINT) LANGUAGE SQL BEGIN DECLARE SQLSTATE CHAR(5); DECLARE v_salary DOUBLE; DECLARE v_id SMALLINT; DECLARE v_years SMALLINT; DECLARE at_end INT DEFAULT 0; DECLARE not_found CONDITION FOR SQLSTATE '02000'; DECLARE C1 CURSOR FOR SELECT id, CAST(salary AS DOUBLE), years FROM staff WHERE dept = deptnumber; DECLARE CONTINUE HANDLER FOR not_found SET at_end = 1; OPEN C1; FETCH C1 INTO v_id, v_salary, v_years; WHILE at_end = 0 DO CASE WHEN (v_salary < 15000 * v_years) THEN CASE WHEN (15500*v_years > 99000) THEN UPDATE staff SET salary = 99000 WHERE id = v_id; ELSE UPDATE staff SET salary = 15500* v_years WHERE id = v_id; END CASE; WHEN (v_salary < 30000 * v_years) THEN CASE WHEN (v_salary < 20000 * v_years) THEN CASE WHEN (20000*v_years > 99000) THEN UPDATE staff SET salary = 99000 WHERE id = v_id; ELSE UPDATE staff SET salary = 20000 * v_years WHERE id = v_id; END CASE; ELSE UPDATE staff SET salary = v_salary * 1.10 WHERE id = v_id; END CASE; ELSE UPDATE staff SET job = 'PREZ' WHERE id = v_id; END CASE; FETCH C1 INTO v_id, v_salary, v_years; END WHILE; CLOSE C1; END @