0% found this document useful (0 votes)
6 views

Chapter8 Examples

The document contains a series of SQL examples demonstrating various database operations such as conditional statements, loops, transactions, stored procedures, and functions. Each example illustrates different functionalities like updating budgets, managing employee records, and retrieving data based on specific criteria. The examples are structured to show practical applications of SQL in managing a sample database.

Uploaded by

riyasathsafran
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

Chapter8 Examples

The document contains a series of SQL examples demonstrating various database operations such as conditional statements, loops, transactions, stored procedures, and functions. Each example illustrates different functionalities like updating budgets, managing employee records, and retrieving data based on specific criteria. The examples are structured to show practical applications of SQL in managing a sample database.

Uploaded by

riyasathsafran
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 8

Example 8.

1
USE sample;
IF (SELECT COUNT(*)
FROM works_on
WHERE project_no = 'p1'
GROUP BY project_no ) > 3
PRINT 'The number of employees in the project p1 is 4 or more'
ELSE BEGIN
PRINT 'The following employees work for the project p1'
SELECT emp_fname, emp_lname
FROM employee, works_on
WHERE employee.emp_no = works_on.emp_no
AND project_no = 'p1'
END

Example 8.2
USE sample;
WHILE (SELECT SUM(budget)
FROM project) < 500000
BEGIN
UPDATE project SET budget = budget*1.1
IF (SELECT MAX(budget)
FROM project) > 240000
BREAK
ELSE CONTINUE
END

Example 8.3a
USE sample;
DECLARE @avg_budget MONEY, @extra_budget MONEY
SET @extra_budget = 15000
SELECT @avg_budget = AVG(budget) FROM project
IF (SELECT budget
FROM project
WHERE project_no='p1') < @avg_budget
BEGIN
UPDATE project
SET budget = budget + @extra_budget
WHERE project_no ='p1'
PRINT 'Budget for p1 increased by @extra_budget'
END
ELSE PRINT 'Budget for p1 unchanged'
Example 8.3b
-- record-oriented way to retrieve values
USE sample;
DECLARE @avg_budget MONEY;
DECLARE @extra_budget MONEY;
DECLARE @budget MONEY;
DECLARE @pr_nr CHAR(4)
DECLARE @P_cursor as CURSOR;
SET @extra_Budget = 15000;
SELECT @avg_budget = AVG(budget) FROM project;
SET @budget = 0;
SET @P_cursor = CURSOR FOR
SELECT project_no, budget FROM project;
OPEN @P_cursor;
FETCH NEXT FROM @P_cursor INTO @pr_nr, @budget
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @pr_nr
PRINT @budget
IF (SELECT budget FROM project
WHERE project_no=@pr_nr) >= @avg_budget
BEGIN
GOTO L1
END
ELSE UPDATE project
SET budget = budget + @extra_budget
WHERE project_no =@pr_nr
PRINT 'Budget for @pr_nr increased'
L1:
FETCH NEXT FROM @P_cursor INTO @pr_nr, @budget
END
CLOSE @P_cursor;
DEALLOCATE @P_cursor;
Example 8.4
USE sample;
BEGIN TRY
BEGIN TRANSACTION
insert into employee values(11111, 'Ann', 'Smith','d2');
insert into employee values(22222, 'Matthew', 'Jones','d4'); -- referential integrity error
insert into employee values(33333, 'John', 'Barrimore', 'd2');
COMMIT TRANSACTION
PRINT 'Transaction committed'
END TRY
BEGIN CATCH
ROLLBACK
PRINT 'Transaction rolled back'
END CATCH

Example 8.5
USE AdventureWorks;

DECLARE

@PageSize TINYINT = 20,

@CurrentPage INT = 4;

SELECT BusinessEntityID, JobTitle, BirthDate

FROM HumanResources.Employee

WHERE Gender = 'F'

ORDER BY JobTitle

