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

Dbms Lab - Print

Uploaded by

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

Dbms Lab - Print

Uploaded by

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

Ex.No.

:1

DATA DEFINITION COMMANDS, DATA MANIPULATION COMMANDS FOR


INSERTING, DELETING, UPDATING AND RETRIEVING TABLES AND
TRANSACTION CONTROL STATEMENTS

SQL:

Structured query language pronounced as (SEQUEL). This language is used to communicate


to oracle database.

Database Management System (DBMS):

DBMS is software it helps to manage the database. It performs the following activities very
easily.

 Inserting the new data


 Updating the exiting data
 Deleting unnecessary data
 Retrieving the required data

Examples of RDBMS:

 ORACLE
 SQL SERVER
 DB2
 MYSQL
 SYBASE
 TERA DATA
 MS ACCESS

Structured Query Language (SQL)

The SQL language is subdivided according to their functions as follows

1. DDL - Data Definition Language DML Data Manipulation Language


2. DRL/DQL - Data Retrieval Language / Data Query Language
3. DCL - Data Control Language
4. TCL Transaction Control

1
Data Definition Language (DDL):

Data Definition Language (DDL) or Schema Definition Language, statements are used to
define the database structure or schema.

 CREATE - to create objects in the database


 ALTER - alters the structure of the database DROP - delete objects from the database
 TRUNCATE - remove all records from a table, including all spaces allocated for the
records are removed
 COMMENT - add comments to the data dictionary
 RENAME - rename an object

Transaction Control (TCL):

Transaction Control (TCL) statements are used to manage the changes made by DML
statements. It allows statements to be grouped together into logical transactions.

 COMMIT - save work done


 SAVEPOINT - identify a point in a transaction to which you can later roll back
 ROLLBACK - restore database to original since the last COMMIT
 SET TRANSACTION - Change transaction options like isolation level and what
rollback segment to use

Data Types

SQL data type is an attribute that specifies type of data of any object. Each column, variable
and expression has related data type in SQL.

You would use these data types while creating your tables. You would choose a particular
data type for a table column based on your requirement.

SQL Server offers six categories of data types for your use.

Exact Numeric Data Types

Data Type From To


bigint - 9,223,372,036,854,775,808 9,223,372,036,854,775,807
int -2,147,483,648 2,147,483,647
smallint -32,768 32,767

2
tinyint 0 255
bit 0 1
decimal -10^38 +1 10^38 -1
numeric -10^38 +1 10^38 -1
money -922,337,203,685,477.5808 +922,337,203,685,477.5807
smallmoney -214,748.3648 +214,748.3647

Approximate Numeric Data Types

Data Type From To


float -1.79E+308 1.79E +308
real -3.40E+38 3.40E +38

Date and Time Data Types

Data Type From To

datetime Jan 1, 1753 Dec31, 9999

smalldatetime Jan 1, 1900 Jun 6,2079

date Storesa datelikeJune 30,1991

time Storesatime of daylike 12:30 P.M.

Note: Here, datetime has 3.33 milliseconds accuracy where as smalldatetime has 1 minute
accuracy.
Character Strings Data Types

Data Type Description


Maximumlengthof8,000characters.(Fixedlengthnon- Unicode
char
characters)

varchar Maximumof8,000characters.(Variable-lengthnon-Unicode data).


Maximumlengthof231characters,Variable-lengthnon- Unicode data
varchar(max) (SQL Server 2005 only).
Variable-lengthnon-Unicodedatawithamaximumlengthof
text 2,147,483,647 characters.

3
Unicode Character Strings Data Types

Data Type Description


nchar Maximumlengthof4,000characters.(Fixedlength Unicode)
nvarchar Maximumlengthof4,000characters.(VariablelengthUnicode)
Maximumlengthof231characters(SQLServer2005only).(Variable length
nvarchar(max)
Unicode)
ntext Maximumlengthof1,073,741,823characters.(Variablelength Unicode )

Binary Data Types

Data Type Description


binary Maximumlengthof8,000bytes (Fixed-lengthbinarydata)
varbinary Maximumlengthof8,000bytes.(Variablelengthbinarydata)
Maximumlengthof231bytes(SQLServer2005only).(Variable length
varbinary(max)
Binary data)
image Maximumlengthof length BinaryData)

Misc Data Types

Data Type Description


StoresvaluesofvariousSQLServer-supporteddatatypes,except text, ntext,
sql_variant
and timestamp.
Storesadatabase-wideuniquenumberthat getsupdatedeverytime a row gets
timestamp
updated
uniqueidentifier Storesa globallyuniqueidentifier(GUID)
StoresXMLdata.Youcanstorexmlinstancesinacolumnora variable (SQL
xml
Server 2005 only).
cursor Referencetoa cursorobject
table Stores aresultset forlaterprocessing

Operators
An operator is a reserved word or a character used primarily in an SQL statement's WHERE
clause to perform operation(s), such as comparisons and arithmetic operations.
Operators are used to specify conditions in an SQL statement and to serve as conjunctions for
multiple conditions in a statement.
 Arithmetic operators
 Comparison operators
 Logical operators
 Operators used to negate conditions

4
SQL Arithmetic Operators:

Operator Description Example

+ Addition-Addsvaluesoneithersideofthe operator a+bwill give 30

Subtraction-Subtractsrighthandoperandfrom left hand


- a-bwill give-10
operand

Multiplication-Multipliesvaluesoneithersideof the
* a*bwill give200
operator

/ Division-Divideslefthandoperandbyrighthand operand b/awill give 2

Modulus-Divides lefthandoperandbyrighthand operand


% b % a willgive 0
and returns remainder

SQL Comparison Operators:

Operator Description Example

Checksifthevaluesoftwooperandsareequalor not, if yes


= (a=b) is not true
then condition becomes true.
Checksifthevaluesoftwooperandsareequalor not, if values
!= (a!=b) is true
are not equal then condition becomes true.
Checksifthevaluesoftwooperandsareequalor not, if values
<> (a<>b) is true
are not equal then condition becomes true.
Checksifthevalueofleftoperandisgreaterthan the value of
> (a>b) is not true
right operand, if yes then condition becomes true.
Checksifthevalueofleftoperandislessthanthe value of right
< (a<b) istrue.
operand, if yes then condition becomes true.
Checksifthevalueofleftoperandisgreaterthan or equalto
>= (a>=b) is not true
thevalueofrightoperand,ifyes then condition becomes true.
Checksifthevalueofleftoperandislessthanor equal to the
<= (a<=b) is true
value of right operand, if yes then condition becomes true.
Checksifthevalueofleftoperandisnotlessthan the value of
!< (a!<b) isfalse
right operand, if yes then condition becomes true.
Checksifthevalueofleftoperandisnotgreater than the value
!> (a!>b) is true
of right operand, if yes then condition becomes true.

5
SQL Logical Operators:

Operator Description

ALL TheALLoperatorisusedtocompareavaluetoallvalues in another value set.

TheANDoperatorallowstheexistenceofmultipleconditionsin an SQL
AND
statement's WHERE clause.

TheANYoperatorisusedtocompareavaluetoanyapplicable value in the list


ANY
according to the condition.

TheBETWEENoperatorisusedtosearchforvaluesthat are within a set of values,


BETWEEN
given the minimum value and the maximum value.

TheEXISTSoperatorisusedtosearchforthepresence ofa row in a specified table


EXISTS
that meets certain criteria.

TheINoperatorisusedtocompareavaluetoalist of literal values that have been


IN
specified.

TheLIKEoperatorisusedtocompareavaluetosimilarvalues using wildcard


LIKE
operators.

The NOT operator reverses the meaning of the logical operator withwhich it
NOT isused.Eg:NOTEXISTS,NOTBETWEEN,NOTIN, etc. This is a negate
operator.

TheORoperatorisusedtocombinemultipleconditions inan SQL statement's


OR
WHERE clause.

IS NULL TheNULLoperatorisusedtocompareavaluewithaNULL value.

TheUNIQUEoperatorsearcheseveryrowofaspecified table for uniqueness (no


UNIQUE
duplicates).

SQL - CREATE Table

Creating a basic table involves naming the table and defining its columns and each column's
data type. The SQL CREATE TABLE statement is used to create a new table.

Syntax:

Basic syntax of CREATE TABLE statement is as follows:

6
CREATE TABLE is the keyword telling the database system what you want to do. In this
case, you want to create a new table. The unique name or identifier for the table follows the
CREATE TABLE statement.

Then in brackets comes the list defining each column in the table and what sort of data type it
is. The syntax becomes clearer with an example below.

A copy of an existing table can be created using a combination of the CREATE TABLE
statement and the SELECT statement.

Example:

Following is an example, which creates a CUSTOMERS table with ID as primary key and
NOT NULL are the constraints showing that these fields can not be NULL while creating
records in this table:

7
You can verify if your table has been created successfully by looking at the message
displayed by the SQL server, otherwise you can use DESC command as follows:

Now, you have CUSTOMERS table available in your database which you can use to store
required information related to customers.

SQL - ALTER TABLE Command

The SQL ALTER TABLE command is used to add, delete or modify columns in an existing
table.You would also use ALTER TABLE command to add and drop various constraints on
an existing table.

Syntax:

The basic syntax of ALTER TABLE to add a new column in an existing table is as follows:

The basic syntax of ALTER TABLE to DROP COLUMN in an existing table is as follows:

The basic syntax of ALTER TABLE to change the DATA TYPE of a column in a table is
as follows:

8
The basic syntax of ALTER TABLE to add a NOT NULL constraint to a column in a table
is as follows:

The basic syntax of ALTER TABLE to ADD UNIQUE CONSTRAINT to a table is as


follows:

The basic syntax of ALTER TABLE to ADD CHECK CONSTRAINT to a table is as


follows:

The basic syntax of ALTER TABLE to ADD PRIMARY KEY constraint to a table is as
follows:

The basic syntax of ALTER TABLE to DROP CONSTRAINT from a table is as follows:

Example:

Consider the CUSTOMERS table having the following records:

9
Following is the example to ADD a new column in an existing table:

Now, CUSTOMERS table is changed and following would be output from SELECT
statement:

Following is the example to DROP sex column from existing table:

Now, CUSTOMERS table is changed and following would be output from SELECT
statement:

10
You can also use DROP TABLE command to delete complete table but it would remove
complete table structure form the database and you would need to re-create this table once
again if you wish you store some data.

Syntax:

The basic syntax of TRUNCATE TABLE is as follows:

Example:

Consider the CUSTOMERS table having the following records:

11
Following is the example to truncate:

Now, CUSTOMERS table is truncated and following would be the output from SELECT
statement:

SQL - DROP or DELETE Table

The SQL DROP TABLE statement is used to remove a table definition and all data, indexes,
triggers, constraints, and permission specifications for that table.

NOTE: You have to be careful while using this command because once a table is deleted then
all the information available in the table would also be lost forever.

Syntax:

Basic syntax of DROP TABLE statement is as follows:

Example:

Let us first verify CUSTOMERS table and then we would delete it from the database:

12
This means CUSTOMERS table is available in the database, so let us drop it as follows:

Now, if you would try DESC command, then you would get error as follows:

Here, TEST is database name which we are using for our examples.

SQL – Constraints

Constraints are the rules enforced on data columns on table. These are used to limit the type
of data that can go into a table. This ensures the accuracy and reliability of the data in the
database. Constraints could be column level or table level. Column level constraints are
applied only to one column, whereas table level constraints are applied to the whole table.

Following are commonly used constraints available in SQL.

These constraints have already been discussed in SQL - RDBMS Concepts chapter but it’s
worth to revise them at this point.

 NOT NULL Constraint: Ensures that a column cannot have NULL value.
 DEFAULT Constraint: Provides a default value for a column when none is
specified.
 UNIQUE Constraint: Ensures that all values in a column are different.
 PRIMARY Key: Uniquely identified each rows/records in a database table.
 FOREIGN Key: Uniquely identified a rows/records in any another database table.
 CHECK Constraint: The CHECK constraint ensures that all values in a column
satisfy certain conditions.
 INDEX: Use to create and retrieve data from the database very quickly.

Constraints can be specified when a table is created with the CREATE TABLE statement or
you can use ALTER TABLE statement to create constraints even after the table is created.

13
Dropping Constraints:

Any constraint that you have defined can be dropped using the ALTER TABLE command
with the DROP CONSTRAINT option.

For example, to drop the primary key constraint in the EMPLOYEES table, you can use the
following command:

Some implementations may provide shortcuts for dropping certain constraints. For example,
to drop the primary key constraint for a table in Oracle, you can use the following command:

