CS8481 - Database Management Systems Lab Manualfinal
CS8481 - Database Management Systems Lab Manualfinal
Aim:
To create a database and apply Procedures and Functions
PL/SQL - Procedures
A subprogram is a program unit/module that performs a particular task. These subprograms are
combined to form larger programs. This is basically called the 'Modular design'. A subprogram can
be invoked by another subprogram or program which is called the calling program.
At the schema level, subprogram is a standalone subprogram. It is created with the CREATE
PROCEDURE or the CREATE FUNCTION statement. It is stored in the database and can be deleted
with the DROP PROCEDURE or DROP FUNCTION statement.
A subprogram created inside a package is a packaged subprogram. It is stored in the database and
can be deleted only when the package is deleted with the DROP PACKAGE statement. We will
discuss packages in the chapter 'PL/SQL - Packages'.
PL/SQL subprograms are named PL/SQL blocks that can be invoked with a set of parameters.
PL/SQL provides two kinds of subprograms −
Functions − These subprograms return a single value; mainly used to compute and return a
value.
Procedures − These subprograms do not return a value directly; mainly used to perform an
action.
This chapter is going to cover important aspects of a PL/SQL procedure. We will discuss PL/SQL
function in the next chapter.
Each PL/SQL subprogram has a name, and may also have a parameter list. Like anonymous PL/SQL
blocks, the named blocks will also have the following three parts −
1
S.No Parts & Description
Declarative Part
1 It is an optional part. However, the declarative part for a subprogram does not start with the
DECLARE keyword. It contains declarations of types, cursors, constants, variables, exceptions,
and nested subprograms. These items are local to the subprogram and cease to exist when the
subprogram completes execution.
Executable Part
2
This is a mandatory part and contains statements that perform the designated action.
Exception-handling
3
This is again an optional part. It contains the code that handles run-time errors.
Creating a Procedure
A procedure is created with the CREATE OR REPLACE PROCEDURE statement. The simplified
syntax for the CREATE OR REPLACE PROCEDURE statement is as follows −
Where,
Example
The following example creates a simple procedure that displays the string 'Hello World!' on the
screen when executed.
2
When the above code is executed using the SQL prompt, it will produce the following result −
Procedure created.
The above procedure named 'greetings' can be called with the EXECUTE keyword as −
EXECUTE greetings;
Hello World
BEGIN
greetings;
END;
/
Hello World
A standalone procedure is deleted with the DROP PROCEDURE statement. Syntax for deleting a
procedure is −
You can drop the greetings procedure by using the following statement −
The following table lists out the parameter modes in PL/SQL subprograms −
3
S.No Parameter Mode & Description
IN
An IN parameter lets you pass a value to the subprogram. It is a read-only parameter. Inside
1 the subprogram, an IN parameter acts like a constant. It cannot be assigned a value. You can
pass a constant, literal, initialized variable, or expression as an IN parameter. You can also
initialize it to a default value; however, in that case, it is omitted from the subprogram call. It is
the default mode of parameter passing. Parameters are passed by reference.
OUT
2 An OUT parameter returns a value to the calling program. Inside the subprogram, an OUT
parameter acts like a variable. You can change its value and reference the value after assigning
it. The actual parameter must be variable and it is passed by value.
IN OUT
An IN OUT parameter passes an initial value to a subprogram and returns an updated value to
3 the caller. It can be assigned a value and the value can be read.
The actual parameter corresponding to an IN OUT formal parameter must be a variable, not a
constant or an expression. Formal parameter must be assigned a value. Actual parameter is
passed by value.
This program finds the minimum of two values. Here, the procedure takes two numbers using the IN
mode and returns their minimum using the OUT parameters.
DECLARE
a number;
b number;
c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGI
N
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c); END;
/
When the above code is executed at the SQL prompt, it produces the following result −
This procedure computes the square of value of a passed value. This example shows how we can use
the same parameter to accept a value and then return another result.
DECLARE
a number;
PROCEDURE squareNum(x IN OUT number)
IS BEGIN
x := x * x;
END;
BEGIN
a:= 23;
squareNum(a);
dbms_output.put_line(' Square of (23): ' || a); END;
/
When the above code is executed at the SQL prompt, it produces the following result −
Positional notation
Named notation
Mixed notation
Positional Notation
findMin(a, b, c, d);
In positional notation, the first actual parameter is substituted for the first formal parameter; the
second actual parameter is substituted for the second formal parameter, and so on. So, a is substituted
for x, b is substituted for y, c is substituted for z and d is substituted for m.
Named Notation
In named notation, the actual parameter is associated with the formal parameter using the arrow
symbol ( => ). The procedure call will be like the following −
5
Mixed Notation
In mixed notation, you can mix both notations in procedure call; however, the positional notation
should precede the named notation.
PL/SQL - Functions
In this chapter, we will discuss the functions in PL/SQL. A function is same as a procedure except
that it returns a value. Therefore, all the discussions of the previous chapter are true for functions too.
Creating a Function
A standalone function is created using the CREATE FUNCTION statement. The simplified syntax
for the CREATE OR REPLACE PROCEDURE statement is as follows −
Where,
Example
The following example illustrates how to create and call a standalone function. This function returns
the total number of CUSTOMERS in the customers table.
6
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
+----+----------+-----+-----------+----------+
CREATE OR REPLACE FUNCTION totalCustomers
RETURN number IS
total number(2) := 0;
BEGIN
SELECT count(*) into total
FROM customers;
RETURN total;
END;
/
When the above code is executed using the SQL prompt, it will produce the following result −
Function created.
Calling a Function
While creating a function, you give a definition of what the function has to do. To use a function, you
will have to call that function to perform the defined task. When a program calls a function, the
program control is transferred to the called function.
A called function performs the defined task and when its return statement is executed or when the
last end statement is reached, it returns the program control back to the main program.
To call a function, you simply need to pass the required parameters along with the function name and
if the function returns a value, then you can store the returned value. Following program calls the
function totalCustomers from an anonymous block −
DECLARE
c number(2);
BEGIN
c := totalCustomers();
dbms_output.put_line('Total no. of Customers: ' || c);
END;
/
When the above code is executed at the SQL prompt, it produces the following result −
7
Total no. of Customers: 6
Example
The following example demonstrates Declaring, Defining, and Invoking a Simple PL/SQL Function
that computes and returns the maximum of two values.
DECLARE
a number;
b number;
c number;
FUNCTION findMax(x IN number, y IN number)
RETURN number
IS
z number;
BEGIN
IF x > y THEN
z:= x;
ELSE
Z:= y;
END IF;
RETURN z;
END;
BEGIN
a:= 23;
b:= 45;
c := findMax(a, b);
dbms_output.put_line(' Maximum of (23,45): ' || c);
END;
/
When the above code is executed at the SQL prompt, it produces the following result −
Maximum of (23,45): 45
We have seen that a program or subprogram may call another subprogram. When a subprogram calls
itself, it is referred to as a recursive call and the process is known as recursion.
To illustrate the concept, let us calculate the factorial of a number. Factorial of a number n is defined
as −
n! = n*(n-1)!
8
= n*(n-1)*(n-2)!
...
= n*(n-1)*(n-2)*(n-3)... 1
The following program calculates the factorial of a given number by calling itself recursively −
DECLARE
num number;
factorial number;
BEGIN
num:= 6;
factorial := fact(num);
dbms_output.put_line(' Factorial '|| num || ' is ' || factorial);
END;
/
When the above code is executed at the SQL prompt, it produces the following result −
Factorial 6 is 720
Step 1
The following will create a table in Oracle. For example I will create a table for customer details.
Step 2
9
1. CREATE OR REPLACE PROCEDURE INSERTcustomer (
2. p_name CUSTOMER.NAME%TYPE,
3. p_gender CUSTOMER.GENDER%TYPE,
4. p_address CUSTOMER.ADDRESS%TYPE)
5. IS
6. BEGIN
7. INSERT INTO CUSTOMER (NAME, GENDER, ADDRESS)
8. VALUES (p_name, p_gender, p_address);
9. COMMIT;
10. END;
11. /
Step 3
Stored Procedure for an update:
Step 4
Stored Procedure for a select:
Step 5
Stored Procedure for a delete:
1. OR REPLACE PROCEDURE (
CREATE DELETEcustomer
2. IN CUSTOMER3.NAME%TYPE)
p_name
3. IS
4. BEGIN
5. FROM CUSTOMER WHERE
DELETE NAME=p_name;
6. END;
7. /
Result:
10
Ex. No: 6 TRIGGERS
Aim:
PL/SQL - Triggers
In this chapter, we will discuss Triggers in PL/SQL. Triggers are stored programs, which are
automatically executed or fired when some events occur. Triggers are, in fact, written to be executed
in response to any of the following events −
Overview
Database triggers are specialized stored programs. Oracle engine allows the definition of the
procedures, which are implicitly executed when an insert, update, or delete is issued in a table from
SQL or through the Application, and the trigger automatically executes a DML statement. They are
not called directly, but are triggered by the events in the database. They run between the time, when
you issue a command and the time, you perform the database management system action. You can
write the triggers in PL/SQL.
Introduction
Before Triggers: These triggers are fired before the SQL statement trigger (INSERT, UPDATE,
DELETE) is executed. The execution of the triggering SQL statement is stopped, depending on the
various conditions to be fulfilled in the BEFORE trigger.
After Triggers: These triggers are fired after the triggering SQL statement (INSERT, UPDATE,
DELETE) is executed. The triggering SQL statement is executed first, followed by the code of the
trigger.
ROW Trigger: The triggers are fired for each and every record, which is inserted or updated or
deleted from a table.
Statement Trigger: The trigger is fired for each row of the DML operation, being performed on a
table. We cannot access the column values for the records being inserted, updated, deleted on the
table nor the individual records.
11
PL/SQL Triggers Syntax Description
CREATE or REPLACE TRIGGER trigger_name: Creates a trigger with the given name, else
overwrites an existing trigger with the same name.
{BEFORE , AFTER }: Indicates where should trigger be fired. BEFORE trigger executes before when
statement executes before time or AFTER trigger executes, after when statement executes after time.
{INSERT , UPDATE , DELETE}: Determines the performing trigger event. More than one triggering
events can be used together, separated by OR keyword.
ON Table Name: Determines the performed trigger event in the selected table.
[Referencing {old AS old, new AS new}]: Reference the old and new values of the data, being
changed. : old is used for existing row to perform and : new is used to execute a new row to perform.
The reference names can also be changed from old (or new) to any other user-defined name. You
cannot reference the old values, when inserting a record or new values, or when deleting a record,
because they do not exist.
Note
Insert has no :OLD value (before execution) and have : NEW value (After execution).
Delete has no : OLD value but it has :NEW value.
Update has both : OLD and : NEW value.
for each row: Trigger must fire, when each row gets affected (Row Level Trigger) or just once, when
the entire SQL statement is executed (Statement Level trigger).
WHEN (condition): Valid only for row level triggers. The trigger is fired only for the rows, which
satisfy the specified condition.
There are various events on which a trigger can be written, such as:
1. System events
o Database startup and shutdown.
o Server error message events.
2. User events
o User login and logoff.
o DDL statements (CREATE, ALTER, and DROP).
o DML statements (INSERT, DELETE, and UPDATE).
Based on the above condition, we can classify the trigger into five categories: DML trigger, DDL
trigger, Compound triggers, Instead-Of triggers and System or database event triggers. Out of which,
here I am discussing mainly DDL and DML triggers.
DDL Trigger
12
DDL triggers fire, when you create, change or remove objects in a database. They support both
before and after event triggers and work at the database or schema level.
DDL event supported
alter, analyze, associate statistics, audit, comment, create, DDL, disassociate statistics, drop, grant,
noaudit, rename, revoke, truncate .
There are a number of event attribute functions, which can be used to get user, client or system
information, commonly used ones are given below:
Triggers can be defined on the table, view, schema, or database with which the event is associated.
Benefits of Triggers
Creating Triggers
13
DECLARE
Declaration-statements
BEGIN
Executable-statements
EXCEPTION
Exception-handling-statements
END;
Where,
Example
To start with, we will be using the CUSTOMERS table we had created and used in the previous
chapters −
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedaba | 2000.00 |
d
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
+----+----------+-----+-----------+----------+
14
The following program creates a row-level trigger for the customers table that would fire for
INSERT or UPDATE or DELETE operations performed on the CUSTOMERS table. This trigger
will display the salary difference between the old values and new values −
When the above code is executed at the SQL prompt, it produces the following result −
Trigger created.
OLD and NEW references are not available for table-level triggers, rather you can use them
for record-level triggers.
If you want to query the table in the same trigger, then you should use the AFTER keyword,
because triggers can query the table or change it again only after the initial changes are
applied and the table is back in a consistent state.
The above trigger has been written in such a way that it will fire before any DELETE or
INSERT or UPDATE operation on the table, but you can write your trigger on a single or
multiple operations, for example BEFORE DELETE, which will fire whenever a record will
be deleted using the DELETE operation on the table.
Triggering a Trigger
15
Let us perform some DML operations on the CUSTOMERS table. Here is one INSERT statement,
which will create a new record in the table −
When a record is created in the CUSTOMERS table, the above create trigger,
display_salary_changes will be fired and it will display the following result −
Old salary:
New salary: 7500
Salary difference:
Because this is a new record, old salary is not available and the above result comes as null. Let us
now perform one more DML operation on the CUSTOMERS table. The UPDATE statement will
update an existing record in the table −
UPDATE customers
SET salary = salary + 500
WHERE id = 2;
When a record is updated in the CUSTOMERS table, the above create trigger,
display_salary_changes will be fired and it will display the following result −
Example.1
The given DDL trigger prevents truncating the table on the schema level.
Trigger created.
Table created.
16
1. SQL> select * from salary_bk;
ERROR at line 1
Example.2
The below given trigger updates every create statement, which happens in the schema level into the
log_table.
Table created.
1. SQL>
2. CREATE OR REPLACE TRIGGER log_create_trigg
3. AFTER CREATE ON SCHEMA
4. BEGIN
5. INSERT INTO log_table
6. (user_name, event_date, detail)
7. VALUES
8. (USER, SYSDATE, 'created object is: ' || ora_dict_obj_name);
9. END;
10. /
Trigger created.
17
1. SQL> create table abc as select * from dba_users;
Table created.
These triggers fire, when a system activity occurs in the database like the login and logoff event
triggers. They are useful for auditing the information of the system access. These triggers, allow you
to track the system events and map them to the users.
Example
Table created.
Trigger created.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit
Production With the Partitioning, OLAP, Data Mining and Real Application Testing options.
C:\Users\DELL\node1>sqlplus
18
SQL*Plus: Release 11.2.0.1.0 Production on Fri Oct 19 17:39:19 2012
19
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning,
OLAP, Data Mining and Real Application Testing options:
DML Trigger
These triggers fire, when you insert, update or delete the data from a table. You can fire them once
for all the changes on a table or for each row change, using statement- or row-level trigger types,
respectively. DML triggers are useful to control DML statements. You can use these triggers to audit,
check, save and replace values before they are changed.
Example.1
Below given example inserts each record, which will be deleted from salary table into sal_deleted
table.
Table created.
SQL>
20
SQL>ed sal_delete_trig
Create or replace trigger sal_delete before deleting on salary. For each row, begin:
Trigger created.
1 row deleted.
SQL>
Example.2
The following trigger will insert the system time automatically into DOJ field, while inserting the
records into student_details table.
SQL>
Table created.
1. SQL> ed student_details_trig;
21
2.
3. create trigger student_details_trig before insert
4. on student_details for each row
5. begin
6. :new.doj := sysdate;
7. end;
8. /
9. SQL> @student_details_trig
Trigger created.
No rows selected
SYSDATE
---------
19- OCT-12
1 row created.
Example.3
Following trigger will insert each record into salupdated table before the update happens in salary
table,
22
1. SQL> create table salupdated(
2. rollno number(5),
3. empname varchar(15),
4. design varchar(15),
5. bpay number(8,2),
6. da number(6,2),
7. total number(8,2),
8. ta number(6,2));
Table created.
1. SQL> ed salupdate_trig
create or replace trigger salupdate_trig before update on salary for each row,
1. insert into salupdated values (:old.rollno, :old.empname, :old.design, :old.bpay, :old.da, :old.
netsal, :old.ta);
2. end;
3. /
4. SQL> @salupdate_trig
Trigger created.
no rows selected
3 rows updated.
23
SQL>
Example.4
Following DML trigger will raise an Application error, while trying to delete the records belonging to
Asst.Manager.
Trigger created.
ERROR at line 1:
ORA-20015: Not Delete this Row
ORA-06512: at "MAHI.NOT_DEL", line 3
ORA-04088: error during execution of trigger 'MAHI.NOT_DEL
Result:
24
Ex. No: 7 EXCEPTION HANDLING
Aim:
An error condition during a program execution is called an exception and the mechanism for
resolving such an exception is known as an exception handler. SQL Server provides TRY, CATCH
blocks for exception handling. We can put all T-SQL statements into a TRY BLOCK and the code
for exception handling can be put into a CATCH block. We can also generate user-defined errors
using a THROW block.
BEGIN TRY
/* T-SQL Statements */
END TRY
BEGIN CATCH
- Print Error OR
- Rollback Transaction
END CATCH
In exception handling all T-SQL statements are put into a try block. If all statements execute without
any error then everything is OK else control will go to the catch block.
PL/SQL - Exceptions
In this chapter, we will discuss Exceptions in PL/SQL. An exception is an error condition during a
program execution. PL/SQL supports programmers to catch such conditions using EXCEPTION
25
block in the program and an appropriate action is taken against the error condition. There are two
types of exceptions −
System-defined exceptions
User-defined exceptions
The general syntax for exception handling is as follows. Here you can list down as many exceptions
as you can handle. The default exception will be handled using WHEN others THEN −
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling goes here >
WHEN exception1 THEN
exception1-handling-statements
WHEN exception2 THEN
exception2-handling-statements
WHEN exception3 THEN
exception3-handling-statements
........
WHEN others THEN
exception3-handling-statements
END;
Example
Let us write a code to illustrate the concept. We will be using the CUSTOMERS table we had created
and used in the previous chapters −
DECLARE
c_id customers.id%type := 8;
c_name customerS.Name%type;
c_addr customers.address%type;
BEGIN
SELECT name, address INTO c_name, c_addr
FROM customers
WHERE id = c_id;
DBMS_OUTPUT.PUT_LINE ('Name: '|| c_name);
DBMS_OUTPUT.PUT_LINE ('Address: ' || c_addr);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('No such customer!');
WHEN others THEN
26
dbms_output.put_line('Error!');
END;
/
When the above code is executed at the SQL prompt, it produces the following result −
No such customer!
The above program displays the name and address of a customer whose ID is given. Since there is no
customer with ID value 8 in our database, the program raises the run-time exception
NO_DATA_FOUND, which is captured in the EXCEPTION block.
Raising Exceptions
Exceptions are raised by the database server automatically whenever there is any internal database
error, but exceptions can be raised explicitly by the programmer by using the command RAISE.
Following is the simple syntax for raising an exception −
DECLARE
exception_name EXCEPTION;
BEGIN
IF condition THEN
RAISE exception_name;
END IF;
EXCEPTION
WHEN exception_name THEN
statement;
END;
You can use the above syntax in raising the Oracle standard exception or any user-defined exception.
In the next section, we will give you an example on raising a user-defined exception. You can raise
the Oracle standard exceptions in a similar way.
User-defined Exceptions
PL/SQL allows you to define your own exceptions according to the need of your program. A user-
defined exception must be declared and then raised explicitly, using either a RAISE statement or the
procedure DBMS_STANDARD.RAISE_APPLICATION_ERROR.
DECLARE
my-exception EXCEPTION;
Example
27
The following example illustrates the concept. This program asks for a customer ID, when the user
enters an invalid ID, the exception invalid_id is raised.
DECLARE
c_id customers.id%type := &cc_id;
c_name customerS.Name%type;
c_addr customers.address%type;
-- user defined exception
ex_invalid_id EXCEPTION;
BEGIN
IF c_id <= 0 THEN
RAISE ex_invalid_id;
ELSE
SELECT name, address INTO c_name, c_addr
FROM customers
WHERE id = c_id;
DBMS_OUTPUT.PUT_LINE ('Name: '|| c_name);
DBMS_OUTPUT.PUT_LINE ('Address: ' || c_addr);
END IF;
EXCEPTION
WHEN ex_invalid_id THEN
dbms_output.put_line('ID must be greater than zero!');
WHEN no_data_found THEN
dbms_output.put_line('No such customer!');
WHEN others THEN
dbms_output.put_line('Error!');
END;
/
When the above code is executed at the SQL prompt, it produces the following result −
Pre-defined Exceptions
PL/SQL provides many pre-defined exceptions, which are executed when any database rule is
violated by a program. For example, the predefined exception NO_DATA_FOUND is raised when a
SELECT INTO statement returns no rows. The following table lists few of the important pre-defined
exceptions −
28
Error
It is raised when a null object is automatically
ACCESS_INTO_NULL 06530 -6530
assigned a value.
It is raised when none of the choices in the WHEN
CASE_NOT_FOUND 06592 -6592 clause of a CASE statement is selected, and there is
no ELSE clause.
It is raised when a program attempts to apply
collection methods other than EXISTS to an
COLLECTION_IS_NULL 06531 -6531 uninitialized nested table or varray, or the program
attempts to assign values to the elements of an
uninitialized nested table or varray.
It is raised when duplicate values are attempted to
DUP_VAL_ON_INDEX 00001 -1
be stored in a column with unique index.
It is raised when attempts are made to make a
INVALID_CURSOR 01001 -1001 cursor operation that is not allowed, such as closing
an unopened cursor.
It is raised when the conversion of a character
INVALID_NUMBER 01722 -1722 string into a number fails because the string does
not represent a valid number.
It is raised when a program attempts to log on to
LOGIN_DENIED 01017 -1017
the database with an invalid username or password.
It is raised when a SELECT INTO statement
NO_DATA_FOUND 01403 +100
returns no rows.
It is raised when a database call is issued without
NOT_LOGGED_ON 01012 -1012
being connected to the database.
PROGRAM_ERROR 06501 -6501 It is raised when PL/SQL has an internal problem.
It is raised when a cursor fetches value in a variable
ROWTYPE_MISMATCH 06504 -6504
having incompatible data type.
It is raised when a member method is invoked, but
SELF_IS_NULL 30625 -30625
the instance of the object type was not initialized.
It is raised when PL/SQL ran out of memory or
STORAGE_ERROR 06500 -6500
memory was corrupted.
It is raised when a SELECT INTO statement
TOO_MANY_ROWS 01422 -1422
returns more than one row.
It is raised when an arithmetic, conversion,
VALUE_ERROR 06502 -6502
truncation, or sizeconstraint error occurs.
It is raised when an attempt is made to divide a
ZERO_DIVIDE 01476 1476
number by zero.
In a System Defined Exception the exceptions (errors) are generated by the system.
29
Example
Output
Output
Error Occur
Error Occur that is:
Number Is Even
30
Here 60000 denotes the error number and 5 denotes the state to associate with the message.
The following are system functions and the keyword used within a catch block:
1. @@ERROR
2. ERROR_NUMBER()
3. ERROR_STATE()
4. ERROR_LINE()
5. ERROR_MESSAGE()
6. ERROR_PROCEDURE()
7. ERROR_SEVERITY()
8. RAISERROR()
9. GOTO()
Now we will see some examples to help understand all these functions and keywords.
First create a table and enter some value into the table as in the following:
31
Example 1: (@@ERROR)
@@ERROR return the error number for last executed T-SQL statements. It returns 0 if the previous
Transact-SQL statement encountered no errors else return an error number.
Output:
Example 2 (ERROR_NUMBER)
ERROR_NUMBER() returns the error number that caused the error. It returns zero if called outside
the catch block.
1. BEGIN TRY
2.
3. Update Employee set Salary=19000 Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6. SELECT ERROR_NUMBER() AS ErrorNumber;
7. END CATCH;
8. GO
Output
32
Now a question develops of what is diff @@ERROR and ERROR_NUMBER. Let me explain.
1. ERROR_NUMBER can only be used in a catch block, outside a catch block it returns Null
but @@ERROR can be used inside or outside the catch block (see Example 1).
2. ERROR_NUMBER is a contrast to @@ERROR, that only returns the error number in the
statement immediately after the one that causes an error, or the first statement of a CATCH
block.
Now we will see an example and observe the differences between them.
1. BEGIN TRY
2.
3. Update Employee set Salary=19000 Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6.
7. SELECT ERROR_NUMBER() AS ErrorNumber;
8. print @@ERROR
9. END CATCH;
10. GO
Output
1. BEGIN TRY
2.
3. Update Employee set Salary=19000 Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6. print @@ERROR
7. SELECT ERROR_NUMBER() AS ErrorNumber;
8.
9. END CATCH;
10. GO
Output
33
Example 3 (ERROR_MESSAGE)
ERROR_MESSAGE returns the message text of the error that caused the error. The return type of
ERROR_MESSAGE is nvarchar(4000).
1. BEGIN TRY
2.
3. Update Employee set Salary=19000 Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6. SELECT ERROR_MESSAGE() AS ErrorMsg;
7.
8. END CATCH;
9. GO
Output
Example 4 ( ERROR_STATE)
ERROR_STATE returns the state number of the error. The return type of ERROR_STATE is INT.
1. BEGIN TRY
2.
3. SELECT SALARY + First_Name From Employee Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6. SELECT ERROR_STATE() AS ErrorState , ERROR_MESSAGE() ErrorMsg ;
7. END CATCH;
8. GO
Output
34
Example 5 (ERROR_LINE)
ERROR_LINE returns the line number at which an error occurred. The return type of ERROR_LINE
is INT.
1. BEGIN TRY
2. SELECT SALARY + First_Name From Employee Where Emp_IID=5
3. END TRY
4. BEGIN CATCH
5. SELECT ERROR_STATE() AS ErrorLine;
6. END CATCH;
7. GO
Output
Example 6 (ERROR_PROCEDURE)
ERROR_PROCEDURE returns the name of the Stored Procedure or trigger of where an error
occurred. The return type of ERROR_PROCEDURE is nvarchar(128).
Return value
Return value returns the Stored Procedure Name if an error occurs in a Stored Procedure or trigger
and the catch block is called.
It returns NULL if the error did not occur within a Stored Procedure or trigger or it isb called outside
the scope of a CATCH block.
1. Exec My_Proc
35
Output
Example 7 (ERROR_SEVERITY)
ERROR_SEVERITY returns the severity of the error. The return type of ERROR_SEVERITY
is INT.
1. BEGIN TRY
2. SELECT SALARY + First_Name From Employee Where Emp_IID=5
3. END TRY
4. BEGIN CATCH
5. SELECT ERROR_SEVERITY() AS ErrorSeverity;
6. END CATCH;
Output
The severity level of an error message provides an indication of the type of problem that Microsoft®
SQL Server encountered. In the preceding example the Severity Level is 16. That means that the error
can be removed by the user.
Example 8 (RAISERROR)
RAISEERROR is used to generate an error message and initiates error processing for the session.
36
4. BEGIN CATCH
5. RAISERROR(N'An Error Is Occur',16,3);
6. END CATCH;
Output
In RAISERROR(N'An Error Is Occur',16,3) the first argument represents the error messagethe ,
second argument represents the Severity Level and the last argument represents the Error State.
Example 9 (GOTO)
GOTO causes a jump to a specific step or statement. It alters the flow of execution to a label. We
declare some labels in batch and alter we can move at a specific label. GOTO can exist within a
conditional control-of-flow statements, statement blocks, or procedures, but it cannot go to a label
outside the batch. GOTO cannot be used to jump into a TRY or CATCH scope.
Output
Goto exercise
Var Is Even
Example 10
1. BEGIN TRY
2. SELECT SALARY + First_Name From Employee Where Emp_IID=5
3. END TRY
4. BEGIN CATCH
5. SELECT ERROR_STATE() AS Error_Stat,ERROR_SEVERITY() AS ErrorSeverity, ERRO
R_LINE() as ErrorLine, ERROR_NUMBER() AS ErrorNumber, ERROR_MESSAGE() AS
ErrorMsg;
6. END CATCH;
37
Output
Exception handling is mainly used for Transaction Management. Let us see an example.
Output
38
3. When implementing a DML Query (insert, update or delete) for for an checking the error and
to handle it.
Result:
39
The exception handling program is executed successfully.
40
Ex.No: 8 DATABASE DESIGN USING ER MODELING, NORMALIZATION AND
IMPLEMENTATION FOR ANY APPLICATION
What is ER Modeling?
Entity Relationship Modeling (ER Modeling) is a graphical approach to database design. It uses
Entity/Relationship to represent real world objects.
An Entity is a thing or object in real world that is distinguishable from surrounding environment. For
example each employee of an organization is a separate entity. Following are some of major
characteristics of entities.
Enhanced Entity Relationship (EER) Model is a high level data model which provides extensions to
original Entity Relationship (ER) model. EER Models supports more details design. EER Modeling
emerged as a solution for modeling highly complex databases.
EER uses UML notation. UML is the acronym for Unified Modeling Language; it is a general
purpose modeling language used when designing object oriented systems. Entities are represented as
class diagrams. Relationships are represented as associations between entities. The diagram shown
below illustrates an ER diagram using the UML notation.
Now you may think why use ER modeling when we can simply create the database and all of its
objects without ER modeling? One of the challenges faced when designing database is the fact that
designers, developers and end-users tend to view data and its usage differently. If this situation is left
unchecked, we can end up producing a database system that does not meet the requirements of the
users.
100
Communication tools understood by all stakeholders(technical as well non-technical users) are
critical in producing database systems that meet the requirements of the users. ER models are
examples of such tools.
ER diagrams also increase user productivity as they can be easily translated into relational tables.
Let's now work with the MyFlix Video Library database system to help understand the concept of ER
diagrams. We will using this database for all hand-on in the remainder of this tutorials
MyFlix is a business entity that rents out movies to its members. MyFlix has been storing its records
manually. The management now wants to move to a DBMS
Let's look at the steps to develop EER diagram for this database-
1. Identify the entities and determine the relationships that exist among them.
2. Each entity, attribute and relationship, should have appropriate names that can be easily
understood by the non-technical people as well.
3. Relationships should not be connected directly to eachother. Relationships should connect
entities.
4. Each attribute in a given entity should have a unique name.
The following holds true regarding the interactions between the two entities.
From the above scenario, we can see that the nature of the relationship is many-to-many. Relational
databases do not support many-to-many relationships. We need to introduce a junction entity.
This is the role that the MovieRentals entity plays. It has a one-to-many relationship with the
members table and another one-to-many relationship with movies table.
101
Movies and categories entities
A movie can only belong to one category but a category can have more than one movie.
We can deduce from this that the nature of the relation between categories and movies table is one-to-
many.
A member can only have one account but can make a number of payments.
We can deduce from this that the nature of the relationship between members and payments entities is
one-to-many.
Double click on Add Diagram button to open the workspace for ER diagrams.
102
103
Following window appears
104
Let's look at the two objects that we will work with.
The table object allows us to create entities and define the attributes associated with the
particular entity.
The place relationship button allows us to define relationships between entities.
Membership number
Full names
Gender
Date of birth
Physical address
Postal address
Next ,
105
1. Change table 1 to Members
2. Edit the default idtable1 to membership_number
3. Click on the next line to add the next field
4. Do the same for all the attributes identified in members' entity.
Your diagram workspace should now look like the one shown below.
106
Lets create relationship between Members and Movie Rentals
Repeat above steps for other relationships. Your ER diagram should now look like this -
107
Summary
ER Diagrams play a very important role in the database designing process. They serve as a
non-technical communication tool for technical and non-technical people.
Entities represent real world things; they can be conceptual as a sales order or physical such as
a customer.
All entities must be given unique names.
ER models also allow the database designers to identify and define the relations that exist
among entities.
What is Normalization?
Normalization is a database design technique which organizes tables in a manner that reduces
redundancy and dependency of data.
It divides larger tables to smaller tables and links them using relationships.
The inventor of the relational model Edgar Codd proposed the theory of normalization with the
introduction of First Normal Form, and he continued to extend theory with Second and Third Normal
Form. Later he joined with Raymond F. Boyce to develop the theory of Boyce-Codd Normal Form.
108
Theory of Data Normalization in SQL is still being developed further. For example, there are
discussions even on 6thNormal Form. However, in most practical applications, normalization
achieves its best in 3rd Normal Form. The evolution of Normalization theories is illustrated below-
Assume a video library maintains a database of movies rented out. Without any normalization, all
information is stored in one table as shown below.
Table 1
1NF Example
109
Table 1: In 1NF Form
What is a KEY?
A KEY is a value used to identify a record in a table uniquely. A KEY could be a single column or
combination of multiple columns
Note: Columns in a table that are NOT used to identify a record uniquely are called non-key columns.
A composite key is a primary key composed of multiple columns used to identify a record uniquely
In our database, we have two people with the same name Robert Phil, but they live in different
places.
110
Hence, we require both Full Name and Address to identify a record uniquely. That is a composite
key.
Rule 1- Be in 1NF
Rule 2- Single Column Primary Key
It is clear that we can't move forward to make our simple database in 2nd Normalization form unless
we partition the table above.
Table 1
Table 2
We have divided our 1NF table into two tables viz. Table 1 and Table2. Table 1 contains member
information. Table 2 contains information on movies rented.
We have introduced a new column called Membership_id which is the primary key for table 1.
Records can be uniquely identified in Table 1 using membership id
111
Database - Foreign Key
112
Why do you need a foreign key?
You will only be able to insert values into your foreign key that exist in the unique key in the parent
table. This helps in referential integrity.
The above problem can be overcome by declaring membership id from Table2 as foreign key of
membership id from Table1
Now, if somebody tries to insert a value in the membership id field that does not exist in the parent
table, an error will be shown!
A transitive functional dependency is when changing a non-key column, might cause any of the other
non-key columns to change
Consider the table 1. Changing the non-key column Full Name may change Salutation.
113
3NF (Third Normal Form) Rules
Rule 1- Be in 2NF
Rule 2- Has no transitive functional dependencies
To move our 2NF table into 3NF, we again need to again divide our table.
3NF Example
TABLE 1
Table 2
Table 3
We have again divided our tables and created a new table which stores Salutations.
There are no transitive functional dependencies, and hence our table is in 3NF
In Table 3 Salutation ID is primary key, and in Table 1 Salutation ID is foreign to primary key in
Table 3
Now our little example is at a level that cannot further be decomposed to attain higher forms of
normalization. In fact, it is already in higher normalization forms. Separate efforts for moving into
next levels of normalizing data are normally needed in complex databases. However, we will be
discussing next levels of normalizations in brief in the following.
114
Boyce-Codd Normal Form (BCNF)
Even when a database is in 3rd Normal Form, still there would be anomalies resulted if it has more
than one Candidate Key.
If no database table instance contains two or more, independent and multivalued data describing the
relevant entity, then it is in 4th Normal Form.
A table is in 5th Normal Form only if it is in 4NF and it cannot be decomposed into any number of
smaller tables without loss of data.
6th Normal Form is not standardized, yet however, it is being discussed by database experts for some
time. Hopefully, we would have a clear & standardized definition for 6th Normal Form in the near
future...
Project Title:-
Case study
Current system:
All the Transaction(books issues & books returned) are manualy recorded(registars.)
Students search books by racks it so time consuming
And there is no arrangement.
Also threat of losing recorde.
115
-to record every transaction in computerized system so that problem such as record file missing
won’t happen again
Backgroud of Project
Library Management system is an application refer to other library system and is suitable to use
by small and medium size libray .
It is use by librarian and libray admin to manage the library using a computerized system.
The system was designed to help librain record every book transcation so that the problem such as
file missing will not happened again.
Design view
The library has the following tables in its database;
NORAMALIZATION OF TABLE
Why Normalization:
Database normalization is the process of removing redundant data from your tables in
order to improve storage efficiency, data integrity, and scalability.
Normalization generally involves splitting existing tables into multiple ones, which must be
re-joined or linked each time a query is issued.
116
nd
2 normal form
A table is in first normal form and each non-key field is functionally dependent upon primary
key.
Now we'll take the table above and design new tables that will eliminate the repeted
date in non key _field
To decide what fields belong together in a table, think about which field
determines the
values in other fields.
Create a table for those fields and enter the sample data.
ink about what the primary key for each table would be and about
the relationship between the tables.
ark the primary key for each table and make sure that you do not have repeated data in
non-key fields.
ird normal form (3NF) requires that there are no functional dependencies of non-
key attributes on something other than a candidate key.
of the non primary-key attributes are mutually independent
ere should not be transitive depeinces.
In the ISSUE Table there is repating book_id . A student has issued 3 books.
117
dependent on the primary key StudID
We can create two other relations from Student Table one is Department fields
are fully dependent on the primary keys DEp_id
DEp_id Dep_name
11 CS & IT Department
22 Education Department
33 Economics Department
44 Laaw Department
118
After 3rd Normalization
Staff table
Staff conatact
Student table:
119
Normalization End
IS BOOK
Design view
Records
120
nd
2 table Issues
Design view
Record
121
rd
3 table student
Design view
Record view
122
Student contact Design
view
Record
123
Record view
Return table
124
Record view
125
Design view
Record view
126
127
Books
PK book_id
PK
ISBN
book name
book edition book
Rack_no
authorname
RETURN STUDENT
PK student_id
PK return _id
student_name
book_id
issue-date
expairy -date
student_dep
dep_no
issue_id
student_id
student contact
STAFF
PK std_id
PK staff_id
address
staff-name streeet
phone state
staff-gender
E-mail
designation contact_no
designation _id
DEPARTMENT
staff contact
PK dep_no
PK staff_id
dep_name
address
street
state
E-mail
contact_no
128
Relational Model of ERD
Staff contact
Staff
Designation
Designation_id Designation
Student contact
Student
Department
Book
129
ISSUEs
RETURN
130
Ex.No: 9 CONNECTING TO ORACLE DATABASE USING C#
Aim:
Introduction
Oracle is the most widely used database system available in the market. And on the other
hand if we talk about the .Net framework, it’s a software framework developed by the
software giant Microsoft (we all know this), it includes a large class library known as the
Framework Class Library (FCL) and provides language interoperability across several
programming languages.
Prerequisites
1. Microsoft Visual Studio 2008 or higher (I’ll be using Visual Studio 2012).
2. Oracle database 9.2 or higher or Oracle Database XE
3. Install Oracle Data Access Component (ODAC)
http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
Moving Forward
Once you have installed ODAC, you must look for the following assembly files.
1. Go to Solution Explorer
2. Right-click and select Add Reference
3. Click on Extensions
4. Select the above mentioned files and click OK
Go to the web.config file and you can see the following code.
<assemblies>
PublicKeyToken=*************”/>
</ assemblies>
131
And you can also see a folder name, bin, that has already been created in the Solution
Explorer.
You must understand the following details before creating TNS entries.
This SQL query can help you determine the host name,
2. You need to know the Service name. You can find it in tnsnames.ora. This allows you
to register an instance with the listener.
3. Third is the user id and password.
4. Don’t forget to add "using Oracle.DataAccess.Client;" namespace.
1. using System;
2. using System.Collections.Generic;
3. using System.Linq;
4. using System.Web;
5. using System.Web.UI;
6. using System.Web.UI.WebControls;
7. using Oracle.DataAccess.Client;
8. using System.Data; & nbsp;
9. public partial class _Default: System.Web.UI.Page {
10. //creating TNS entries
11. string oradb = "Data Source=(DESCRIPTION =" + "(ADDRESS = (PROTOCOL
= TCP)(HOST = Your host name)(PORT = 1521))" + "(CONNECT_DATA =" + "(S
132
ERVER = DEDICATED)" + "(SERVICE_NAME = XE)));" + "User Id= your user id
;Password=<strong>******</strong>;";
12. protected void Page_Load(object sender, EventArgs e) {}
13. protected void btn_Click(object sender, EventArgs e) {
14. OracleConnection conn = new OracleConnection(oradb);
15. conn.Open();
16. Response.Write("Connected to Oracle" + conn.ServerVersion);
17. // Close and Dispose OracleConnection object
18. conn.Close();
19. conn.Dispose();
20. Response.Write("Disconnected");
21. }
22. }
Remarks
Output
133
Ex. No: 10 INVENTORY CONTROL SYSTEM.
AIM:
To develop a Inventory Control System using Oracle as s back end(data base) and Microsoft
Visual basic as a front end.
TABLE CREATION:
TABLE NAME:SUPPLIER
Table created.
1 row created.
1 row created.
TABLE NAME:ITEM
Table created.
1 row created.
1 row created.
SQL> COMMIT;
Commit complete.
CODING
FORM1:
Form3.Show
134
End Sub
Form2.Show
End Sub
FORM2:
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("supno") = Text1.Text
Adodc1.Recordset.Fields("supname") = Text2.Text
Adodc1.Recordset.Fields("supdate") = Text3.Text
Adodc1.Recordset.Fields("price") = Text4.Text
Adodc1.Recordset.Fields("quantity") = Text5.Text
Adodc1.Recordset.Fields("item_name") = Text6Text
Adodc1.Recordset.Update
End Sub
Form3.Show
End Sub
Adodc1.Recordset.Delete
Adodc1.Recordset.Update
End Sub
Unload Me
135
End Sub
Adodc1.Recordset.MoveNext
Else
End If
End Sub
Adodc1.Recordset.MoveFirst
End Sub
Adodc1.Recordset.MoveLast
End Sub
Adodc1.Recordset.MovePrevious
Else
End If
End Sub
Form1.Show
150
End Sub
FORM3:
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("itemno") = Text1.Text
Adodc1.Recordset.Fields("item_name") = Text2.Text
Adodc1.Recordset.Fields("price") = Text4.Text
Adodc1.Recordset.Fields("quat_available") = Text5.Text
Adodc1.Recordset.Update
End Sub
Form2.Show
End Sub
Adodc1.Recordset.Delete
Adodc1.Recordset.Update
End Sub
Unload Me
End Sub
151
Private Sub Command5_Click()
Adodc1.Recordset.MoveNext
Else
End If
End Sub
Adodc1.Recordset.MoveFirst
End Sub
Adodc1.Recordset.MoveLast
End Sub
Adodc1.Recordset.MovePrevious
Else
End If
End Sub
Form1.Show
End Sub
152
SCREEN SHOTS:
HOME PAGE
SUPPLIER FORM
153
ITEM FORM
Result:
Thus the Inventory Control System Mini project has been implemented and executed
successfully.
154