OFFSET (@PageSize * (@CurrentPage - 1)) ROWS

FETCH NEXT @PageSize ROWS ONLY;

Example 8.6
USE sample;
GO
CREATE PROCEDURE increase_budget (@percent INT=5)
AS UPDATE project
SET budget = budget + budget*@percent/100;

Example 8.7
USE sample;
EXECUTE increase_budget 10;

Example 8.8
USE sample;
GO
CREATE PROCEDURE modify_empno (@old_no INTEGER, @new_no INTEGER)
AS UPDATE employee
SET emp_no = @new_no
WHERE emp_no = @old_no
UPDATE works_on
SET emp_no = @new_no
WHERE emp_no = @old_no

Example 8.9
USE sample;
GO
CREATE PROCEDURE delete_emp @employee_no INT, @counter INT OUTPUT
AS SELECT @counter = COUNT(*)
FROM works_on
WHERE emp_no = @employee_no
DELETE FROM employee
WHERE emp_no = @employee_no
DELETE FROM works_on
WHERE emp_no = @employee_no

Example 8.10
USE sample;
GO

CREATE PROCEDURE employees_in_dept (@dept CHAR(4))

AS SELECT emp_no, emp_lname

FROM employee

WHERE dept_no IN (SELECT @dept FROM department

GROUP BY dept_no)

Example 8.11
USE sample;

EXEC employees_in_dept 'd1'

WITH RESULT SETS

( ([EMPLOYEE NUMBER] INT NOT NULL,

[NAME OF EMPLOYEE] CHAR(20) NOT NULL));

Example 8.12
-- This function computes additional total costs that arise
-- if budgets of projects increase
USE sample;
GO
CREATE FUNCTION compute_costs (@percent INT =10)
RETURNS DECIMAL(16,2)
BEGIN
DECLARE @additional_costs DEC (14,2), @sum_budget dec(16,2)
SELECT @sum_budget = SUM (budget) FROM project
SET @additional_costs = @sum_budget * @percent/100
RETURN @additional_costs
END

Example 8.13
USE sample;
SELECT project_no, project_name
FROM project
WHERE budget < dbo.compute_costs(25)

Example 8.14
USE sample;
GO
CREATE FUNCTION employees_in_project (@pr_number CHAR(4))
RETURNS TABLE
AS RETURN (SELECT emp_fname, emp_lname
FROM works_on, employee
WHERE employee.emp_no = works_on.emp_no
AND project_no = @pr_number)

Example 8.15
USE sample;
SELECT *
FROM employees_in_project('p3')

Example 8.16
CREATE FUNCTION dbo.fn_getjob(@empid AS INT)
RETURNS TABLE AS
RETURN
SELECT job
FROM works_on
WHERE emp_no = @empid
AND job IS NOT NULL AND project_no = 'p1';

Example 8.17
-- use CROSS APPLY
SELECT E.emp_no, emp_fname, emp_lname, job
FROM employee as E
CROSS APPLY dbo.fn_getjob(E.emp_no) AS A
-- use OUTER APPLY
SELECT E.emp_no, emp_fname, emp_lname, job
FROM employee as E
OUTER APPLY dbo.fn_getjob(E.emp_no) AS A

Example 8.18
CREATE TYPE departmentType AS TABLE
(dept_no CHAR(4),dept_name CHAR(25),location CHAR(30));
GO
CREATE TABLE #dallasTable
(dept_no CHAR(4),dept_name CHAR(25),location CHAR(30));
GO
CREATE PROCEDURE insertProc
@Dallas departmentType READONLY
AS SET NOCOUNT ON
INSERT INTO #dallasTable (dept_no, dept_name, location)
SELECT * FROM @Dallas
GO
DECLARE @Dallas AS departmentType;
INSERT INTO @Dallas( dept_no, dept_name, location)
SELECT * FROM department
WHERE location = 'Dallas'
EXEC insertProc @Dallas;

You might also like