Some implementations allow you to disable constraints. Instead of permanently dropping a


constraint from the database, you may want to temporarily disable the constraint and then
enable it later.

Integrity Constraints:

Integrity constraints are used to ensure accuracy and consistency of data in a relational
database. Data integrity is handled in a relational database through the concept of referential
integrity.

There are many types of integrity constraints that play a role in referential integrity (RI).
These constraints include Primary Key, Foreign Key, Unique Constraints and other
constraints mentioned above.

SQL RENAME Statement

With RENAME statement you can rename a table

Some of the relational database management system (RDBMS) does not support this
command, because this is not standardizing statement.

For example renaming a table through MS SQL Server you must use storage procedure
SP_RENAME.

14
Syntax for SQL RENAME is:

RENAME TABLE {tbl_name} TO {new_tbl_name};

Where {tbl_name} table that exists in the current database, and

{new_tbl_name} is new table name.

As for Oracle may also be use the following option:

ALTER TABLE {tbl_name} RENAME TO {new_tbl_name};

The SQL INSERT INTO Statement is used to add new rows of data to a table in the
database.

Syntax:

There are two basic syntaxes of INSERT INTO statement as follows:

Here, column1, column2,...columnN are the names of the columns in the table into which you
want to insert data.

You may not need to specify the column(s) name in the SQL query if you are adding values
for all the columns of the table. But make sure the order of the values is in the same order as
the columns in the table.

The SQL INSERT INTO syntax would be as follows:

Example:

Following statements would create six records in CUSTOMERS table:

15
You can create a record in CUSTOMERS table using second syntax as follows:

All the above statements would produce the following records in CUSTOMERS table:

16
Populate one table using another table:

You can populate data into a table through select statement over another table provided
another table has a set of fields, which are required to populate first table. Here is the syntax:

17
DATA MANIPULATION LANGUAGE
SQL is equipped with data manipulation language (DML). DML modifies the database
instance by inserting, updating and deleting its data. DML is responsible for all forms data
modification in a database. SQL contains the following set of commands in its DML section

 SELECT / FROM / WHERE


 INSERT INTO / VALUES
 UPDATE / SET / WHERE
 DELETE FROM / WHERE

These basic constructs allow database programmers and users to enter data and information
into the database and retrieve efficiently using a number of filter options.

SQL - SELECT Query

SQL SELECT statement is used to fetch the data from a database table which returns data in
the form of result table. These result tables are called result-sets.

Syntax:

The basic syntax of SELECT statement is as follows:


SELECT column1, column2, columnN FROM table_name;

Here, column1, column2...are the fields of a table whose values you want to fetch. If you
want to fetch all the fields available in the field, then you can use the following syntax:

SELECT * FROM table_name;

Example:

Consider the CUSTOMERS table having the following records:

18
Following is an example, which would fetch ID, Name and Salary fields of the customers
available in CUSTOMERS table:

This would produce the following result:

If you want to fetch all the fields of CUSTOMERS table, then use the following query:

This would produce the following result:

19
SQL - INSERT Query

The SQL INSERT INTO Statement is used to add new rows of data to a table in the
database.

Syntax:

There are two basic syntaxes of INSERT INTO statement as follows:

Here, column1, column2,...columnN are the names of the columns in the table into which you
want to insert data.

You may not need to specify the column(s) name in the SQL query if you are adding values
for all the columns of the table. But make sure the order of the values is in the same order as
the columns in the table.

The SQL INSERT INTO syntax would be as follows:

Example:

Following statements would create six records in CUSTOMERS table:

20
You can create a record in CUSTOMERS table using second syntax as follows:

All the above statements would produce the following records in CUSTOMERS table:

Populate one table using another table:


You can populate data into a table through select statement over another table provided
another table has a set of fields, which are required to populate first table. Here is the syntax:

21
Dynamic Insert Query:
Syntax:
Insert into <tablename>values(‘&attribute1’,’&attribute2’,…’&attributen’);
SQL - UPDATE Query
The SQL UPDATE Query is used to modify the existing records in a table.
You can use WHERE clause with UPDATE query to update selected rows otherwise all the
rows would be affected.
Syntax:
The basic syntax of UPDATE query with WHERE clause is as follows:

You can combine N number of conditions using AND or OR operators.


Example:
Consider the CUSTOMERS table having the following records:

Following is an example, which would update ADDRESS for a customer whose ID is 6:

22
Now, CUSTOMERS table would have the following records:

If you want to modify all ADDRESS and SALARY column values in CUSTOMERS table,
you do not need to use WHERE clause and UPDATE query would be as follows:

Now, CUSTOMERS table would have the following records:

SQL - DELETE Query


The SQL DELETE Query is used to delete the existing records from a table.
You can use WHERE clause with DELETE query to delete selected rows, otherwise all the
records would be deleted.
Syntax:
The basic syntax of DELETE query with WHERE clause is as follows:

23
You can combine N number of conditions using AND or OR operators.
Example:
Consider the CUSTOMERS table having the following records:

Following is an example, which would DELETE a customer, whose ID is 6:

Now, CUSTOMERS table would have the following records:

If you want to DELETE all the records from CUSTOMERS table, you do not need to use
WHERE clause and DELETE query would be as follows:

24
Now, CUSTOMERS table would not have any record.
SQL - TRUNCATE TABLE Command
The SQL TRUNCATE TABLE command is used to delete complete data from an existing
table.
You can also use DROP TABLE command to delete complete table but it would remove
complete table structure form the database and you would need to re-create this table once
again if you wish you store some data.
Syntax:
The basic syntax of TRUNCATE TABLE is as follows:

Example:
Consider the CUSTOMERS table having the following records:

Following is the example to truncate:

Now, CUSTOMERS table is truncated and following would be the output from SELECT
statement:

25
SQL - TRANSACTIONS

A Transaction is a unit of work that is performed against a database. Transactions are units or
sequences of work accomplished in a logical order, whether in a manual fashion by a user or
automatically by some sort of a database program.

A transaction is the propagation of one or more changes to the database. For example, if you
are creating a record or updating a record or deleting a record from the table, then you are
performing transaction on the table. It is important to control transactions to ensure data
integrity and to handle database errors.

Practically, you will club many SQL queries into a group and you will execute all of them
together as a part of a transaction.

Properties of Transactions:

Transactions have the following four standard properties, usually referred to by the acronym
ACID:

 Atomicity: ensures that all operations within the work unit are completed
successfully; otherwise, the transaction is aborted at the point of failure, and previous
operations are rolled back to their former state.
 Consistency: ensures that the database properly changes states upon a successfully
committed transaction.
 Isolation: enables transactions to operate independently of and transparent to each
other.
 Durability: ensures that the result or effect of a committed transaction persists in case
of a system failure.

Transaction Control:

There are following commands used to control transactions:

 COMMIT: to save the changes.


 ROLLBACK: to rollback the changes.
 SAVEPOINT: creates points within groups of transactions in which to ROLLBACK
 SET TRANSACTION: Places a name on a transaction.

26
Transactional control commands are only used with the DML commands INSERT, UPDATE
and DELETE only. They cannot be used while creating tables or dropping them because
these operations are automatically committed in the database.

The COMMIT Command:

The COMMIT command is the transactional command used to save changes invoked by a
transaction to the database.

The COMMIT command saves all transactions to the database since the last COMMIT or
ROLLBACK command.

The syntax for COMMIT command is as follows:

Example:

Consider the CUSTOMERS table having the following records:

Following is the example which would delete records from the table having age = 25 and then
COMMIT the changes in the database.

As a result, two rows from the table would be deleted and SELECT statement would produce
the following result:

27
The ROLLBACK Command:

The ROLLBACK command is the transactional command used to undo transactions that
have not already been saved to the database.

The ROLLBACK command can only be used to undo transactions since the last COMMIT
or ROLLBACK command was issued.

The syntax for ROLLBACK command is as follows:

Example:

Consider the CUSTOMERS table having the following records:

Following is the example, which would delete records from the table having age = 25 and
then ROLLBACK the changes in the database.

28
As a result, delete operation would not impact the table and SELECT statement would
produce the following result:

The SAVEPOINT Command:

A SAVEPOINT is a point in a transaction when you can roll the transaction back to a certain
point without rolling back the entire transaction.

The syntax for SAVEPOINT command is as follows:

This command serves only in the creation of a SAVEPOINT among transactional statements.
The ROLLBACK command is used to undo a group of transactions.

The syntax for rolling back to a SAVEPOINT is as follows:

Following is an example where you plan to delete the three different records from the
CUSTOMERS table. You want to create a SAVEPOINT before each delete, so that you can
ROLLBACK to any SAVEPOINT at any time to return the appropriate data to its original
state:

29
Example:

Consider the CUSTOMERS table having the following records:

Now, here is the series of operations:

Now that the three deletions have taken place, say you have changed your mind and decided
to ROLLBACK to the SAVEPOINT that you identified as SP2. Because SP2 was created
after the first deletion, the last two deletions are undone:

Notice that only the first deletion took place since you rolled back to SP2:

30
The RELEASE SAVEPOINT Command:

The RELEASESAVEPOINT command is used to remove a SAVEPOINT that you have


created.

The syntax for RELEASESAVEPOINT is as follows:

Once a SAVEPOINT has been released, you can no longer use the ROLLBACK command
to undo transactions performed since the SAVEPOINT.

The SET TRANSACTION Command:

The SETTRANSACTION command can be used to initiate a database transaction. This


command is used to specify characteristics for the transaction that follows.

For example, you can specify a transaction to be read only, or read write.

The syntax for SET TRANSACTION is as follows:

31
Ex. No.: 2
DATABASE QUERYING – SIMPLE QUERIES, NESTED QUERIES, SUB QUERIES
AND JOINS

SQL - AND and OR Conjunctive Operators

The SQL AND & OR operators are used to combine multiple conditions to narrow data in an
SQL statement. These two operators are called as the conjunctive operators.

These operators provide a means to make multiple comparisons with different operators in
the same SQL statement.

The AND Operator

The AND operator allows the existence of multiple conditions in an SQL statement's
WHERE clause.

Syntax:

The basic syntax of the AND operator with a WHERE clause is as follows:

You can combine N number of conditions using the AND operator. For an action to be taken
by the SQL statement, whether it be a transaction or a query, all conditions separated by the
AND must be TRUE.

Example:

Consider the CUSTOMERS table having the following records:

32
Following is an example, which would fetch the ID, Name and Salary fields from
theCUSTOMERS table, where the salary is greater than 2000 and the age is less than 25
years:

This would produce the following result:

The OR Operator

The OR operator is used to combine multiple conditions in an SQL statement's WHERE


clause.

Syntax

The basic syntax of the OR operator with a WHERE clause is as follows:

You can combine N number of conditions using the OR operator. For an action to be taken by
the SQL statement, whether it be a transaction or query, the only any ONE of the conditions
separated by the OR must be TRUE.

33
Example

Consider the CUSTOMERS table having the following records:

The following code block hasa query, which would fetch the ID, Name and Salary fields
from the CUSTOMERS table, where the salary is greater than 2000 and the age is less than
25 years.

This would produce the following result:

The SQL LIKE Operator

The LIKE operator is used in a WHERE clause to search for a specified pattern in a column.
There are two wildcards used in conjunction with the LIKE operator: • % - The percent sign
represents zero, one, or multiple characters • _ - The underscore represents a single character

Note: MS Access uses a question mark (?) instead of the underscore (_).

34
The percent sign and the underscore can also be used in combinations!

LIKE Syntax

SELECT column1,column2, ...

FROM table_name

WHERE columnN LIKE pattern;

Tip: You can also combine any number of conditions using AND or OR operators.

Here are some examples showing different LIKE operators with '%' and '_' wildcards:

LIKE Operator Description

WHERE CustomerName LIKE 'a%' Finds any values that starts with "a"

WHERE CustomerName LIKE '%a' Finds any values that ends with "a"

WHERE CustomerName LIKE '%or%' Finds any values that have "or" in any position
Finds any values that have "r" in the second
WHERE CustomerName LIKE '_r%'
position
WHERE CustomerName LIKE Finds any values that starts with "a" and are at least
'a_%_%' 3 characters in length
Finds any values that starts with "a" and ends with
WHERE ContactName LIKE 'a%o'
"o"

Demo Database

Customer Customer Contact Postal


Address City Country
ID Name Name Code
Alfreds Maria Obere Str.
1 Berlin 12209 Germany
Futterkiste Anders 57
Ana Trujillo Avda. de la
2 Emparedados Ana Trujillo Constitució México D.F. 05021 Mexico
y helados n 2222
Antonio
Antonio Mataderos
3 Moreno México D.F. 05023 Mexico
Moreno 2312
Taquería
Around the Thomas 120
4 London WA1 1DP UK
Horn Hardy Hanover Sq.
Berglunds Christina Berguvsväg
5 Luleå S-958 22 Sweden
snabbköp Berglund en 8

35
SQL LIKE Examples

The following SQL statement selects all customers with a CustomerName starting with "a":

SELECT * FROM Customers

WHERE CustomerName LIKE 'a%';

The following SQL statement selects all customers with a CustomerName that have "or" in
any position:

SELECT * FROM Customers

WHERE CustomerName LIKE '%or%';

The following SQL statement selects all customers with a CustomerName that have "r" in the
second position:

SELECT * FROM Customers

WHERE CustomerName LIKE '_r%';

The following SQL statement selects all customers with a CustomerName that starts with "a"
and are at least 3 characters in length:

SELECT * FROM Customers

WHERE CustomerName LIKE 'a_%_%';

The following SQL statement selects all customers with a ContactName that starts with "a"
and ends with "o":

SELECT * FROM Customers

WHERE ContactName LIKE 'a%o';

The following SQL statement selects all customers with a CustomerName that NOT starts
with "a":

SELECT * FROM Customers

WHERE CustomerName NOT LIKE 'a%';

SQL Wildcard Characters

36
A wildcard character is used to substitute any other character(s) in a string.

Wildcard characters are used with the SQL LIKE operator. The LIKE operator is used in a
WHERE clause to search for a specified pattern in a column.

There are two wildcards used in conjunction with the LIKE operator:

 % - The percent sign represents zero, one, or multiple characters


 _ - The underscore represents a single character

Demo Database

Below is a selection from the "Customers" table in the Northwind sample database:

Customer Customer Contact Postal


Address City Country
ID Name Name Code
Alfreds Maria Obere Str.
1 Berlin 12209 Germany
Futterkiste Anders 57
Ana Trujillo Avda. de la
2 Emparedados Ana Trujillo Constitució México D.F. 05021 Mexico
y helados n 2222
Antonio
Antonio Mataderos
3 Moreno México D.F. 05023 Mexico
Moreno 2312
Taquería
Around the Thomas 120
4 London WA1 1DP UK
Horn Hardy Hanover Sq.
Berglunds Christina Berguvsväg
5 Luleå S-958 22 Sweden
snabbköp Berglund en 8

Using the % Wildcard

The following SQL statement selects all customers with a City starting with "ber":

SELECT * FROM Customers

WHERE City LIKE 'ber%';

The following SQL statement selects all customers with a City containing the pattern "es":

SELECT * FROM Customers

WHERE City LIKE '%es%';

The SQL LIKE clause is used to compare a value to similar values using wildcard operators.

37
There are two wildcards used in conjunction with the LIKE operator.
 The percent sign (%)
 The underscore (_)

The percent sign represents zero, one or multiple characters. The underscore represents a
single number or character. These symbols can be used in combinations. Syntax

The basic syntax of % and _ is as follows:

SELECT FROM table_name

WHERE column LIKE 'XXXX%' or

SELECT FROM table_name

WHERE column LIKE '%XXXX%' or

SELECT FROM table_name

WHERE column LIKE 'XXXX_' or

SELECT FROM table_name

WHERE column LIKE '_XXXX' or

SELECT FROM table_name

WHERE column LIKE '_XXXX_'

You can combine N number of conditions using AND or OR operators. Here, XXXX could
be any numeric or string value.

Example

The following table has a few examples showing the WHERE part having different LIKE
clause with '%' and '_' operators:

S.No. Statement & Description


WHERE SALARY LIKE '200%'
1
Finds any values that start with 200.
WHERE SALARY LIKE '%200%'
2
Finds any values that have 200 in any position.
WHERE SALARY LIKE '_00%'
3
Finds any values that have 00 in the second and third positions.

38
WHERE SALARY LIKE '2_%_%'
4
Finds any values that start with 2 and are at least 3 characters in length.
WHERE SALARY LIKE '%2'
5
Finds any values that end with 2.
WHERE SALARY LIKE '_2%3'
6
Finds any values that have a 2 in the second position and end with a 3.
WHERE SALARY LIKE '2___3'
7
Finds any values in a five-digit number that start with 2 and end with 3.

Let us take a real example, consider the CUSTOMERS table having the records as shown
below.

Following is an example, which would display all the records from the CUSTOMERS table,
where the SALARY starts with 200.

This would produce the following result:

39
The SQL IN Operator

The IN operator allows you to specify multiple values in a WHERE clause.

The IN operator is a shorthand for multiple OR conditions.

IN Syntax

SELECT column_name(s)

FROM table_name

WHERE column_name IN (value1, value2, ...);

or

SELECT column_name(s)

FROM table_name

WHERE column_name IN (SELECT STATEMENT);

Demo Database

Below is a selection from the "Customers" table in the Northwind sample database:

Customer Customer Contact Postal


Address City Country
ID Name Name Code
Alfreds Maria Obere Str.
1 Berlin 12209 Germany
Futterkiste Anders 57
Ana Trujillo Avda. de la
2 Emparedados Ana Trujillo Constitució México D.F. 05021 Mexico
y helados n 2222
Antonio
Antonio Mataderos
3 Moreno México D.F. 05023 Mexico
Moreno 2312
Taquería
Around the Thomas 120
4 London WA1 1DP UK
Horn Hardy Hanover Sq.
Berglunds Christina Berguvsväg
5 Luleå S-958 22 Sweden
snabbköp Berglund en 8

IN Operator Examples

The following SQL statement selects all customers that are located in "Germany", "France"
and "UK":

40
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
The following SQL statement selects all customers that are NOT located in "Germany",
"France" or "UK":
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
The following SQL statement selects all customers that are from the same countries as the
suppliers:
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
The SQL BETWEEN Operator
The BETWEEN operator selects values within a given range.
The values can be numbers, text, or dates.
The BETWEEN operator is inclusive: begin and end values are included.
BETWEEN Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
Demo Database
Below is a selection from the "Products" table in the Northwind sample database:

Product Product Supplier Category


Unit Price
ID Name ID ID
1 Chais 1 1 10 boxes x 20 bags 18

2 Chang 1 1 24 - 12 oz bottles 19

3 Aniseed Syrup 1 2 12 - 550 ml bottles 10

4 Chef Anton's Cajun Seasoning 1 2 48 - 6 oz jars 22

5 Chef Anton's Gumbo Mix 1 2 36 boxes 21.35

41
BETWEEN Example
The following SQL statement selects all products with a price BETWEEN 10 and 20:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

NOT BETWEEN Example


To display the products outside the range of the previous example, use NOT BETWEEN:
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;

BETWEEN with IN Example


The following SQL statement selects all products with a price BETWEEN 10 and 20. In
addition; do not show products with a CategoryID of 1,2, or 3:

SELECT * FROM Products


WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);

BETWEEN Text Values Example


The following SQL statement selects all products with a ProductName BETWEEN
'Carnarvon Tigers' and 'Mozzarella di Giovanni':
SELECT * FROM Products
WHERE ProductNameBETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

NOT BETWEEN Text Values Example


The following SQL statement selects all products with a ProductName NOT BETWEEN
'Carnarvon Tigers' and 'Mozzarella di Giovanni':
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

42
Sample Table
Below is a selection from the "Orders" table in the Northwind sample database:

OrderID CustomerID EmployeeID OrderDate ShipperID

10248 90 5 7/4/1996 3

10249 81 6 7/5/1996 1

10250 34 4 7/8/1996 2

10251 84 3 7/9/1996 1

10252 76 4 7/10/1996 2

BETWEEN Dates Example


The following SQL statement selects all orders with an OrderDate BETWEEN '04-July-1996'
and '09-July-1996':

Example
SELECT * FROM Orders WHERE OrderDate BETWEEN #07/04/1996# AND
#07/09/1996#;

SQL TOP, LIMIT or ROWNUM Clause


SQL - ORDER BY Clause

The SQL ORDER BY clause is used to sort the data in ascending or descending order, based
on one or more columns. Some databases sort the query results in an ascending order by
default.

Syntax

The basic syntax of the ORDER BY clause is as follows:

SELECT column-list

FROM table_name [WHERE condition]

[ORDER BY column1, column2, .. columnN] [ASC | DESC];

43
You can use more than one column in the ORDER BY clause. Make sure whatever column
you are using to sort that column should be in the column-list.

Example:

Consider the CUSTOMERS table having the following records:

The following code block has an example, which would sort the result in an ascending order
by the NAME and the SALARY:

This would produce the following result:

The following code block has an example, which would sort the result in the descending
order by NAME.

44
This would produce the following result:

SQL - Distinct Keyword

The SQL DISTINCT keyword is used in conjunction with the SELECT statement to
eliminate all the duplicate records and fetching only unique records.

There may be a situation when you have multiple duplicate records in a table. While fetching
such records, it makes more sense to fetch only those unique records instead of fetching
duplicate records.

Syntax

The basic syntax of DISTINCT keyword to eliminate the duplicate records is as follows:

SELECT DISTINCT column1, column2,.....columnN

FROM table_name

WHERE [condition]

Example:

Consider the CUSTOMERS table having the following records:

45
First, let us see how the following SELECT query returns the duplicate salary records.

This would produce the following result, where the salary (2000) is coming twice which is a
duplicate record from the original table.

Now, let us use the DISTINCT keyword with the above SELECT query and then see the
result.

This would produce the following result where we do not have any duplicate entry.

SQL - SORTING Results

The SQL ORDER BY clause is used to sort the data in ascending or descending order, based
on one or more columns. Some databases sort the query results in an ascending order by
default.

Syntax

46
The basic syntax of the ORDER BY clause which would be used to sort the result in an
ascending or descending order is as follows:

You can use more than one column in the ORDER BY clause. Make sure that whatever
column you are using to sort, that column should be in the column-list.

Example:

Consider the CUSTOMERS table having the following records

Following is an example, which would sort the result in an ascending order by NAME and
SALARY.

This would produce the following result:

47
The following code block has an example, which would sort the result in a descending order
by NAME.

This would produce the following result:

To fetch the rows with their own preferred order, the SELECT query used would be as
follows:

48
This would produce the following result:

This will sort the customers by ADDRESS in your ownoOrder of preference first and in a
natural order for the remaining addresses. Also, the remaining Addresses will be sorted in the
reverse alphabetical order.

SQL MIN() and MAX() Functions

The MIN() function returns the smallest value of the selected column.

The MAX() function returns the largest value of the selected column.

MIN() Syntax

SELECT MIN(column_name)

FROM table_name

WHERE condition;

MAX() Syntax

SELECT MAX(column_name)

FROM table_name
49
WHERE condition;

Demo Database

Below is a selection from the "Products" table in the Northwind sample database:

Product Product Supplier Category


Unit Price
ID Name ID ID
1 Chais 1 1 10 boxes x 20 bags 18

2 Chang 1 1 24 - 12 oz bottles 19

3 Aniseed Syrup 1 2 12 - 550 ml bottles 10

4 Chef Anton's Cajun Seasoning 1 2 48 - 6 oz jars 22

5 Chef Anton's Gumbo Mix 1 2 36 boxes 21.35

MIN() Example

The following SQL statement finds the price of the cheapest product:

SELECT MIN(Price) AS SmallestPrice

FROM Products;

MAX() Example

The following SQL statement finds the price of the most expensive product:

SELECT MAX(Price) AS LargestPrice

FROM Products;

SQL COUNT(), AVG() and SUM() Functions

The COUNT() function returns the number of rows that matches a specified criteria.

The AVG() function returns the average value of a numeric column.

The SUM() function returns the total sum of a numeric column.

COUNT() Syntax

SELECT COUNT(column_name) FROM table_name WHERE condition;

50
AVG() Syntax

SELECT AVG(column_name) FROM table_name WHERE condition;

SUM() Syntax

SELECT SUM(column_name) FROM table_name WHERE condition;

COUNT() Example

The following SQL statement finds the number of products:

SELECT COUNT(ProductID) FROM Products;

AVG() Example

The following SQL statement finds the average price of all products:

SELECT AVG(Price) FROM Products;

Demo Database

Below is a selection from the "OrderDetails" table in the Northwind sample database:

OrderDetailID OrderID ProductID Quantity

1 10248 11 12

2 10248 42 10

3 10248 72 5

4 10249 14 9

5 10249 51 40

SUM() Example

The following SQL statement finds the sum of the "Quantity" fields in the "OrderDetails"
table: SELECT SUM(Quantity) FROM OrderDetails;

51
NESTED QUERIES AND QUERIES USING GROUP BY AND HAVING CLAUSE
The HAVING Clause
The HAVING clause was added to SQL because the WHERE keyword could not be used
with aggregate functions.
SQL HAVING Syntax
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

Demo Database:
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Orders" table:

OrderID CustomerID EmployeeID OrderDate ShipperID

10248 90 5 1996-07-04 3

10249 81 6 1996-07-05 1

10250 34 4 1996-07-08 2

And a selection from the "Employees" table:

EmployeeID LastName FirstName BirthDate Photo Notes


EmpID1.pi Education includes a
1 Davolio Nancy 1968-12-08
c BA....
EmpID2.pi Andrew received his
2 Fuller Andrew 1952-02-19
c BTS....
EmpID3.pi Janet has a BS
3 Leverling Janet 1963-08-30
c degree....

SQL HAVING Example:


Now we want to find if any of the employees has registered more than 10 orders.
We use the following SQL statement:
Example:

52
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders FROM
Orders INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID)
GROUP BY LastName HAVING COUNT(Orders.OrderID) > 10;
Now we want to find if the employees "Davolio" or "Fuller" have registered more than 25
orders.
We add an ordinary WHERE clause to the SQL statement:
Example:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
WHERE LastName='Davolio' OR LastName='Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;

SQL HAVING Clause


 HAVING filters records that work on summarized GROUP BY results.
 HAVING applies to summarized group records, whereas WHERE applies to
individual records.
 Only the groups that meet the HAVING criteria will be returned.
 HAVING requires that a GROUP BY clause is present.
 WHERE and HAVING can be in the same query.

The SQL HAVING syntax


SELECT column-names
FROM table-name
WHERE condition
GROUP BY column-names
HAVING condition
The general syntax with ORDER BY is:
SELECT column-names
FROM table-name

53
WHERE condition
GROUP BY column-names
HAVING condition
ORDER BY column-names
CUSTOMER
Id
FirstName
LastName
City
Country
Phone
SQL GROUP BY Examples
Problem: List the number of customers in each country. Only include countries with more
than 10 customers.
SELECT COUNT(Id), Country
FROM Customer
GROUP BY Country
HAVING COUNT(Id) > 10

Count Country
11 France
11 Germany
13 USA

CUSTOMER
Id
FirstName
LastName
City
Country
Phone

Problem: List the number of customers in each country, except the USA, sorted high to low.
Only include countries with 9 or more customers.
SELECT COUNT(Id), Country

54
FROM Customer

WHERE Country <> 'USA'

GROUP BY Country

HAVING COUNT(Id) >= 9

ORDER BY COUNT(Id) DESC

Count Country
11 France
11 Germany
9 Brazil

CUSTOMER
Id
OrderDate
OrderNumber
CustomerId
TotalAmount

Problem: List all customer with average orders between $1000 and $1200.

SELECT AVG(TotalAmount), FirstName, LastName

FROM [Order] O JOIN Customer C ON O.CustomerId = C.Id

GROUP BY FirstName, LastName

HAVING AVG(TotalAmount) BETWEEN 1000 AND 1200

Average FirstName LastName


1081.215000 Miguel Angel Paolino
1063.420000 Isabel de Castro
1008.440000 Alexander Feuer
1062.038461 Thomas Hardy
1107.806666 Pirkko Koskitalo

55
1174.945454 Janete Limeira
1073.621428 Antonio Moreno
1065.385000 Rita Müller
1183.010000 José Pedro Freyre
1057.386666 Carine Schmitt

SQL - Group By
The SQL GROUP BY clause is used in collaboration with the SELECT statement to arrange
identical data into groups.
The GROUP BY clause follows the WHERE clause in a SELECT statement and precedes the
ORDER BY clause.
Syntax:
The basic syntax of GROUP BY clause is given below. The GROUP BY clause must follow
the conditions in the WHERE clause and must precede the ORDER BY clause if one is used.
SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2
Example:
Consider the CUSTOMERS table is having the following records:

If you want to know the total amount of salary on each customer, then GROUP BY query
would be as follows:

56
This would produce the following result:

Now, let us have following table where CUSTOMERS table has the following records with
duplicate names:

Now again, if you want to know the total amount of salary on each customer, then GROUP
BY query would be as follows:

This would produce the following result:

57
58
NESTED QUERIES & QUERIES USING GROUP BY AND OTHER CLAUSES
SAMPLES QUERIES
SET OPERATIONS & OTHER CLAUSES:
NESTED QUERY: A nested query makes use of another sub-query to compute or
retrieve the information.
UNION - OR
INTERSECT - AND
EXCEPT - NOT
Order by : The order by clause is used to display the results in sorted order.
Group by : The attribute or attributes given in the clauses are used to form groups.
Tuples with the same value on all attributes in the group by clause are placed in one
group.
Having: SQL applies predicates (conditions) in the having clause after groups have
been formed, so aggregate function be used.

Problem Statements:
1. Find the name of the institute in which the person studied and developed the costliest
package.
INPUT:
SQL> SELECT SPLACE, PNAME FROM STUDY WHERE PNAME = (SELECT
PNAME FROM SOFTWARE
WHERE SCOST = (SELECT MAX (SCOST) FROM SOFTWARE);
OUTPUT:
SPLACE PNAME
------------ -------------
SAHBHARI MARY

2. Find the salary and institute of a person who developed the highest selling package.
INPUT:
SQL> SELECT STUDY.PNAME, SAL, SPLACE FROM STUDY, PROGRAMMER
WHERE
STUDY.PNAME = PROGRAMMER.PNAME AND STUDY.PNAME = (SELECT
PNAME FROM SOFTWARE WHERE
SCOST = (SELECT MAX (SCOST) FROM SOFTWARE));
59
OUTPUT:
PNAM SAL SPLACE
----------- ------ -----------
MARY 4500 SABHARI

3. How many packages were developed by the person who developed the cheapest
package?
INPUT:
SQL> SELECT PNAME, COUNT (TITLE) FROM SOFTWARE WHERE DCOST
= (SELECT MIN(DCOST) FROM SOFTWARE) GROUP BY PNAME;
RESULT
PNAME COUNT(TITLE)
------------- ----------------------
VIJAY 1

4. Calculate the amount to be recovered for those packages whose development cost has
not yet recovered.
INPUT:
SQL>SELECT TITLE, (DCOST-SCOST) FROM SOFTWARE WHERE DCOST >
SCOST;

5. Display the title, scost, dcost, difference of scost and dcost in the descending order of
difference.
INPUT:
SQL> SELECT TITLE, SCOST, DCOST, (SCOST - DCOST) FROM SOFTWARE
DESCENDING ORDER BY (SCOST-DCOST);

6. Display the details of those who draw the same salary.


Input:
SQL> SELECT P.PNAME, P.SAL FROM PROGRAMMER P, PROGRAMMER T
WHERE P.PNAME <>
T.PNAME AND P.SAL = T.SAL;
(OR)
Input:
60
SQL>SELECT PNAME,SAL FROM PROGRAMMER T WHERE
PNAME<>T.PNAME AND SAL= T.SAL;

7. Display total salary spent for each job category.


Input:
SQL>SELECT JOB,SUM (SAL) FROM EMP GROUP BY JOB;
Output:
JOB SUM(SAL)
--------- ----------
ANALYST 6000
CLERK 23050
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
assistant 2200
clerk 2003
7 rows selected.
8. Display lowest paid employee details under each manager.
Input:
SQL>SELECT ENAME, SAL FROM EMP WHERE SAL IN (SELECT MIN(SAL)
from EMP GROUP BY MGR);
Output:
ENAME SAL
---------- ----------
CHAI 3
JAMES 950
MILLER 1000
ADAMS 1100
russel 2200
5 rows selected.
9. Display number of employees working in each department and their department
name.
Input:

61
SQL> SELECT DNAME, COUNT (ENAME) FROM EMP, DEPT WHERE
EMP.DEPTNO=DEPT.DEPTNO
GROUP BY DNAME;
Output:
DNAME COUNT(ENAME)
-------------- ------------
ACCOUNTING 3
RESEARCH 5
SALES 9
10. Display the sales cost of package developed by each programmer.
Input:
SQL> SELECT PNAME, SUM(SCOST) FROM SOFTWARE GROUP BY PNAME;
Output:
PNAME SUM(SCOST)
-------------------- ----------
john 12000
kamala 12000
raju 12333
3 rows selected.
11. Display the number of packages sold by each programmer.
Input:
SQL>SELECT PNAME, COUNT(TITLE) FROM SOFTWARE GROUP BY
PNAME;
Output:
PNAME COUNT(TITLE)
-------------------- ------------
john 1
kamala 1
raju 1
ramana 1
rani 1
5 rows selected.
12. Display the number of packages in each language for which the development cost is
less than thousand.
Input:

62
SQL>SELECT DEVIN, COUNT(TITLE) FROM SOFTWARE WHERE DCOST <
1000 GROUP BY DEVIN;
Output:
DEVIN COUNT(TITLE)
---------- ------------
cobol 1
13. Display each institute name with number of students.
Input:
SQL> SELECT SPLACE, COUNT(PNAME) FROM STUDY GROUP BY
SPLACE;
Output:
SPLACE COUNT(PNAME)
-------------------- ------------
BDPS 2
BITS 1
BNRILLIANI 1
COIT 1
HYD 1
5 rows selected.
14. How many copies of package have the least difference between development and
selling cost, were sold?
Input:
SQL>select SOLD FROM SOFTWARE WHERE SCOST – DCOST=(SELECT
MIN(SCOST – DCOST) FROM SOFTWARE);
Output:
SOLD
---------
11
15. Which is the costliest package developed in Pascal.
Input:
SQL>SELECT TITLE FROM SOFTWARE WHERE DEVIN = ‘PASCAL’ AND
DCOST = (SELECT MAX(DCOST) FROM SOFTWARE WHERE DEVIN =
‘PASCAL’);
Output:
63
no rows selected
16. Which language was used to develop most no .of packages?
Input:
SQL>SELECT DEVIN, COUNT (*) FROM SOFTWARE GROUP BY DEVIN
HAVING COUNT(*)
= (SELECT MAX(COUNT(*) ) FROM SOFTWARE GROUP BY DEVIN);
Output:
DEVIN COUNT(*)
---------- ----------
jsp 2
17.Who are the male programmers earning below the average salary of female
programmers?
Input:
SQL>SELECT PNAME FROM PROGRAMMER WHERE SAL < (SELECT
AVG(SAL) FROM PROGRAMMER WHERE SEX = ‘F’) AND SEX = ‘M’;
Output:
PNAME
--------------------
vijay
18. Display the details of software developed by the male programmers earning more
than 3000/-.
Input:
SQL> SELECT PROGRAMMER.PNAME, TITLE, DEVIN FROM
PROGRAMMER, SOFTWARE WHERE SAL > 3000 AND SEX = ‘M’ AND
PROGRAMMER.PNAME = SOFTWARE.PNAME;
Output:
no rows selected
19. Display the details of software developed in c language by female programmers of
Pragathi.
Input:
SQL>SELECT SOFTWARE.PNAME, TITLE, DEVIN, SCOST, DCOST, SOLD
FROM PROGRAMMER, SOFTWARE, STUDY WHERE DEVIN = ‘C’ AND SEX
=’F’ AND SPLACE = ‘PRAGATHI’ AND PROGRAMMER.PNAME =
SOFTWARE.PNAME AND SOFTWARE.PNAME = STUDY.PNAME;
64
Ex.No.:3
VIEWS, SEQUENCES, SYNONYMS

SQL CREATE VIEW Statement


In SQL, a view is a virtual table based on the result-set of an SQL statement.
A view contains rows and columns, just like a real table. The fields in a view are fields from
one or more real tables in the database.
You can add SQL functions, WHERE, and JOIN statements to a view and present the data as
if the data were coming from one single table.

CREATE VIEW Syntax


CREATE VIEW view_name AS
SELECT column1,column2, ...
FROM table_name
WHERE condition;

Note: A view always shows up-to-date data! The database engine recreates the data, using
the view's SQL statement, every time a user queries a view.

SQL CREATE VIEW Examples:


If you have the Northwind database you can see that it has several views installed by default.
The view "Current Product List" lists all active products (products that are not discontinued)
from the "Products" table.
The view is created with the following SQL:
CREATE VIEW [Current Product List] AS
SELECT ProductID, ProductName
FROM Products
WHERE Discontinued = No;

Then, we can query the view as follows:


SELECT * FROM [Current Product List];
Another view in the Northwind sample database selects every product in the "Products" table
with a unit price higher than the average unit price:
CREATE VIEW [Products Above Average Price] AS
65
SELECT ProductName, UnitPrice
FROM Products
WHERE UnitPrice > (SELECT AVG(UnitPrice) FROM Products);

We can query the view above as follows:


SELECT * FROM [Products Above Average Price];

Another view in the Northwind database calculates the total sale for each category in 1997.
Note that this view selects its data from another view called "Product Sales for 1997":

CREATE VIEW [Category Sales For 1997] AS


SELECT DISTINCT CategoryName, Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName;

We can query the view above as follows:


SELECT * FROM [Category Sales For 1997];

We can also add a condition to the query. Let's see the total sale only for the category
"Beverages":
SELECT * FROM [Category Sales For 1997]
WHERE CategoryName = 'Beverages';

SQL Updating a View


You can update a view by using the following syntax:

SQL CREATE OR REPLACE VIEW Syntax


CREATE OR REPLACE VIEW view_name AS
SELECT column1,column2, ...
FROM table_name
WHERE condition;

Now we want to add the "Category" column to the "Current Product List" view. We will
update the view with the following SQL:
66
CREATE OR REPLACE VIEW [Current Product List] AS
SELECT ProductID, ProductName, Category
FROM Products
WHERE Discontinued = No;

SQL Dropping a View


You can delete a view with the DROP VIEW command.
SQL DROP VIEW Syntax
DROP VIEW view_name;

SQL CREATE INDEX Statement


The CREATE INDEX statement is used to create indexes in tables.
Indexes are used to retrieve data from the database very fast. The users cannot see the
indexes, they are just used to speed up searches/queries.

CREATE INDEX Syntax


Creates an index on a table. Duplicate values are allowed:
CREATE INDEX index_name ON table_name (column1, column2, ...);

CREATE UNIQUE INDEX Syntax


Creates a unique index on a table. Duplicate values are not allowed:
CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);
Note: The syntax for creating indexes varies among different databases. Therefore: Check the
syntax for creating indexes in your database.

CREATE INDEX Example:


The SQL statement below creates an index named "idx_lastname" on the "LastName"
column in the "Persons" table:
CREATE INDEX idx_lastname ON Persons (LastName);
If you want to create an index on a combination of columns, you can list the column names
within the parentheses, separated by commas:
CREATE INDEX idx_pname ON Persons (LastName, FirstName);

67
DROP INDEX Statement
The DROP INDEX statement is used to delete an index in a table.
MS Access:
DROP INDEX index_name ON table_name;
SQL Server:
DROP INDEX table_name.index_name;
DB2/Oracle:
DROP INDEX index_name;
MySQL:
ALTER TABLE table_name DROP INDEX index_name;

CREATE SYNONYM
Purpose
Use the CREATE SYNONYM statement to create a synonym, which is an alternative name
for a table, view, sequence, procedure, stored function, package, materialized view, Java class
schema object, user-defined object type, or another synonym.
Synonyms provide both data independence and location transparency. Synonyms permit
applications to function without modification regardless of which user owns the table or view
and regardless of which database holds the table or view. However, synonyms are not a
substitute for privileges on database objects. Appropriate privileges must be granted to a user
before the user can use the synonym.
You can refer to synonyms in the following DML statements:
SELECT, INSERT, UPDATE, DELETE, FLASHBACK TABLE, EXPLAIN PLAN, and
LOCK TABLE.
You can refer to synonyms in the following DDL statements: AUDIT, NOAUDIT, GRANT,
REVOKE, and COMMENT.
Prerequisites
To create a private synonym in your own schema, you must have the CREATE SYNONYM
system privilege.
To create a private synonym in another user's schema, you must have the CREATE ANY
SYNONYM system privilege.
To create a PUBLIC synonym, you must have the CREATE PUBLIC SYNONYM system
privilege.

68
Examples:
CREATE SYNONYM: Examples To define the synonym offices for the table locations in
the schema hr, issue the following statement:
CREATE SYNONYM offices
FOR hr.locations;

To create a PUBLIC synonym for the employees table in the schema hr on the remote
database, you could issue the following statement:
CREATE PUBLIC SYNONYM emp_table
FOR hr.employees@remote.us.oracle.com;

A synonym may have the same name as the underlying object, provided the underlying object
is contained in another schema.

Oracle Database Resolution of Synonyms:


Example Oracle Database attempts to resolve references to objects at the schema level before
resolving them at the PUBLIC synonym level. For example, the schemas oe and sh both
contain tables named customers. In the next example, user SYSTEM creates a PUBLIC
synonym named customers foroe.customers:

CREATE PUBLIC SYNONYM customers FOR oe.customers;


If the user sh then issues the following statement, then the database returns the count of rows
from sh.customers:

SELECT COUNT(*) FROM customers;

To retrieve the count of rows from oe.customers, the user sh must preface customers with the
schema name. (The user sh must have select permission on oe.customers as well.)

SELECT COUNT(*) FROM oe.customers;


If the user hr's schema does not contain an object named customers, and if hr has select
permission on oe.customers, then hr can access thecustomers table in oe's schema by using
the public synonym customers:
SELECT COUNT(*) FROM customers;
69
CREATE SEQUENCE
Purpose
Use the CREATE SEQUENCE statement to create a sequence, which is a database object
from which multiple users may generate unique integers. You can use sequences to
automatically generate primary key values.
When a sequence number is generated, the sequence is incremented, independent of the
transaction committing or rolling back. If two users concurrently increment the same
sequence, then the sequence numbers each user acquires may have gaps, because sequence
numbers are being generated by the other user. One user can never acquire the sequence
number generated by another user. After a sequence value is generated by one user, that user
can continue to access that value regardless of whether the sequence is incremented by
another user.
Sequence numbers are generated independently of tables, so the same sequence can be used
for one or for multiple tables. It is possible that individual sequence numbers will appear to
be skipped, because they were generated and used in a transaction that ultimately rolled back.
Additionally, a single user may not realize that other users are drawing from the same
sequence.
After a sequence is created, you can access its values in SQL statements with the CURRVAL
pseudocolumn, which returns the current value of the sequence, or the NEXTVAL
pseudocolumn, which increments the sequence and returns the new value.
Semantics
schema
Specify the schema to contain the sequence. If you omit schema, then Oracle Database
creates the sequence in your own schema.
sequence
Specify the name of the sequence to be created.
If you specify none of the following clauses, then you create an ascending sequence that
starts with 1 and increases by 1 with no upper limit. Specifying only INCREMENT BY -1
creates a descending sequence that starts with -1 and decreases with no lower limit.
 To create a sequence that increments without bound, for ascending sequences, omit
the MAXVALUE parameter or specify NOMAXVALUE. For descending sequences,
omit the MINVALUE parameter or specify the NOMINVALUE.

70
 To create a sequence that stops at a predefined limit, for an ascending sequence,
specify a value for the MAXVALUE parameter. For a descending sequence, specify a
value for the MINVALUE parameter. Also specify NOCYCLE. Any attempt to
generate a sequence number once the sequence has reached its limit results in an
error.
 To create a sequence that restarts after reaching a predefined limit, specify values for
both the MAXVALUE and MINVALUE parameters. Also specify CYCLE. If you do
not specify MINVALUE, then it defaults to NOMINVALUE, which is the value 1.

INCREMENT BY Specify the interval between sequence numbers. This integer value can
be any positive or negative integer, but it cannot be 0. This value can have 28 or fewer digits.
The absolute of this value must be less than the difference of MAXVALUE and
MINVALUE. If this value is negative, then the sequence descends. If the value is positive,
then the sequence ascends. If you omit this clause, then the interval defaults to 1.
START WITH Specify the first sequence number to be generated. Use this clause to start an
ascending sequence at a value greater than its minimum or to start a descending sequence at a
value less than its maximum. For ascending sequences, the default value is the minimum
value of the sequence. For descending sequences, the default value is the maximum value of
the sequence. This integer value can have 28 or fewer digits.
Note:
This value is not necessarily the value to which an ascending cycling sequence cycles after
reaching its maximum or minimum value.
MAXVALUE Specify the maximum value the sequence can generate. This integer value can
have 28 or fewer digits. MAXVALUE must be equal to or greater thanSTART WITH and
must be greater than MINVALUE.
NOMAXVALUE Specify NOMAXVALUE to indicate a maximum value of 1027 for an
ascending sequence or -1 for a descending sequence. This is the default.
MINVALUE Specify the minimum value of the sequence. This integer value can have 28 or
fewer digits. MINVALUE must be less than or equal to START WITH and must be less than
MAXVALUE.
NOMINVALUE Specify NOMINVALUE to indicate a minimum value of 1 for an
ascending sequence or -1026 for a descending sequence. This is the default.

71
CYCLE Specify CYCLE to indicate that the sequence continues to generate values after
reaching either its maximum or minimum value. After an ascending sequence reaches its
maximum value, it generates its minimum value. After a descending sequence reaches its
minimum, it generates its maximum value.

NOCYCLE Specify NOCYCLE to indicate that the sequence cannot generate more values
after reaching its maximum or minimum value. This is the default.
CACHE Specify how many values of the sequence the database preallocates and keeps in
memory for faster access. This integer value can have 28 or fewer digits. The minimum value
for this parameter is 2. For sequences that cycle, this value must be less than the number of
values in the cycle. You cannot cache more values than will fit in a given cycle of sequence
numbers. Therefore, the maximum value allowed for CACHE must be less than the value
determined by the following formula:
(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)
If a system failure occurs, then all cached sequence values that have not been used in
committed DML statements are lost. The potential number of lost values is equal to the value
of the CACHE parameter.
Note:
Oracle recommends using the CACHE setting to enhance performance if you are using
sequences in an Oracle Real Application Clusters environment.
NOCACHE Specify NOCACHE to indicate that values of the sequence are not preallocated.
If you omit both CACHE and NOCACHE, then the database caches 20 sequence numbers by
default.
ORDER Specify ORDER to guarantee that sequence numbers are generated in order of
request. This clause is useful if you are using the sequence numbers as timestamps.
Guaranteeing order is usually not important for sequences used to generate primary keys.
ORDER is necessary only to guarantee ordered generation if you are using Oracle Real
Application Clusters. If you are using exclusive mode, then sequence numbers are always
generated in order.
NOORDER Specify NOORDER if you do not want to guarantee sequence numbers are
generated in order of request. This is the default.
Example:

72
Creating a Sequence: Example The following statement creates the sequence
customers_seq in the sample schema oe. This sequence could be used to provide customer ID
numbers when rows are added to the customers table.
CREATE SEQUENCE customers_seq
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;
The first reference to customers_seq.nextval returns 1000. The second returns 1001. Each
subsequent reference will return a value 1 greater than the previous reference.

DROP SEQUENCE
Purpose
Use the DROP SEQUENCE statement to remove a sequence from the database.
You can also use this statement to restart a sequence by dropping and then re-creating it. For
example, if you have a sequence with a current value of 150 and you would like to restart the
sequence with a value of 27, then you can drop the sequence and then re-create it with the
same name and aSTART WITH value of 27.

Example
Dropping a Sequence:
Example:The following statement drops the sequence customers_seq owned by the user oe,
which was created in "Creating a Sequence: Example". To issue this statement, you must
either be connected as user oe or have the DROP ANY SEQUENCE system privilege:
DROP SEQUENCE oe.customers_seq;

ALTER SEQUENCE
Purpose
Use the ALTER SEQUENCE statement to change the increment, minimum and maximum
values, cached numbers, and behavior of an existing sequence. This statement affects only
future sequence numbers.
Examples:
Modifying a Sequence:

73
Examples:This statement sets a new maximum value for the customers_seq sequence, which
was created in "Creating a Sequence: Example":
ALTER SEQUENCE customers_seq
MAXVALUE 1500;
This statement turns on CYCLE and CACHE for the customers_seq sequence:
ALTER SEQUENCE customers_seq
CYCLE
CACHE 5;
Finding the next value of a sequence:
Example: This example selects the next value of the employee sequence in the sample
schema hr:
SELECT employees_seq.nextval
FROM DUAL;
Inserting sequence values into a table:
Example: This example increments the employee sequence and uses its value for a new
employee inserted into the sample table hr.employees:

Reusing the current value of a sequence:


Example:
This example adds a new order with the next order number to the master order table. It then
adds suborders with this number to the detail order table:

74
75
Ex.No.: 4
Oracle PL/SQL Cursor: Implicit, Explicit, Cursor FOR Loop

What is CURSOR in PL/SQL?


A Cursor is a pointer to this context area. Oracle creates context area for processing an SQL
statement which contains all information about the statement.
PL/SQL allows the programmer to control the context area through the cursor. A cursor holds
the rows returned by the SQL statement. The set of rows the cursor holds is referred as active
set. These cursors can also be named so that they can be referred from another place of the
code.
In this tutorial you will learn-
 Implicit Cursor
 Explicit Cursor
 Cursor Attributes
 FOR Loop Cursor statement
The cursor is of two types.
 Implicit Cursor
 Explicit Cursor

Implicit Cursor
Whenever any DML operations occur in the database, an implicit cursor is created that holds
the rows affected, in that particular operation. These cursors cannot be named and, hence they
cannot be controlled or referred from another place of the code. We can refer only to the most
recent cursor through the cursor attributes.

Explicit Cursor
Programmers are allowed to create named context area to execute their DML operations to
get more control over it. The explicit cursor should be defined in the declaration section of
the PL/SQL block, and it is created for the 'SELECT' statement that needs to be used in the
code.
Below are steps that involved in working with explicit cursors.

76
Declaring the Cursor
Declaring the cursor simply means to create one named context area for the 'SELECT'
statement that is defined in the declaration part. The name of this context area is same as the
cursor name.

Opening Cursor
Opening the cursor will instruct the PL/SQL to allocate the memory for this cursor. It will
make the cursor ready to fetch the records.

Fetching Data from the Cursor


In this process, the 'SELECT' statement is executed and the rows fetched is stored in the
allocated memory. These are now called as active sets. Fetching data from the cursor is a
record-level activity that means we can access the data in a record-by-record way.
Each fetch statement will fetch one active set and holds the information of that particular
record. This statement is same as 'SELECT' statement that fetches the record and assigns to
the variable in the 'INTO' clause, but it will not throw any exceptions.

Closing the Cursor


Once all the record is fetched now, we need to close the cursor so that the memory allocated
to this context area will be released.

Syntax:
DECLARE
CURSOR <cursor_name> IS <SELECT statement^>
<cursor_variable declaration>
BEGIN
OPEN <cursor_name>;
FETCH <cursor_name> INTO <cursor_variable>;
.
.
CLOSE <cursor_name>;
END;
 In the above syntax, the declaration part contains the declaration of the cursor and the
cursor variable in which the fetched data will be assigned.
77
 The cursor is created for the 'SELECT' statement that is given in the cursor declaration.
 In execution part, the declared cursor is opened, fetched and closed.

Cursor Attributes
Both Implicit cursor and the explicit cursor has certain attributes that can be accessed. These
attributes give more information about the cursor operations. Below are the different cursor
attributes and their usage.

Cursor Attribute Description

It returns the Boolean result 'TRUE' if the most recent fetch operation
%FOUND
fetched a record successfully, else it will return FALSE.
This works oppositely to %FOUND it will return 'TRUE' if the most
%NOTFOUND
recent fetch operation could not able to fetch any record.
It returns Boolean result 'TRUE' if the given cursor is already opened,
%ISOPEN
else it returns 'FALSE'
It returns the numerical value. It gives the actual count of records that
%ROWCOUNT
got affected by the DML activity.

Example 1:
In this example, we are going to see how to declare, open, fetch and close the explicit
cursor.We will project all the employee's name from emp table using a cursor. We will also
use cursor attribute to set the loop to fetch all the record from the cursor.

78
DECLARE
CURSOR guru99_det IS SELECT emp_name FROM emp;
lv_emp_name emp.emp_name%type;
BEGIN
OPEN guru99_det;
LOOP
FETCH guru99_det INTO lv_emp_name;
IF guru99_det%NOTFOUND
THEN
EXIT;
END IF;
Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);
END LOOP;
Dbms_output.put_line(‘Total rows fetched is‘||guru99_det%R0WCOUNT);
CLOSE guru99_det;
END:

79
Output:
Employee Fetched:BBB
Employee Fetched:XXX
Employee Fetched:YYY
Total rows fetched is 3

Code Explanation:
 Code line 2: Declaring the cursor guru99_det for statement 'SELECT emp_name
FROM emp'.
 Code line 3: Declaring variable lv_emp_name.
 Code line 5: Opening the cursor guru99_det.
 Code line 6: Setting the Basic loop statement to fetch all the records in the 'emp' table.
 Code line 7: Fetches the guru99_det data and assign the value to lv_emp_name.
 Code line 9: Using the cursor attribute '%NOTFOUND' to find whether all the record
in the cursor is fetched. If fetched then it will return 'TRUE' and control will exit from
the loop, else the control will keep on fetching the data from the cursor and print the
data.
 Code line 11: EXIT condition for the loop statement.
 Code line 12: Print the fetched employee name.
 Code line 14: Using the cursor attribute '%ROWCOUNT' to find the total number of
records that got affected/fetched in the cursor.
 Code line 15: After exiting from the loop the cursor is closed and the memory
allocated is set free.
FOR Loop Cursor statement
"FOR LOOP" statement can be used for working with cursors. We can give the cursor name
instead of range limit in the FOR loop statement so that the loop will work from the first
record of the cursor to the last record of the cursor. The cursor variable, opening of cursor,
fetching and closing of the cursor will be done implicitly by the FOR loop.
Syntax:
DECLARE
CURSOR <cursor_name> IS <SELECT statement>;
BEGIN
FOR I IN <cursor_name>

80
LOOP
.
.
END LOOP;
END;
 In the above syntax, the declaration part contains the declaration of the cursor.
 The cursor is created for the 'SELECT' statement that is given in the cursor
declaration.
 In execution part, the declared cursor is setup in the FOR loop and the loop variable 'I'
will behave as cursor variable in this case.

Example 1:
In this example, we will project all the employee name from emp table using a cursor-FOR
loop.
DECLARE
CURSOR guru99_det IS SELECT emp_name FROM emp;
BEGIN
FOR lv_emp_name IN guru99_det
LOOP
Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);
END LOOP;
END;
Output
Employee Fetched:BBB
Employee Fetched:XXX
Employee Fetched:YYY
Code Explanation:
 Code line 2: Declaring the cursor guru99_det for statement 'SELECT emp_name
FROM emp'.
 Code line 4: Constructing the 'FOR' loop for the cursor with the loop variable
lv_emp_name.
 Code line 5: Printing the employee name in each iteration of the loop.
 Code line 8: Exit the loop

81
Problem Statements:
1. Write a PL SQL cursor block to update the due date of the book_loans table for those
who have borrowed books after the date “XXXXX” and display no rows affected.
2. Copy customers table using PL SQL cursors.
3. Implement PL SQL cursor while,for loops and %ROWCOUNT to count the no of
rows affected by the following operations
 Update the book quantity
 Increase the course fee for a particular department.

82
Ex.No.:5.
PROCEDURES AND FUNCTIONS
Procedures
An Oracle stored procedure is a program stored in an Oracle database. The following are the
advantages of using procedures.
Better performance: Oracle stored procedures load once into the shared pool and remain there
unless they become paged out. Subsequent executions of the Oracle stored procedure are far
faster than executions of external code.
Coupling of data with behaviour: DBAs can use naming conventions to couple relational
tables with the behaviors associated with a table by using Oracle stored procedures as
"methods". If all behaviors associated with the employee table are prefixed with the table
name--employee.hire, employee.give_raise, for example--the data dictionary can be queries
to list all behaviors associated with a table (select * from dba_objects where owner =
'EMPLOYEE'), and it's easy to identify and reuse code via stored procedures.
Isolation of code: Since all SQL is moved out of the external programs and into the Oracle
stored procedures, the application programs become nothing more than calls to Oracle stored
procedures. As such, it becomes very simple to swap out one database and swap in another
one.
SYNTAX:
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
procedure_body
EXCEPTION
Exception handling
END procedure_name
IN - The parameter can be referenced by the procedure or function. The value of the
parameter cannot be overwritten by the procedure or function.
OUT - The parameter cannot be referenced by the procedure or function, but the value of the
parameter can be overwritten by the procedure or function.
IN OUT - The parameter can be referenced by the procedure or function and the value of the
parameter can be overwritten by the procedure or function.

83
Procedure body contains the SQL and PL/SQL statements to perform the procedure's task.

Exception Section: The Exception section of a PL/SQL Block starts with the reserved
keyword EXCEPTION. This section is optional. Any errors in the program can be handled in
this section, so that the PL/SQL Blocks terminates gracefully.
If the PL/SQL Block contains exceptions that cannot be handled, the Block terminates
abruptly with errors.

Exercise
Referred Tables:
Borrow(acc_no , rollno, date_issue);
1. Write a procedure to insert a record in borrower relation. Before inserting check whether
the book is available or not.

Procedure
CREATE OR REPLACE PROCEDURE PROC_BORROW(ACCNO NUMBER, ROLL
VARCHAR, DOI DATE)
IS
CNT NUMBER(5);
BEGIN
SELECT COUNT(*) INTO CNT FROM BORROW WHERE ACC_NO=ACCNO;
IF(CNT=0)
THEN
INSERT INTO BORROW VALUES (ACCNO,ROLL,DOI);
ELSE
DBMS_OUTPUT.PUT_LINE(‘BOOK NOT AVAILABLE’);
END IF;
END;
Output:
SQL> @ e:\proc.sql;
Procedure Created.
SQL> exec pro1(‘123’,’CS01’,’27-OCT-2013’);
Procedure successfully completed.
SQL> SELECT * FROM BORROW;
84
ACC_NO ROLLNO DOI
---------- ------------ ------------
123 CS01 27-OCT-2013
128 CS10 18-OCT-2013

2. Write a procedure to insert a record in borrower relation with the above constraints and
also ensure that the member has not borrowed more than three books.
Procedure
CREATE OR REPLACE PROCEDURE PROC_BORROW(ACCNO NUMBER, ROLL
VARCHAR, DOI DATE)
IS
CNT NUMBER(5);
BEGIN
SELECT COUNT(*) INTO CNT FROM BORROW WHERE ACC_NO=ACCNO;
IF(CNT=0)
THEN
SELECT COUNT(*) INTO CNT1 FROM BORROW WHERE ROLLNO=ROLL;
IF(CNT1<4)
THEN
INSERT INTO BORROW VALUES (ACCNO,ROLL,DOI);
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE(‘BOOK NOT AVAILABLE’);
END IF;
END;

85
FUNCTIONS
PL/SQL Function:
A PL/SQL function is same as a procedure except that it returns a value. A standalone
function is created using the CREATE FUNCTION statement.
Syntax
CREATE [OR REPLACE] FUNCTION function_name (parameter_name [IN | OUT |
IN OUT] type [, ...])
RETURN return_datatype
{IS | AS}
BEGIN
< function_body >
return_variable;
EXCEPTION
exception section
END;
Return Type: The header section defines the return type of the function. The return datatype
can be any of the oracle datatype like varchar, number etc. The execution and exception
section both should return a value which is of the datatype defined in the header section.
IN - The parameter can be referenced by the procedure or function. The value of the
parameter cannot be overwritten by the procedure or function.
OUT - The parameter cannot be referenced by the procedure or function, but the value of the
parameter can be overwritten by the procedure or function.
IN OUT - The parameter can be referenced by the procedure or function and the value of the
parameter can be overwritten by the procedure or function.
Procedure body contains the SQL and PL/SQL statements to perform the procedure's task.
Exception Section: The Exception section of a PL/SQL Block starts with the reserved
keyword EXCEPTION. This section is optional. Any errors in the program can be handled in
this section, so that the PL/SQL Blocks terminates gracefully. If the PL/SQL Block contains
exceptions that cannot be handled, the Block terminates abruptly with errors.
The major difference between a procedure and a function is, a function must always return a
value, but a procedure may or may not return a value.

86
Exercise
Referred Tables:
Transaction (accno number(5), amount number(7,2), trans_type varchar(5),dot date);
1. Create a function to insert the records into the transaction table, after performing each
transaction in the transaction table show the net balance of the particular account.

CREATE OR REPLACE FUNCTION FUNC_TRANS (ACC_ID NUMBER,AMNT


NUMBER,TYPE VARCHAR)
RETURN NUMBER
IS
BALANCE NUMBER;
BEGIN
INSERT INTO TRANSACTION VALUES(ACC_ID,AMNT,TYPE);
SELECT SUM(AMNT) INTO BALANCE FROM TRANSACTION WHERE
ACC_NO=ACC_ID;
RETURN BALANCE;
END;

PL/SQL FUNCTION:
DECLARE
BALANCE_AMNT NUMBER(6);
ACC_NO VARCHAR(5);
AMNT NUMBER(5);
TYPE VARCHAR(2);
RESULT NUMBER(5);
BEGIN
ACC_NO:=’&ACC_NO’;
AMNT:=’&AMNT’;
TYPE:=’&TYPE’;
BALANCE_AMNT:=FUNC1(ACC_ID,AMNT,TYPE);
DBMS_OUTPUT.PUT_LINE(‘TOTAL AMOUNT ‘|| TOTAL_AMNT);
END;
OUTPUT:
SQL> @E:\SQL\FUNCPLSQL.SQL;
87
Enter value for accno: 001
Enter value for amt: 25000
Enter value for type=’CRDT’
RESULT 26000
PL/SQL procedure successfully completed.

88
Ex.No.:6.
TRIGGERS
PL/SQL Triggers
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:
 A database manipulation (DML) statement (DELETE, INSERT, or UPDATE).
 A database definition (DDL) statement (CREATE, ALTER, or DROP).
 A database operation (SERVERERROR, LOGON, LOGOFF, STARTUP, or
SHUTDOWN).
Triggers could be defined on the table, view, schema, or database with which the event is
associated.
Benefits of Triggers
 Generating some derived column values automatically
 Enforcing referential integrity
 Event logging and storing information on table access
 Auditing
 Synchronous replication of tables
 Imposing security authorizations
 Preventing invalid transactions.

Syntax:
CREATE OR REPLACE TRIGGER < trigger_name >
{BEFORE | AFTER | INSTEAD OF }
{INSERT [OR] | UPDATE [OR] | DELETE} [OF col_name]
ON < table_name >
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
WHEN < condition >
DECLARE
< Declaration-statements >
BEGIN
< Executable-statements >
EXCEPTION

89
< Exception-handling-statements >
END;
A typical trigger has 3 main components
1. Triggering SQL Statement: - This is the DML statement which causes the triggers to be
invoked. That is it tells when to call the trigger – before or after, on which DML
statement of the table – INSERT/ UPDATE/ DELETE and whether to call trigger when
whole table is processed or only few columns are processed. BEFORE and AFTER is
used on tables and INSTEAD OF is used on views to create triggers.

2. Trigger Restriction: - This is the part of trigger which tells how many times the trigger
needs to be executed. It informs, if the trigger has to be called for each row insert
/update/delete, or only once for the transaction.

3. Trigger Action: - This part will actually perform set of transaction as result of original
DML statement.

Exercise:
Referred Tables:
Account ( accnt_no,cst_id,acnt_type,last_trans_date,balance )
Account_bckup(accnt_no,last_trans_date,balance)
Loan (ln_id,cst_id,ln_amount,ln_date);
1. Create a trigger for Account relation such that whenever a record is inserted in the
Account table the same record also gets inserted in the backup table.

CREATE OR REPLACE TRIGGER TRIG_ACNT_BCKUP AFTER INSERT ON


ACCOUNT
FOR EACH ROW
DECLARE
BEGIN
INSERT INTO ACCOUNT_BCKUP VALUES (:NEW.ACCNT_NO,
:NEW.LAST_TRANS_DATE, :NEW.BALANCE);
END;

90
Output:
SQL> @e:/plsql/accnt_trig.sql
Trigger Created.

SQL> INSERT INTO ACCOUNT VALUES (‘AC010’,’CST011’,’SVNG’,’27-AUG-


2013’,12000);
1 Row inserted.

SQL> SELECT * FROM ACCOUNT_BCKUP;


ACCNO LAST_TRANS_DATE BALANCE
---------- ------------------------- --------------
AC010 27-AUG-2013 12,000

2. Create a trigger for account relation such that whenever account record is inserted in
account relation with negative relation then that record should also be inserted in the loan
relation with positive balance.
CREATE OR REPLACE TRIGGER TRIG_LOAN AFTER INSERT ON ACCOUNT
FOR EACH ROW
DECLARE
BEGIN
IF(:NEW.BALANCE<0)
THEN
INSERT INTO LOAN VALUES (:NEW.ACCNT_NO, :NEW.CST_ID, -
(:NEW.BALANCE), SYSDATE);
END IF;
END;

Output:
SQL> @e:/plsql/loan_trig.sql
Trigger Created.

SQL> INSERT INTO ACCOUNT VALUES (‘AC011’,’CST011’,’SVNG’,’27-DEC-2013’,-


8000);
1 Row inserted.
91
SQL> SELECT * FROM LOAN;
LN_ID CST_ID LN_AMOUNT LN_DATE
---------- ------------- -------------- -----------------
AC010 CST011 8000 30-DEC-2013

92
Ex.No:7.
EXCEPTION HANDLING
Learning Material
An exception is an error condition during a program execution. PL/SQL supports
programmers to catch such conditions using EXCEPTION 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

Syntax for Exception Handling


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;
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 −

93
DECLARE
exception_name EXCEPTION;
BEGIN
IF condition THEN
RAISE exception_name;
END IF;

EXCEPTION
WHEN exception_name THENstatement;
END;

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.
The syntax for declaring an exception is:
DECLARE
my-exception EXCEPTION;
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.

Exception Description

ACCESS_INTO_NULL It is raised when a null object is automatically assigned a value.

It is raised when none of the choices in the WHEN clause of a


CASE_NOT_FOUND
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 uninitialized nested table, or the
COLLECTION_IS_NULL
program attempts to assign values to the elements of an
uninitialized nested table
It is raised when duplicate values are attempted to be stored in a
DUP_VAL_ON_INDEX
column with unique index.

94
It is raised when attempts are made to make a cursor operation
INVALID_CURSOR
that is not allowed, such as closing an unopened cursor.
It is raised when the conversion of a character string into a
INVALID_NUMBER number fails because the string does not represent a valid
number.
It is raised when a program attempts to log on to the database
LOGIN_DENIED
withan invalid username or password.

NO_DATA_FOUND It is raised when a SELECT INTO statement returns no rows.

It is raised when a database call is issued without being


NOT_LOGGED_ON
connected to the database.

PROGRAM_ERROR It is raised when PL/SQL has an internal problem.

It is raised when a cursor fetches value in a variable having


ROWTYPE_MISMATCH
incompatible data type.

It is raised when a member method is invoked, but the instance


SELF_IS_NULL
of the object type was not initialized.

It is raised when PL/SQL ran out of memory or memory was


STORAGE_ERROR
corrupted.

95
Exercise:
1. For the customer relation Customers(ID, Name, Age Address, Salary). Write a PL/SQL
block to input customerid and display address and salary. Use exception to display “ No
such customer” when data not found.

DECLARE
c_id customers.ID%type :=&c_id;
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
dbms_output.put_line('Error!');
END;
Output:
Enter the value of c_id:100
No such customer

2. For the customer relation Customers(ID, Name, Age Address, Salary). Write a PL/SQL
block to input customerid and display address and salary. Use exception to display “ No
such customer” when data not found.
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

96
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;

Output:
Enter the value of c_id:-50
ID must be greater than zero

97
Ex.No.: 8.
DATABASE DESIGN USING ER MODELING, NORMALIZATION AND
IMPLEMENTATION FOR ANY APPLICATION

Normalization
Normalization is the analysis of functional dependencies between attributes/data items of user
views. It reduces a complex user view to a set of small and stable subgroups of the fields and
relations. This process helps to design a logical data model known as conceptual data model.
There are different normal forms
1. First Normal Form(1NF)
2. Second Normal Form(2NF)
3. Third Normal Form(3NF)
First Normal Form (1NF)
1NF states that the domain of an attribute must include only atomic values and that value of
any attribute in a tuple must be a single value from the domain of that attribute. Hence 1NF
disallows multivalued attributes, composite attributes. It disallows “relations within
relations”.
Second Normal Form (2NF)
A relation is said to be in 2NF if it is already in 1NF and it has no partial dependency. 2NF is
based on the concept of full functional dependency.
A functional dependency(FD) x→y is fully functional dependency is (x-(A))→y does not
hold dependency any more if A→x.
A functional dependency x→y is partial dependency if A can be removed which does not
affect the dependency ie (x-(A))→y holds.
A relation is in 2NF if it is in 1NF and every non-primary key attribute is fully and
functionally dependent on primary key.
A relation is in 1NF will be in the 2NF if one of the following conditions is satisfied:
1. The primary key consist of only one attribute.
2. No non-key attribute exist in relation ie all the attributes in the relation are
components of the primary key.
Every non-key attribute is functionally dependent on full set of primary key attributes.
Third Normal Form (3NF)
A relation is said to be in 3NF if it is already in 2NF and it has no transitive dependency.

98
A FD x→y in a relation schema R is a transitive dependency if there is a set of attributes z
that is neither a candidate key nor a subset of any key of the relation and both x→z and z→y
hold.
Entity Relationship Diagram (ERD):
An entity relationship diagram (ERD) shows the relationships of entity sets stored in a
database. An entity in this context is an object, a component of data. An entity set is a
collection of similar entities. These entities can have attributes that define its properties.

99
100
Exercise:
Database design for property database.
E-R DIAGRAMS
1. First Normal Form

2. Second Normal Form

3. Third Normal Form

101
First Normal Form
1. Create a property table with the following fields: property id, country name, padd, area,
price, tax rate and having property id as the primary key.
SQL> create table prop(propid number(2) primary key, cname varchar(20), padd
varchar(50), area int, price number(9,2),tax_rate number(2));

SQL> desc prop;


Name Null? Type
--------------------- ---------------- -----------------------
PROPID NOT NULL NUMBER(2)
CNAME VARCHAR2(20)
PADD VARCHAR2(50)
AREA NUMBER(38)
PRICE NUMBER(9,2)
TAX_RATE NUMBER(2)
2. Insert values in the property table.
SQL> insert into prop values('34','india','ganthi nagar,Coimbatore,
india','500','500000','2');
1 row created.
SQL> insert into prop values('45','united states','first street southeast, Washington, United
states','400','2550000','5');
1 row created.
SQL> insert into prop values('39','scotland','capelrig road, Glasgow,
scotland','600','2500000','4');
1 row created.

102
Before Normalization
Prop

Propid Cname Padd Area Price Tax_rate

Normalization to First Normal Form


1. Creating the prop11 tabale with propid, cname, area,price, tax_rate from prop.
SQL> create table prop11 as select , cname, area,price, tax_rate from prop;
2. Creating the table prop12 with propid, sname,city,country from prop
SQL> create table prop12 as select propid,padd from emp;
3. Altering the table prop11 with primary key on prop.
SQL> alter table prop12 add constraint c1 foreign key(propid) references
prop11(propid);
4. Altering the table prop12 with foreign key on propid with reference from prop11.
SQL> alter table prop12 add constraint c1 foreign key(propid) references
prop11(propid);

After Normalization
Prop11

Propid Cname Area Price Tax_rate

Prop12

Propid sname City country

Second Normal Form


Normalization to Second Normal Form
1. Create the table prop21 with propid, cname, area, price from the table prop.
SQL> create table prop21 as select propid,cname,area, price from prop;
2. Create the table prop22 with cname, tax_rate from the table prop.
SQL> create table prop22 as select cname,tax_rate from prop;
3. Alter table prop21 with a primary key constraint on propid.
SQL> alter table prop21 add constraint prop21 primary key(propid);
4. Alter table prop22 with a primary key constraint on cname.
103
SQL> alter table prop22 add constraint prop22 primary key(cname);
5. Alter table prop21 with foreign key on cname with references on cname from prop22.
SQL> alter table prop21 add constraint prop212 foreign key(cname) references
prop22(cname);
After Normalization
Prop21

Propid Cname Area Price

Prop22

Cname Tax_rate

Third Normal Form


The 2NF table is given as input here and convert it to 3NF.
Input: prop21, prop22 tables.
For converting to 3NF it is enough making changes in prop21 table.
Before Normalization
Prop21

Propid Cname Area Price

1. Create table prop31 with propid, cname, area from prop21.


SQL> create table prop31 as select propid,cname,area from prop21;
2. Create table prop32 with area, price from prop21.
SQL> create table prop32 as select area, price from prop21;
3. Alter table prop31 with the constraint primary key on propid.
SQL> alter table prop31 add constraint prop31 primary key(propid);
4. Alter table prop32 with the constraint primary key on area.
SQL> alter table prop32 add constraint prop32 primary key(area);
5. Alter table prop31 with the constraint foreign key on area with refernce from area in
prop32.
SQL> alter table prop31 add constraint prop311 foreign key(area) references
prop32(area);

After Normalization
104
Prop31

Propid Cname Area

Prop32

Area Price

105
Ex.No.: 9.
GENERATION OF FORMS USING ORACLE FORM BUILDER

Use Form Builder to simplify for the creation of data-entry screens, also known as Forms.
Forms are the applications that connect to a database, retrieve information requested by the
user, present it in a layout specified by Form designer, and allow the user to modify or add
information. Form Builder allows you to build forms quickly and easily.
Form Builder Tool
Open the "Form Builder" tool.

Welcome window
You will get the ‘Welcome to the Form Builder’ window. If you don’t want to get this
window anymore uncheck the ‘Display at startup’ box. You can start your work with any of
the following options:
 Use the data Block Wizard
 Build a new form manually
 Open an existing form

Build a form based on a template


The default is ‘Use the data Block Wizard.’ If you want to build a new form manually, click
on "Cancel”or check ‘Build a new form manually’ and click ‘OK.’

Connect to database
In the ‘Object Navigator’ window, highlight "Database Objects." Go to the Main menu and
choose
"File," then "Connect."
In the ‘Connect’ window, login in as “scott” password “tiger,” then click “CONNECT.”
Notice that the box next to ‘Database Objects’ is not empty anymore and it has a ‘+’ sign in
it.
That will indicate that this item is expandable and you are able to see its entire objects.
Click on the ‘+’ sign next to the ‘Database Objects’ to expand all database schemas.

106
Create a Module
In the ‘Object Navigator’ window, highlight module1. This is a default name. Go to the Main
menu and choose “File,” select “Save as” to store the new object in the “iself” folder and save
it as customer data entry. "c:_de." In this example the ‘DE’ abbreviation stands for Data
Entry.

Create a Data Block


In the ‘Object Navigator’ window, highlight "Data Blocks,” and click on the "create” icon.
The ‘Create’ icon is in the vertical tool bar in the ‘Object Navigator’ window. It is a green ‘+’
sign. If you drag your cursor on the icon a tooltip will show ‘Create.’

New Data Block


In the ‘New Data Block’ window, choose the default option “Data Block Wizard” and click
"OK."

Welcome Data Block


In the ‘Welcome Data Block Wizard’ window click on the “NEXT” icon.

Type of Data Block


Select the type of data block you would like to create by clicking on a radio button. Select the
default option ‘Table or View’ and then click “NEXT” again.

Selecting Tables
Click on “browse.” In the ‘Tables’ window, highlight the "cust11” table; then click "OK."
Selecting columns for the Data Block Wizard
To choose all columns, click on the two arrow signs in the ‘Data Block Wizard’ window. To
choose selected columns, click on the one arrow sign. And then select all columns, and click
“next.”

Layout Wizard
End of the Data Block Wizard and beginning of the Layout Wizard In the ‘Congratulations’
screen, use the default checkmark radio button (Create the data block, then call the Layout
Wizard), and click "Finish." You can also use the Data Block Wizard to modify your existing

107
data block. Simply select the data block in the Object Navigator and click the Data Block
Wizard toolbar button, or choose ‘Data Block wizard’ from the ‘Tools’ menu.
Welcome Screen
In the ‘Welcome to the Layout Wizard’ window, click “Next.”

Selecting Canvas
In the ‘Layout Wizard’ window, select the "new canvas" option. Canvas is a place that you
will have your objects such as columns, titles, pictures, etc. If you have already had your
canvas, select the canvas and then click on the next. The following are different types of
canvases: Content, Stacked, Vertical Toolbar, Horizontal Toolbar, and Tab.
Think of the ‘Content’ canvas as one flat place to have all your objects. In the stacked canvas,
you can have multiple layers of objects and it is the same as the tab canvas. You use the
vertical or horizontal toolbar canvases for your push buttons. Check the different types of
canvases by clicking on the ‘down arrow’ box next to the ‘Type’ field. Select "content," then
click “Next.”

Selecting Columns for the Layout Wizard


In the ‘Layout Wizard’ window, select all the columns. These are the columns that you want
to be displayed on the canvas. Then click “Next.”
Change your objects appearances
Change size or prompt if needed. In this window, you can enter a prompt, width, and height
for each item on the canvas. You can change the measurement units. As a default the default
units for item width and height are points. You can change it to inch or centimeter. When you
change size, click “Next.”
Selecting a layout style
Select a layout style for your frame by clicking a radio button. Select "Form," if you want one
record at a time to be displayed. Select “Tabular,” if you want more than one record at a time
to be displayed. Select "Forms," and then click “next.”
Record layout
Type the "Frame Title" and click "next." Checkmark the ‘Display Scrollbar’ box when you
use multiple records or the ‘Tabular’ option.
Congratulation Screen
In the ‘Congratulations’ window, click "Finish."
You will see the output layout screen.
108
Make some window adjustments and then run the form. To run the form, click on the ‘Run’
icon.
The ‘Run’ icon is on the horizontal toolbar in the ‘CUSTOMER_DE’ canvas.
The object module should be compiled successfully before executing the Form.
Execute Query
Click on the "Execute Query" icon below the main menu. If you drag the cursor on the
toolbar in the ‘Forms Runtime’ window, a tooltip will be displayed and you see ‘Execute
Query.’So to know all your option, drag your cursor to view all the icon descriptions.
Next Record
Click on the "Next Record" icon to navigate to the next record.
Previous Record
Click on the "Previous Record" icon to navigate to the previous record.
This is an easy way to navigate through the “Customer” table.
Enter Query
Click on the "Enter Query" icon to query selected records.
Insert Record
Click "Insert Record" to add new customer. All items on the forms will be blanked. You can
either type all the customer information or duplicate it from pervious record.
Duplicate Record
To duplicate the previous record, go to the main menu and select the ‘Record’ sub-menu. A
drop down menu will be displayed. Select the ‘Duplicate’ option in the sub-menu.
Apply the changes. Remember in this stage, your record was inserted but not committed yet.
Next and Previous Record
Click "next record" and "previous record" to navigate through the records and the one was
added.
Save transactions
Click "Save" to commit the insert statement.
Delete Record
Click "Remove Record" to delete the record.
Lock a Record
You can also lock the record.
Exit from Form Runtime
Exit the FORM Runtime. If you have not committed any transaction, you will be prompted to
save changes. Click “YES” to save changes.
109
Click “OK” for acknowledgement.
Don’t forget to save the Form.
Sample Exercise:
Employee Information form
RABAD

Selecting the type of form to create

110
111
Selecting the canvas on which data block can be displayed

Form showing the Employee details

112
Ex.No.: 10.
DATABASE DESIGN AND IMPLEMENTATION
Exercise:
Mini project for Customer Detail Management.
Create Table Cust For Customer Details:
Query:
SQL>create table cust(custname varchar2(10),custcityvarchar2(10),accno
number(10),balance number(10));
SQL> desc cust;
Name Null? Type
---------------------- -------- -------
CUSTNAME VARCHAR2 (10)
CUSTCITY VARCHAR2 (10)
ACCNO NUMBER (10)
BALANCE NUMBER (10)
Create Table Trans for Transaction Details:
Query:
SQL>create table trans(accno number(10),amount number(10),trdate date);
SQL> desc trans;
Name Null? Type
------------------- -------- ----
ACCNO NUMBER(10)
AMOUNT NUMBER(10)
TRDATE DATE
Coding for Clear button:
commit;
clear_form;
Coding for Credit button:
update cust set balance=balance+:trans.amount where cust.accno=:trans.accno;
execute_query;
commit;

113
Design Form like this in Form Builder:

Coding for Debit button:


debit
declare
wdamount number;
begin
select balance into wdamount from cust where accno=:trans.accno;
if wdamount>=:amount then
update cust set balance = balance-:trans.amount where cust.accno=:trans.accno;
execute_query;
commit;
message('money withdraw succesfully');
else
message('you have low balance');
end if;
end;

114
After write all codings Run the Form:
The Form will like this,

After Enter the Customer Details:

115
Then press the Create Button.

MOVE TO SQL PLUS AND ENTER THE QUERY:

SQL> select *from cust;

CUSTNAME CUSTCITY ACCNO BALANCE


--------------- -------------- ------------ -------------
A ERODE 101 0

116
Then Enter Transaction Details:[For Credit]

After that press Credit Button:

117
Move to SQL Plus and enter the query:
SQL> select *from cust;
CUSTNAME CUSTCITY ACCNO BALANCE
---------------- -------------- ---------- --------------
A ERODE 101 1000

SQL> Select *from trans;


ACCNO AMOUNT TRDATE
---------- ---------- ------------
101 1000 01-MAY-09

Then Enter Transaction Details:[For Debit]


Move to SQL Plus and enter the query:
SQL> select *from cust;
CUSTNAME CUSTCITY ACCNO BALANCE
---------------- -------------- ---------- --------------
A ERODE 101 900

SQL> Select *from trans;

ACCNO AMOUNT TRDATE


----------- -------------- ------------
101 1000 01-MAY-09
101 100 02-MAY-09

118
119
Ex.No.:11

PL/SQL BLOCK

PL/SQL BLOCK:
PL/SQL is a block-structured language, meaning that PL/SQL programs are divided and
written in logical blocks of code. Each block consists of three sub-parts:
1. Declarations: This section starts with the keyword DECLARE. It is an optional
section and defines all variables, cursors, subprograms, and other elements to be used
in the program.
2. Executable Commands: This section is enclosed between the keywords BEGIN and
END and it is a mandatory section. It consists of the executable PL/SQL statements of
the program. It should have at least one executable line of code, which may be just a
NULL command to indicate that nothing should be executed.
3. Exception Handling: This section starts with the keyword EXCEPTION. This
section is again optional and contains exception(s) that handle errors in the program.
Every PL/SQL statement ends with a semicolon (;). PL/SQL blocks can be nested within
other PL/SQL blocks using BEGIN and END.
Syntax:
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling>
END;

120
Exercise:
Referred Table:
Customer(id, name, age, address, salary)
1. Create a PL/SQL Block to get id from the user and display the name address and salary of
that customer

PL/SQL BLOCK:
DECLARE
c_id customers.id%type :;
c_name customers.name%type;
c_addr customers.address%type;
c_sal customers.salary%type;
BEGIN
c_id:=&c_id;
SELECT name, address, salary INTO c_name, c_addr, c_sal
FROM customers
WHERE id = c_id;
dbms_output.put_line
('Customer ' ||c_name || ' from ' || c_addr || ' earns ' || c_sal);
END;

Output:
Customer Kumar from Arasur Coimbatore earns 25000

121
2. Create a PL/SQL block to find the factorial of a given number

PL/SQL BLOCK:
declare
n number;
fac number:=1;
i number;
begin
n:=&n;
for i in 1..n
loop
fac:=fac*i;
end loop;
dbms_output.put_line('factorial='||fac);
end;
Output:
Enter the value of n: 5
Factorial=120

122
Ex.No.:12

CREATING INDEX

Indexes are special lookup tables that the database search engine can use to speed up data
retrieval. An index is a pointer to data in a table. An index in a database is very similar to an
index in the back of a book. An index helps speed up SELECT queries and WHERE clauses,
but it slows down data input, with UPDATE and INSERT statements. Indexes can be created
or dropped with no effect on the data. Index in sql is created on existing tables to retrieve the
rows quickly. When there are thousands of records in a table, retrieving information will take
a long time. When an index is created, it first sorts the data and then it assigns a ROWID for
each row.
An index can be created in a table to find data more quickly and efficiently.
The users cannot see the indexes, they are just used to speed up searches/queries

Syntax to create Index


CREATE INDEX index_name ON table_name (column_name1,column_name2...);

Syntax to create SQL unique index


CREATE UNIQUE INDEX index_name ON table_name (column_name1,
column_name2...);
 index_name is the name of the INDEX.
 table_name is the name of the table to which the indexed column belongs.
 column_name1, column_name2..is the list of columns which make up the INDEX.

The Drop Index Command


An index can be dropped using SQL DROP command. Care should be taken when dropping
an index because performance may be slowed or improved.
DROP INDEX index_name;

Exercise:
SQL> create table persons (first name varchar (20), last name varchar(10));
Table created;
Create an index for the above relation based on last name

123
SQL> create index plndex on persons (last name);
Index created.

SQL> select * from persons; No rows selected.

SQL> drop plndex on persons;


Drop index plndex on persons
* ERROR at line1:
ORA_00950: Invalid DROP option

124

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy