Professional Documents
Culture Documents
AIM
The aim of this laboratory is to inculcate the abilities of applying the principles of the database
management systems. This course aims to prepare the students for projects where a proper
implementation of databases will be required.
OBJECTIVES
1. Data Definition Commands, Data Manipulation Commands for inserting, deleting, updating and retrieving
Tables and Transaction Control statements
2. Database Querying – Simple queries, Nested queries, Sub queries and Joins
3. Views, Sequences, Synonyms
4. Database Programming: Implicit and Explicit Cursors
5. Procedures and Functions
6. Triggers
7. Exception Handling
8. Database Design using ER modeling, normalization and Implementation for any application
9. Database Connectivity with Front End Tools
10. Case Study using real life database applications
OUTCOMES
1
Introduction to SQL
SQL stands for Structured Query Language. It is used for storing and managing data in relational
database management system (RDMS).
It is a standard language for Relational Database System. It enables a user to create, read, update and
delete relational databases and tables.
All the RDBMS like MySQL, Informix, Oracle, MS Access and SQL Server use SQL as their standard
database language.
SQL allows users to query the database in a number of ways, using English-like statements.
SQL (Structured Query Language) is a database computer language designed for the retrieval and management
of data in relational database management systems (RDBMS), database schema creation and modification, and
database object access control management.SQL is a standard supported by all the popular relational database
management systems in the market place. The basis data structure in RDBMS is a table. SQL provides you the
features to define tables, define constraints on tables, query for data in table, and change the data in table by
adding, modifying, and removing data. SQL also supports grouping of data in multiple rows, combining tables
and other features. All these put together, SQL is a high-level query language standard to access and alter data
in RDBMS.
Rules:
o Structure query language is not case sensitive. Generally, keywords of SQL are written in uppercase.
o Statements of SQL are dependent on text lines. We can use a single SQL statement on one or multiple
text line.
o Using the SQL statements, you can perform most of the actions in a database.
o SQL depends on tuple relational calculus and relational algebra.
SQL process:
o When an SQL command is executing for any RDBMS, then the system figure out the best way to carry
out the request and the SQL engine determines that how to interpret the task.
o In the process, various components are included. These components can be optimization Engine, Query
engine, Query dispatcher, classic, etc.
o All the non-SQL queries are handled by the classic query engine, but SQL query engine won't handle
logical files.
2
History of SQL:
The first version of SQL was developed at IBM by Donald D. Chamberlin and Raymond F. Boyce in the early
1970s. This version, initially called SEQUEL, was designed to manipulate and retrieve data stored in IBM's
original relational database product, System R. IBM patented their version of SQL in 1985, while the SQL
language was not formally standardized until 1986, by the American National Standards Institute (ANSI) as
SQL-86. Subsequent versions of the SQL standard have been released by ANSI and as International
Organization for Standardization (ISO) standards.
Originally designed as a declarative query and data manipulation language, variations of SQL have been
created by SQL database management system (DBMS) vendors that add procedural constructs, control-of-flow
statements, user-defined data types, and various other language extensions. With the release of the SQL:1999
standard, many such extensions were formally adopted as part of the SQL language via the SQL Persistent
Stored Modules (SQL/PSM) portion of the standard.
There are Three types of binary Data types which are given below:
binary It has a maximum length of 8000 bytes. It contains fixed-length binary data.
3
varbinary It has a maximum length of 8000 bytes. It contains variable-length binary data.
image It has a maximum length of 2,147,483,647 bytes. It contains variable-length binary data.
float -1.79E + 308 1.79E + 308 It is used to specify a floating-point value e.g. 6.2, 2.9 etc.
There are three types of binary Data types which are given below:
binary It has a maximum length of 8000 bytes. It contains fixed-length binary data.
varbinary It has a maximum length of 8000 bytes. It contains variable-length binary data.
image It has a maximum length of 2,147,483,647 bytes. It contains variable-length binary data.
4
2. Approximate Numeric Data type:
float -1.79E + 308 1.79E + 308 It is used to specify a floating-point value e.g. 6.2, 2.9 etc.
Data Description
type
char It has a maximum length of 8000 characters. It contains Fixed-length non-unicode characters.
varchar It has a maximum length of 8000 characters. It contains variable-length non-unicode characters.
Datatype Description
5
time It is used to store the hour, minute, and second values.
timestamp It stores the year, month, day, hour, minute, and the second value.
Data Description
type
char It has a maximum length of 8000 characters. It contains Fixed-length non-unicode characters.
varchar It has a maximum length of 8000 characters. It contains variable-length non-unicode characters.
Datatype Description
timestamp It stores the year, month, day, hour, minute, and the second value.
6
SQL Command
SQL defines following ways to manipulate data stored in an RDBMS.
DDL: Data Definition Language
This includes changes to the structure of the table like creation of table, altering table, deleting a table etc.
All DDL commands are auto-committed. That means it saves all the changes permanently in the
database.
Command Description
Command Description
Command Description
7
commit to permanently save
Command Description
8
Data Definition Language (DDL) commands in RDBMS.
CREATE TABLE
Example:
1. CREATE TABLE Emp ( EmpNo number(5), EName VarChar(15), Job Char(10) CONSTRAINT Unik1
UNIQUE, DeptNo number(3) CONSTRAINT FKey2 REFERENCES DEPT(DeptNo));
3.Create table prog20 (pname varchar2(20) not null, doj date not null,dob date not null, sex varchar(1) not null,
prof1 varchar(20),prof2 varchar(20),salary number(7,2) not null);
Rules:
ALTER TABLE
Example:
9
DROP TABLE
It will delete the table structure provided the table should be empty.
TRUNCATE TABLE
If there is no further use of records stored in a table and the structure has to be retained then the records
alone can be deleted.
DESC
DML commands are the most frequently used SQL commands and is used to query and manipulate the
existing database objects. Some of the commands are
o Insert
o Select
o Update
o Delete
Insert Command
This is used to add one or more rows to a table. The values are separated by commas and the data types char
and date are enclosed in apostrophes. The values must br entered in the same order as they are defined.
10
Inserting more than one record using a single insert commands:
Syntax: insert into <table name> values (&col1, &col2, ….)
Example: Insert into stud values(®, ‘&name’, &percentage);
Select Commands
It is used to retrieve information from the table. It is generally referred to as querying the table. We can either
display all columns in a table or only specify column from the table.
To select specific rows from a table we include ‘where’ clause in the select command. It can appear only after
the ‘from’ clause.
Syntax: Select column_name1, …..,column_namen from table name where condition;
Syntax: Select column_name1, …..,column_namen from table name where condition order by colmnname;
Example: Select empno, empname from emp order by empno;
11
Example: create table emp1 as select * from emp;
Update Command
It is used to alter the column values in a table. A single column may be updated or more than one column
could be updated.
Syntax:update tablename set field=values where condition;
Delete command
After inserting row in a table we can also delete them if required. The delete command consists of a from
clause followed by an optional where clause.
Syntax: Delete from table where conditions;
Solution:
Ans:
Solution:
Problem 2.3: Update the emp table to set the default commission of all employees to Rs 1000/- who are
working as managers
Solution:
Ans:
Problem 2.4: Create a pseudo table employee with the same structure as the table emp and insert rows
into the table using select clauses.
Solution:
1. Create a table employee as emp.
2. Use Select clause to perform this.
Ans:
Solution:
1. Delete the employee whose job is supervisor.
Ans:
13
Problem 2.6: Delete the rows whose empno is 7599.
Solution:
1. Delete the employee whose empno is 7599.
Ans:
Problem 2.7: List the records in the emp table orderby salary in ascending order.
Solution:
1. Use the orderby function in select clause.
Ans:
Problem 2.8: List the records in the emp table orderby salary in descending order.
Solution:
1. Use the orderby function in select clause.
Ans:
Ans:
Problem 2.10: Display deptno from the table employee avoiding the duplicated values.
Solution:
Ans:
14
1. Use SELECT FROM syntax.
2. select should include all in the given format.
3. from should include employee
4. Use the order by function empname.
Ans:
Problem 2.12: create a manager table from the emp table which should hold details aonly about the
managers.
Solution:
Ans:
Ans:
Problem 2.14: List the employee names and the department name in which they are working.
Solution:
Ans:
Selection(Various Clauses):
Group by clause
Having clause
Special Operators:
Problem 1: Display all the details of the records whose employee name starts with ‘S’.
Problem 2: Display all the details of the records whose employee name does not starts with ‘S’.
Problem 3: Display the rows whose empno ranges from 7500 to 7600.
Problem 4: Display the rows whose empno not in range from 7500 to 7600.
Problem 6: Calculate the total and average salary amount of the emptable.
Problem 7: Determine the max and min salary and rename the column as max_salary and
min_salary.
Problem 11: Display the Dob of all employees in the format “dd-mm-yy”.
16
DATA CONTROL LANGUAGE (DCL),TRANSACTION CONTROL LANGUAGE (TCL) COMMANDS
The Data Control Language (DCL) component of the SQL language is used to create privileges to allow users access to,
and manipulation of, the database. There are two main commands:
GRANT command
In order to do anything within an Oracle database you must be given the appropriate privileges. Oracle operates a closed
system in that you cannot perform any action at all unless you have been authorised to do so. This includes logging onto the
database, creating tables, views, indexes and synonyms, manipulating data (ie select, insert, update and delete) in tables
created by other users, etc.
There are many more forms of the GRANT command, but this is sufficient for this Unit.
Any combination of the above privileges is allowed. You can issue this command on any tables that you have created. For
example:
REVOKE command
For example:
Commands
1. COMMIT
PURPOSE:
To end your current transaction and make permanent all changes performed in the transaction. This command also erases all
savepoints in the transaction and releases the transaction's locks.
SYNTAX: COMMIT
SQL> COMMIT ;
Commit complete.
2. ROLLBACK
PURPOSE:
SYNTAX:
ROLLBACK
[ TO [SAVEPOINT] savepoint
Example:
Rollback complete.
DATABASE QUERYING – SIMPLE QUERIES, NESTED QUERIES, SUB QUERIES AND JOINS
Aim: To Create Table and Apply Simple Queries Nested Queries, Sub Queries and Joins.
The SQL SELECT statement is used to fetch the data from a database table which returns this data in the form
of a result table. These result tables are called result-sets.
Syntax
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.
Example
The following code is an example, which would fetch the ID, Name and Salary fields of the customers
available in CUSTOMERS table.
If you want to fetch all the fields of the CUSTOMERS table, then you should use the following query.
Query
While creating a database if we want to extract some information regarding the data in the database then we
use a Query. In other words, if we want to retrieve some data from a table or some tables that we created
earlier then we write/use a Query.
Product Table
Sub Query
If a Query that contains another Query, then the Query inside the main Query is called a Sub Queryand the
main Query is known as the parent Query. In Oracle the Sub Query will executed on the prior basis and the
result will be available to the parent Query and then the execution of the parent/main Query takes place. Sub
Queries are very useful for selecting rows from a table having a condition that depends on the data of the table
itself. A Sub Query can also be called a Nested/Inner Query. These Sub Queries can be used with:
WHERE Clause
SELECT Clause
FROM Clause
Syntax
Or
1. SELECT Col_name [, Col_name]
2. FROM table1 [,table2]
3. WHERE Col_name OPERATOR
4. (
5. SELECT Col_name [,Col_name]
6. FROM table1 [,table2]
7. [WHERE]
8. );
Now let us explain the Sub Query using all the three clauses. For that we are assuming the following tables.
STUDENT TABLE
SUBJECT TABLE
= Equals to
> Greater than
< Less than
>= Greater than Equals to
<= Less than Equals to
<> Not Equals to
Example
A Multiple Row Sub Query returns a result of multiple rows to the outer/main/parent query. It includes the
following operators:
1. IN
2. ANY
3. ALL or EXISTS
Example
Multiple Column Sub Queries are queries that return multiple columns to the outer SQL query. It uses the IN
operator for the WHERE and HAVING clause.
When we write a Sub Query in a WHERE and HAVING clause of another Sub Query then it is called a nested
Sub Query.
1. SELECT e.first_name,e.salary
2. FROM employees e
3. WHERE e.manager_id in
4. ( SELECT e.manager_id
5. FROM employees e
6. WHERE department_id in (select d.department_id
7. FROM departments d
8. WHERE d.department_name='Purchasing' ));
A Correlated Sub Query contains a reference to a table that appears in the outer query. It is used for row by
row processing, in other words the Sub Query will execute row by row for the parent query.
In nested queries, a query is written inside a query. The result of inner query is used in execution of outer
query. We will use STUDENT, COURSE, STUDENT_COURSE tables for understanding nested queries.
STUDENT
COURSE
C_ID C_NAME
C1 DSA
C2 Programming
C3 DBMS
STUDENT_COURSE
S_ID C_ID
S1 C1
S1 C3
S2 C1
S3 C2
S4 C2
S4 C3
Independent Nested Queries: In independent nested queries, query execution starts from innermost
query to outermost queries. The execution of inner query is independent of outer query, but the result of inner
query is used in execution of outer query. Various operators like IN, NOT IN, ANY, ALL etc are used in writing
independent nested queries.
IN: If we want to find out S_ID who are enrolled in C_NAME ‘DSA’ or ‘DBMS’, we can write it with the help of
independent nested query and IN operator. From COURSE table, we can find out C_ID for C_NAME ‘DSA’ or
DBMS’ and we can use these C_IDs for finding S_IDs from STUDENT_COURSE TABLE.
Note: If we want to find out names of STUDENTs who have either enrolled in ‘DSA’ or ‘DBMS’, it can be done
as:
Select S_NAME from STUDENT where S_ID IN
NOT IN: If we want to find out S_IDs of STUDENTs who have neither enrolled in ‘DSA’ nor in ‘DBMS’, it can
be done as:
The innermost query will return a set with members C1 and C3. Second inner query will return those S_IDs for
which C_ID is equal to any member of set (C1 and C3 in this case) which are S1, S2 and S4. The outermost
query will return those S_IDs where S_ID is not a member of set (S1, S2 and S4). So it will return S3.
Co-related Nested Queries: In co-related nested queries, the output of inner query depends on the row
which is being currently executed in outer query. e.g.; If we want to find out S_NAME of STUDENTs who are
enrolled in C_ID ‘C1’, it can be done with the help of co-related nested query as:
Select S_NAME from STUDENT S where EXISTS ( select * from STUDENT_COURSE SC where
S.S_ID=SC.S_ID and SC.C_ID=’C1’);
For each row of STUDENT S, it will find the rows from STUDENT_COURSE where S.S_ID = SC.S_ID and
SC.C_ID=’C1’. If for a S_ID from STUDENT S, atleast a row exists in STUDENT_COURSE SC with
C_ID=’C1’, then inner query will return true and corresponding S_ID will be returned as output.
JOINS IN ORACLE
In Oracle, a join is the most powerful operation for merging information from multiple tables based on a
common field. There are various types of joins but an INNER JOIN is the common of them.
Syntax
To understand each of the preceding joins clearly we are assuming the following "CUSTOMER" and
"ORDERS" tables:
1. Using Clause
To join a table using the USING Clause we write the following command.
Query
2. On Clause
To join a table using an ON Clause we write the following command:
Query
An Equi join is used to get the data from multiple tables where the names are common and the
columns are specified. It includes the equal ("=") operator.
Example
1. Inner Join
An Inner Join retrieves the matching records, in other words it retrieves all the rows where there is at least one
match in the tables.
Example
2. Outer Join
The records that don't match will be retrieved by the Outer join. It is of the following three types:
1. Left Outer Join
2. Right Outer Join
3. Full Outer Join
Example
Method 1
Or:
Method 2
Example
Method 1
Example
2. Non-Equi Join
A Non-Equi join is based on a condition using an operator other than equal to "=".
Example
SELECT Cust_id, Cust_name, Country, Item_ordered, Order_date
FROM Customer C, Oredrs O WHERE
C. Order_id > O.Order_id;
3. Self-join
When a table is joined to itself only then that condition is called a self-join.
Example
Example
Syntax
SELECT * FROM table_name1 CROSS JOIN table_name2;
Example
SELECT Cust_id, Cust_name, Country, Item_ordered, Order_date FROM Customer,
CROSS JOIN Orders;
The SQL Joins clause is used to combine records from two or more tables in a database. A JOIN is a means
for combining fields from two tables by using values common to each.
Now, let us join these two tables in our SELECT statement as shown below.
| 3 | kaushik | 23 | 3000 |
| 3 | kaushik | 23 | 1500 |
| 2 | Khilan | 25 | 1560 |
| 4 | Chaitali | 25 | 2060 |
Here, it is noticeable that the join is performed in the WHERE clause. Several operators can be used to join
tables, such as =, <, >, <>, <=, >=, !=, BETWEEN, LIKE, and NOT; they can all be used to join tables.
However, the most common operator is the equal to symbol.
The most important and frequently used of the joins is the INNER JOIN. They are also referred to as an
EQUIJOIN.
The INNER JOIN creates a new result table by combining column values of two tables (table1 and table2)
based upon the join-predicate. The query compares each row of table1 with each row of table2 to find all pairs
of rows which satisfy the join-predicate. When the join-predicate is satisfied, column values for each matched
pair of rows of A and B are combined into a result row.
Syntax
Example
Now, let us join these two tables using the INNER JOIN as follows −
The SQL LEFT JOIN returns all rows from the left table, even if there are no matches in the right table. This
means that if the ON clause matches 0 (zero) records in the right table; the join will still return a row in the
result, but with NULL in each column from the right table.
This means that a left join returns all the values from the left table, plus matched values from the right table or
NULL in case of no matching join predicate.
Syntax
Here, the given condition could be any given expression based on your requirement.
Example
Now, let us join these two tables using the LEFT JOIN as follows.
The SQL RIGHT JOIN returns all rows from the right table, even if there are no matches in the left table. This
means that if the ON clause matches 0 (zero) records in the left table; the join will still return a row in the result,
but with NULL in each column from the left table.
This means that a right join returns all the values from the right table, plus matched values from the left table or
NULL in case of no matching join predicate.
Syntax
Example
Now, let us join these two tables using the RIGHT JOIN as follows.
The SQL FULL JOIN combines the results of both left and right outer joins.
The joined table will contain all records from both the tables and fill in NULLs for missing matches on either
side.
Syntax
Here, the given condition could be any given expression based on your requirement.
Example
Now, let us join these two tables using FULL JOIN as follows.
If your Database does not support FULL JOIN (MySQL does not support FULL JOIN), then you can use
UNION ALL clause to combine these two JOINS as shown below.
The SQL SELF JOIN is used to join a table to itself as if the table were two tables; temporarily renaming at
least one table in the SQL statement.
Syntax
Here, the WHERE clause could be any given expression based on your requirement.
| ID | NAME | SALARY |
| 2 | Ramesh | 1500.00 |
| 2 | kaushik | 1500.00 |
| 1 | Chaitali | 2000.00 |
| 2 | Chaitali | 1500.00 |
| 3 | Chaitali | 2000.00 |
| 6 | Chaitali | 4500.00 |
| 1 | Hardik | 2000.00 |
| 2 | Hardik | 1500.00 |
| 3 | Hardik | 2000.00 |
| 4 | Hardik | 6500.00 |
| 6 | Hardik | 4500.00 |
| 1 | Komal | 2000.00 |
| 2 | Komal | 1500.00 |
| 3 | Komal | 2000.00 |
| 1 | Muffy | 2000.00 |
| 2 | Muffy | 1500.00 |
| 3 | Muffy | 2000.00 |
| 4 | Muffy | 6500.00 |
| 5 | Muffy | 8500.00 |
| 6 | Muffy | 4500.00 |
The CARTESIAN JOIN or CROSS JOIN returns the Cartesian product of the sets of records from two or more
joined tables. Thus, it equates to an inner join where the join-condition always evaluates to either True or
where the join-condition is absent from the statement.
Syntax
The basic syntax of the CARTESIAN JOIN or the CROSS JOIN is as follows −
Example
Now, let us join these two tables using CARTESIAN JOIN as follows −
Result: The Database Querying – Simple Queries, Nested Queries, Sub Queries and Joins are executed
successfully.
VIEWS, SEQUENCES, SYNONYMS
Aim:
A view is nothing more than a SQL statement that is stored in the database with an associated name. A view
is actually a composition of a table in the form of a predefined SQL query.
A view can contain all rows of a table or select rows from a table. A view can be created from one or many
tables which depends on the written SQL query to create a view.
Views, which are a type of virtual tables allow users to do the following −
Structure data in a way that users or classes of users find natural or intuitive.
Restrict access to the data in such a way that a user can see and (sometimes) modify exactly what
they need and no more.
Summarize data from various tables which can be used to generate reports.
Creating Views
Database views are created using the CREATE VIEW statement. Views can be created from a single table,
multiple tables or another view.
To create a view, a user must have the appropriate system privilege according to the specific
implementation.
You can include multiple tables in your SELECT statement in a similar way as you use them in a normal SQL
SELECT query.
Following is an example to create a view from the CUSTOMERS table. This view would be used to have
customer name and age from the CUSTOMERS table.
Sql > create view customers_view as select name, age from customers;
Now, you can query CUSTOMERS_VIEW in a similar way as you query an actual table. Following is an
example for the same.
| name | age |
| Ramesh | 32 |
| Khilan | 25 |
| kaushik | 23 |
| Chaitali | 25 |
| Hardik | 27 |
| Komal | 22 |
| Muffy | 24 |
The WITH CHECK OPTION is a CREATE VIEW statement option. The purpose of the WITH CHECK
OPTION is to ensure that all UPDATE and INSERTs satisfy the condition(s) in the view definition.
If they do not satisfy the condition(s), the UPDATE or INSERT returns an error.
The following code block has an example of creating same view CUSTOMERS_VIEW with the WITH CHECK
OPTION.
Create view customers_view as select name, age from customers Where age is not null with check
option;
The WITH CHECK OPTION in this case should deny the entry of any NULL values in the view's AGE column,
because the view is defined by data that does not have a NULL value in the AGE column.
Updating a View
A view can be updated under certain conditions which are given below −
So, if a view satisfies all the above-mentioned rules then you can update that view. The following code
block has an example to update the age of Ramesh.
This would ultimately update the base table CUSTOMERS and the same would reflect in the view itself. Now,
try to query the base table and the SELECT statement would produce the following result.
Rows of data can be inserted into a view. The same rules that apply to the UPDATE command also apply to
the INSERT command.
Here, we cannot insert rows in the CUSTOMERS_VIEW because we have not included all the NOT NULL
columns in this view, otherwise you can insert rows in a view in a similar way as you insert them in a table.
Rows of data can be deleted from a view. The same rules that apply to the UPDATE and INSERT commands
apply to the DELETE command.
This would ultimately delete a row from the base table CUSTOMERS and the same would reflect in the view
itself. Now, try to query the base table and the SELECT statement would produce the following result.
Dropping Views
Obviously, where you have a view, you need a way to drop the view if it is no longer needed. The syntax is
very simple and is given below −
SQL | SEQUENCES
Sequence is a set of integers 1, 2, 3, … that are generated and supported by some database systems to
produce unique values on demand.
A sequence is a user defined schema bound object that generates a sequence of numeric
values.
Sequences are frequently used in many databases because many applications require each row in a
table to contain a unique value and sequences provides an easy way to generate them.
The sequence of numeric values is generated in an ascending or descending order at defined
intervals and can be configured to restart when exceeds max_value.
Syntax:
Example
Example 1:
CREATE SEQUENCE sequence_1
start with 1
increment by 1
minvalue 0
maxvalue 100
cycle;
Above query will create a sequence named sequence_1.Sequence will start from 1 and will be incremented by
1 having maximum value 100. Sequence will repeat itself from start value after exceeding 100.
Example 2:
Following is the sequence query creating sequence in descending order.
Above query will create a sequence named sequence_2.Sequence will start from 100 and should be less
than or equal to maximum value and will be incremented by -1 having minimum value 1.
Example to use sequence : create a table named students with columns as id and name.
| ID | NAME |
------------------------
| 1 | Ramesh |
| 2 | Suresh |
Oracle / PLSQL: Synonyms
This Oracle tutorial explains how to create and drop synonyms in Oracle with syntax and examples.
Description
A synonym is an alternative name for objects such as tables, views, sequences, stored procedures, and
other database objects.
You generally use synonyms when you are granting access to an object from another schema and you don't
want the users to have to worry about knowing which schema owns the object.
You may wish to create a synonym so that users do not have to prefix the table name with the schema name
when using the table in a query.
Syntax
OR REPLACE
Allows you to recreate the synonym (if it already exists) without having to issue a DROP synonym
command.
PUBLIC
It means that the synonym is a public synonym and is accessible to all users. Remember though that
the user must first have the appropriate privileges to the object to use the synonym.
schema
The appropriate schema. If this phrase is omitted, Oracle assumes that you are referring to your own
schema.
object_name
The name of the object for which you are creating the synonym. It can be one of the
following:
table
view
sequence
stored procedure
function
package
materialized view
java class schema object
user-defined object
synonym
Example
example:
This first CREATE SYNONYM example demonstrates how to create a synonym called suppliers. Now,
users of other schemas can reference the table called suppliers without having to prefix the table name
with the schema named app. For example:
If this synonym already existed and you wanted to redefine it, you could always use the OR
REPLACE phrase as follows:
Drop synonym
Once a synonym has been created in Oracle, you might at some point need to drop the synonym.
Syntax
This DROP statement would drop the synonym called suppliers that we defined earlier.
Result:
PL/SQL is a block structured language. The programs of PL/SQL are logical blocks that can contain any
number of nested sub-blocks. Pl/SQL stands for "Procedural Language extension of SQL" that is used in
Oracle. PL/SQL is integrated with Oracle database (since version 7). The functionalities of PL/SQL
usually extended after each release of Oracle database. Although PL/SQL is closely integrated with SQL
language, yet it adds some programming constraints that are not available
PL/SQL includes procedural language elements like conditions and loops. It allows declaration of
constants and variables, procedures and functions, types and variable of those types and triggers. It can
support Array and handle exceptions (runtime errors). After the implementation of version 8 of Oracle
database have included features associated with object orientation. You can create PL/SQL units like
procedures, functions, packages, types and triggers, etc. which are stored in the database for reuse by
applications.
With PL/SQL, you can use SQL statements to manipulate Oracle data and flow of control statements to
process the data.
The PL/SQL is known for its combination of data manipulating power of SQL with data processing power
of procedural languages. It inherits the robustness, security, and portability of the Oracle Database.
PL/SQL is not case sensitive so you are free to use lower case letters or upper case letters except within
string and character literals. A line of PL/SQL text contains groups of characters known as lexical units. It
can be classified as follows:
o Delimeters
o Identifiers
o Literals
The PL/SQL programming language was developed by Oracle Corporation in the late 1980s as
procedural extension language for SQL and the Oracle relational database. Following are notable facts
about PL/SQL:
PL/SQL is not a stand-alone programming language; it is a tool within the Oracle programming
environment. SQL* Plus is an interactive tool that allows you to type SQL and PL/SQL statements at the
command prompt. These commands are then sent to the database for processing. Once the statements
are processed, the results are sent back and displayed on screen.
To run PL/SQL programs, you should have Oracle RBDMS Server installed in your machine which will
take care of executing SQL commands. Most recent version of Oracle RDBMS is 11g. You can download
a trial version of Oracle 11g from the following link:
You will have to download either 32bit or 64 bit version of the installation as per your operating system.
Usually there are two files, as I have downloaded for 64 bit Windows7. You will also use similar steps on
your operating system, does not matter if it is Linux or Solaris.
win64_11gR2_database_1of2.zip
win64_11gR2_database_2of2.zip
Text Editor
Running large programs from command prompt may land you in inadvertently losing some of the work. So
a better option is to use command files. To use the command files:
Type your code in a text editor, like Notepad, Notepad+, or EditPlus, etc.
Save the file with the .sql extension in the home directory.
Launch SQL*Plus command prompt from the directory where you created your PL/SQL file.
Type @file_name at the SQL*Plus command prompt to execute your program.
If you are not using a file to execute PL/SQL scripts, then simply copy your PL/SQL code and then right
click on the black window having SQL prompt and use paste option to paste complete code at the
command prompt. Finally, just press enter to execute the code, if it is not already executed.
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:
Every PL/SQL statement ends with a semicolon (;). PL/SQL blocks can be nested within other PL/SQL
blocks using BEGIN and END. Here is the basic structure of a PL/SQL block:
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling>
END;
The 'Hello World' Example:
DECLARE
message varchar2(20):= 'Hello, World!';
BEGIN
dbms_output.put_line(message);
END;
/
The end; line signals the end of the PL/SQL block. To run the code from SQL command line, you may
need to type / at the beginning of the first blank line after the last line of the code. When the above code is
executed at SQL prompt, it produces following result:
Hello World
PL/SQL procedure successfully completed.
PL/SQL variables, constants and parameters must have a valid data type which specifies a storage
format, constraints, and valid range of values. This tutorial will take you through SCALAR and LOB data
types available in PL/SQL and other two data types will be covered in other chapters.
Category Description
Single values with no internal components, such as a NUMBER, DATE, or
Scalar
BOOLEAN.
Pointers to large objects that are stored separately from other data items, such
Large Object (LOB)
as text, graphic images, video clips, and sound waveforms.
Data items that have internal components that can be accessed individually.
Composite
For example, collections and records.
Reference Pointers to other data items.
PL/SQL Scalar Data Types and Subtypes come under the following categories:
PL/SQL provides subtypes of data types. For example, the data type NUMBER has a subtype called
INTEGER. You can use subtypes in your PL/SQL program to make the data types compatible with data
types in other programs while embedding PL/SQL code in another program, such as a Java program.
Following is the detail of PL/SQL pre-defined numeric data types and their sub-types:
DECLARE
num1 INTEGER;
num2 REAL;
num3 DOUBLE PRECISION;
BEGIN
null;
END;
/
When the above code is compiled and executed, it produces the following result:
Following is the detail of PL/SQL pre-defined character data types and their sub-types:
The BOOLEAN data type stores logical values that are used in logical operations. The logical values are
the Boolean values TRUE and FALSE and the value NULL.
However, SQL has no data type equivalent to BOOLEAN. Therefore, Boolean values cannot be used in:
SQL statements
Built-in SQL functions (such as TO_CHAR)
PL/SQL functions invoked from SQL statements
PL/SQL Datetime and Interval Types
The DATE datatype to store fixed-length datetimes, which include the time of day in seconds since
midnight. Valid dates range from January 1, 4712 BC to December 31, 9999 AD.
The default date format is set by the Oracle initialization parameter NLS_DATE_FORMAT. For example,
the default might be 'DD-MON-YY', which includes a two-digit number for the day of the month, an
abbreviation of the month name, and the last two digits of the year, for example, 01-OCT-12.
Each DATE includes the century, year, month, day, hour, minute, and second. The following table shows
the valid values for each field:
Large object (LOB) data types refer large to data items such as text, graphic images, video clips, and
sound waveforms. LOB data types allow efficient, random, piecewise access to this data. Following are
the predefined PL/SQL LOB data types:
A subtype is a subset of another data type, which is called its base type. A subtype has the same valid
operations as its base type, but only a subset of its valid values.
PL/SQL predefines several subtypes in package STANDARD. For example, PL/SQL predefines the
subtypes CHARACTER and INTEGER as follows:
You can define and use your own subtypes. The following program illustrates defining and using a user-
defined subtype:
DECLARE
SUBTYPE name IS char(20);
SUBTYPE message IS varchar2(100);
salutation name;
greetings message;
BEGIN
salutation := 'Reader ';
greetings := 'Welcome to the World of PL/SQL';
dbms_output.put_line('Hello ' || salutation || greetings);
END;
/
When the above code is executed at SQL prompt, it produces the following result:
NULLs in PL/SQL
PL/SQL NULL values represent missing or unknown data and they are not an integer, a character, or any
other specific data type. Note that NULL is not the same as an empty data string or the null character
value '\0'. A null can be assigned but it cannot be equated with anything, including itself.
PL/SQL - Variables
The name of a PL/SQL variable consists of a letter optionally followed by more letters, numerals, dollar
signs, underscores, and number signs and should not exceed 30 characters. By default, variable names
are not case-sensitive. You cannot use a reserved PL/SQL keyword as a variable name.
PL/SQL variables must be declared in the declaration section or in a package as a global variable. When
you declare a variable, PL/SQL allocates memory for the variable's value and the storage location is
identified by the variable name.
Where, variable_name is a valid identifier in PL/SQL, datatype must be a valid PL/SQL data type or any
user defined data type which we already have discussed in last chapter. Some valid variable declarations
along with their definition are shown below:
Whenever you declare a variable, PL/SQL assigns it a default value of NULL. If you want to initialize a
variable with a value other than the NULL value, you can do so during the declaration, using either of the
following:
For example:
counter binary_integer := 0;
greetings varchar2(20) DEFAULT 'Have a Good Day';
You can also specify that a variable should not have a NULL value using the NOT NULL constraint. If you
use the NOT NULL constraint, you must explicitly assign an initial value for that variable.
It is a good programming practice to initialize variables properly otherwise, sometime program would
produce unexpected result. Try the following example which makes use of various types of variables:
DECLARE
a integer := 10;
b integer := 20;
c integer;
f real;
BEGIN
c := a + b;
dbms_output.put_line('Value of c: ' || c);
f := 70.0/3.0;
dbms_output.put_line('Value of f: ' || f);
END;
/
Value of c: 30
Value of f: 23.333333333333333333
PL/SQL allows the nesting of Blocks, i.e., each program block may contain another inner block. If a
variable is declared within an inner block, it is not accessible to the outer block. However, if a variable is
declared and accessible to an outer Block, it is also accessible to all nested inner Blocks. There are two
types of variable scope:
Local variables - variables declared in an inner block and not accessible to outer blocks.
Global variables - variables declared in the outermost block or a package.
Following example shows the usage of Local and Global variables in its simple form:
DECLARE
-- Global variables
num1 number := 95;
num2 number := 85;
BEGIN
dbms_output.put_line('Outer Variable num1: ' || num1);
dbms_output.put_line('Outer Variable num2: ' || num2);
DECLARE
-- Local variables
num1 number := 195;
num2 number := 185;
BEGIN
dbms_output.put_line('Inner Variable num1: ' || num1);
dbms_output.put_line('Inner Variable num2: ' || num2);
END;
END;
/
Control Structures
In addition to SQL commands,PL/SQL can also process data usin flow of statements.the flow of control
statements are classified into the following categories.
BRANCHING in PL/SQL:
1.Simple IF
2.ELSIF
3.ELSE IF
SIMPLE IF:
Syntax:
IF condition THEN statement1; statement2;
END IF;
IF-THEN-ELSE STATEMENT:
Syntax:
ELSIF STATEMENTS:
Syntax:
NESTED IF:
Syntax:
SIMPLE CASE
Syntax:
CASE SELECTOR
WHEN Expr1 THEN statement1;
WHEN Expr2 THEN statement2;
:
ELSE statement n;
END CASE;
SEARCHED CASE:
CASE
WHEN searchcondition1 THEN statement1;
WHEN searchcondition2 THEN statement2;
:
:
ELSE
statement n;
END CASE;
ITERATIONS IN PL/SQL
Sequence of statements can be executed any number of times using loop construct. It
is broadly classified into:
· Simple Loop
· For Loop
· While Loop
SIMPLE LOOP
Syntax:
LOOP
statement1;
EXIT [WHEN Condition];
END LOOP;
Example:
Declare
A number:=10;
Begin
Loop
a := a+25;
exit when a=250;
end loop;
dbms_output.put_line(to_char(a));
end;
/
WHILE LOOP
Syntax
Example:
Declare
i number:=0;
j number:=0;
begin
While i<=100 Loop
j := j+i;
i := i+2;
end loop;
dbms_output.put_line(‘the value of j is’ ||j); end;
/
FOR LOOP
Syntax:
Example:
Begin
For I in 1..2
Loop
Update emp set field = value where condition
End loop;
End;
/
8.PL/SQL Programs
Program write a pl/sql program to swap two numbers without taking third variable
declare
a number(10);
b number(10);
begin
a:=&a;
b:=&b;
dbms_output.put_line('THE PREV VALUES OF A AND B WERE');
dbms_output.put_line(a);
dbms_output.put_line(b);
a:=a+b;
b:=a-b;
a:=a-b;
dbms_output.put_line('THE VALUES OF A AND B ARE');
dbms_output.put_line(a);
dbms_output.put_line(b);
end;
OUTPUT:
SQL> @ SWAPPING.SQL 17
/
Enter value for a: 5
old 5: a:=&a; new 5:
a:=5; Enter value for
b: 3 old 6: b:=&b;
new 6: b:=3;
THE PREV VALUES OF A AND B WERE 5 3
Program: Write a pl/sql program to swap two numbers by taking third variable
declare
a number(10);
b number(10);
c number(10);
begin
OUTPUT:
SQL> @ SWAPPING2.SQL 19 /
Enter value for a: 5 old 6: a:=&a; new 6:
a:=5; Enter value for b: 3 old 7: b:=&b;
new 7: b:=3;
THE PREV VALUES OF A AND B WERE 5 3
declare
a number; b number; begin a:=&a; b:=&b;
if a=b then
dbms_output.put_line('BOTH ARE EQUAL');
elsif a>b then
dbms_output.put_line('A IS GREATER');
else
dbms_output.put_line('B IS GREATER');
end if;
end;
OUTPUT:
SQL> @ GREATESTOF2.sql 13
/
Enter value for a: 5
old 5: a:=&a; new 5:
a:=5; Enter value for
b: 2 old 6: b:=&b;
new 6: b:=2;
A IS GREATER
Program 6.4:write a pl/sql program to find the total and average of 6 subjects and display the grade
declare
java number(10);
dbms number(10);
co number(10);
se number(10);
es number(10);
ppl number(10);
total number(10);
avgs number(10);
per number(10);
begin
OUTPUT:
SQL> @ GRADE.sql
31 /
Enter value for java: 80 old
12: java:=&java; new 12:
java:=80; Enter value for
dbms: 70 old 13:
dbms:=&dbms; new 13:
dbms:=70; Enter value for
co: 89 old 14: co:=&co;
new 14: co:=89; Enter
value for se: 72 old 15:
se:=&se; new 15:
se:=72; Enter value for
es: 76 old 16: es:=&es;
new 16: es:=76;
Enter value for ppl: 71
old 17: ppl:=&ppl; new
17: ppl:=71; GRADE A
PERCENTAGE IS 76
TOTAL IS 458
PL/SQL procedure successfully completed.
Program 6.5:
OUTPUT:
SQL> @ SUMOFDIGITS.sql
16 /
declare
a number; rev number; d
number; begin a:=&a; rev:=0;
while a>0 loop
d:=mod(a,10);
rev:=(rev*10)+d;
a:=trunc(a/10); end loop;
dbms_output.put_line('no is'|| rev); end;
OUTPUT:
SQL> @ REVERSE2.sql 16 /
Enter value for a: 536
old 6: a:=&a;
new 6: a:=536;
no is635
Program 6.7:
Write a pl/sql program to check whether the given number is prime or not
declare
a number;
c number:=0; i number; begin
a:=&a;
for i in 1..a loop
if mod(a,i)=0 then c:=c+1;
end if; end loop; if c=2 then
dbms_output.put_line(a ||'is a prime number'); else
dbms_output.put_line(a ||'is not a prime number'); end if;
end;
OUTPUT:
SQL> @ PRIME.SQL 19 /
Enter value for a: 11 old 6: a:=&a;
new 6: a:=11;
11is a prime number
Program 6.8:
Write a pl/sql program to find the factorial of a given number
declare
n number;
f number:=1;
begin n:=&n;
for i in 1..n
loop f:=f*i;
end loop;
dbms_output.put_line('the factorial is'|| f);
end;
OUTPUT:
SQL> @ FACTORIAL.sql 12
/
Enter value for n: 5
old 5: n:=&n;
Program 6.9:write a pl/sql code block to calculate the area of a circle for a value of radius
varying from 3 to 7.
Store the radius and the corresponding values of calculated area in an empty table named
areas, consisting of two columns radius & area
Table created.
--PROGRAM
declare
pi constant number(4,2):=3.14;
radius number(5):=3;
area number(6,2);
begin
while radius<7
loop
area:=pi*power(radius,2);
insert into areas values(radius,area);
radius:=radius+1;
end loop;
end;
OUTPUT:
SQL> @ AREAOFCIRCLE.SQL 13 /
PL/SQL procedure successfully completed.
SQL> SELECT * FROM AREAS;
RADIUS AREA
---------- ----------
3 28.26
4 50.24
5 78.5
6 113.04
Program 6.10:write a pl/sql code block that will accept an account number from the user,check if the
users balance is less than minimum balance,only then deduct rs.100/- from the balance.this process is
fired on the acct table.
--PROGRAM
declare
mano number(5);
mcb number(6,2);
minibal constant number(7,2):=1000.00;
fine number(6,2):=100.00;
begin
mano:=&mano;
select cur_bal into mcb from acct where acctno=mano; if
mcb<minibal then
update acct set cur_bal=cur_bal-fine where acctno=mano; end
if;
end;
OUTPUT:
SQL> @ BANKACC.sql 13 /
Enter value for mano: 855 old 7:
mano:=&mano; new 7: mano:=855;
Exception Handling
PL/SQL provides a feature to handle the Exceptions which occur in a PL/SQL Block known as exception Handling. Using
Exception Handling we can test the code and avoid it from exiting abruptly.
When an exception is raised, Oracle searches for an appropriate exception handler in the exception section. For example in
the above example, if the error raised is 'ex_name1 ', then the error is handled according to the statements under it. Since, it
is not possible to determine all the possible runtime errors during testing fo the code, the 'WHEN Others' exception is used to
manage the exceptions that are not explicitly handled. Only one exception can be raised in a Block and the control does not
return to the Execution Section after the error is handled.
If there are nested PL/SQL blocks like this.
DELCARE
Declaration section
BEGIN
DECLARE
Declaration section
BEGIN
Execution section
EXCEPTION
Exception section
END;
EXCEPTION
Exception section
END;
In the above case, if the exception is raised in the inner block it should be handled in the exception block of the inner PL/SQL
block else the control moves to the Exception block of the next upper PL/SQL Block. If none of the blocks handle the
exception the program ends abruptly with an error.
3) Types of Exception.
System exceptions are automatically raised by Oracle, when a program violates a RDBMS rule. There are some system
exceptions which are raised frequently, so they are pre-defined and given a name in Oracle which are known as Named
System Exceptions.
For example: NO_DATA_FOUND and ZERO_DIVIDE are called Named System exceptions.
For Example: Suppose a NO_DATA_FOUND exception is raised in a proc, we can write a code to handle the exception as
given below.
BEGIN
Execution section
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line ('A SELECT...INTO did not return any row.');
END;
b) Unnamed System Exceptions
Those system exception for which oracle does not provide a name is known as unamed system exception. These exception
do not occur frequently. These Exceptions have a code and an associated message.
We can assign a name to unnamed system exceptions using a Pragma called EXCEPTION_INIT.
EXCEPTION_INIT will associate a predefined Oracle error number to a programmer_defined exception name.
The general syntax to declare unnamed system exception using EXCEPTION_INIT is:
DECLARE
exception_name EXCEPTION;
PRAGMA
EXCEPTION_INIT (exception_name, Err_code);
BEGIN
Execution section
EXCEPTION
WHEN exception_name THEN
handle the exception
END;
For Example: Lets consider the product table and order_items table from sql joins.
Here product_id is a primary key in product table and a foreign key in order_items table.
If we try to delete a product_id from the product table when it has child records in order_id table an exception will be thrown
with oracle code number -2292.
We can provide a name to this exception and handle it in the exception section as given below.
DECLARE
Child_rec_exception EXCEPTION;
PRAGMA
EXCEPTION_INIT (Child_rec_exception, -2292);
BEGIN
Delete FROM product where product_id= 104;
EXCEPTION
WHEN Child_rec_exception
THEN Dbms_output.put_line('Child records are present for this product_id.');
END;
/
c) User-defined Exceptions
Apart from sytem exceptions we can explicity define exceptions based on business rules. These are known as user-defined
exceptions.
For Example: consider the product table and order_items table from sql joins to explain user-defined exception.
Lets create a business rule that if the total no of units of any particular product sold is more than 20, then it is a huge quantity
and a special discount should be provided.
DECLARE
huge_quantity EXCEPTION;
CURSOR product_quantity is
SELECT p.product_name as name, sum(o.total_units) as units
FROM order_tems o, product p
WHERE o.product_id = p.product_id;
quantity order_tems.total_units%type;
up_limit CONSTANT order_tems.total_units%type := 20;
message VARCHAR2(50);
BEGIN
FOR product_rec in product_quantity LOOP
quantity := product_rec.units;
IF quantity > up_limit THEN
message := 'The number of units of product ' || product_rec.name ||
' is more than 20. Special discounts should be provided.
Rest of the records are skipped. '
RAISE huge_quantity;
ELSIF quantity < up_limit THEN
v_message:= 'The number of unit is below the discount limit.';
END IF;
dbms_output.put_line (message);
END LOOP;
EXCEPTION
WHEN huge_quantity THEN
dbms_output.put_line (message);
END;
/
RAISE_APPLICATION_ERROR ( )
RAISE_APPLICATION_ERROR is a built-in procedure in oracle which is used to display the user-defined error messages
along with the error number whose range is in between -20000 and -20999.
Whenever a message is displayed using RAISE_APPLICATION_ERROR, all previous transactions which are not committed
within the PL/SQL Block are rolled back automatically (i.e. change due to INSERT, UPDATE, or DELETE statements).
DECLARE
huge_quantity EXCEPTION;
CURSOR product_quantity is
SELECT p.product_name as name, sum(o.total_units) as units
FROM order_tems o, product p
WHERE o.product_id = p.product_id;
quantity order_tems.total_units%type;
up_limit CONSTANT order_tems.total_units%type := 20;
message VARCHAR2(50);
BEGIN
FOR product_rec in product_quantity LOOP
quantity := product_rec.units;
IF quantity > up_limit THEN
RAISE huge_quantity;
ELSIF quantity < up_limit THEN
v_message:= 'The number of unit is below the discount limit.';
END IF;
Dbms_output.put_line (message);
END LOOP;
EXCEPTION
WHEN huge_quantity THEN
raise_application_error(-2100, 'The number of unit is above the discount limit.');
END;
/
1)Program:Write a pl/sql Exception handling program for data not found error.
declare
n emp.ename%type;
s emp.sal%type;
begin
select sal into s
from emp
where ename = '&n';
dbms_output.put_line('Salary is '|| s);
Exception
When NO_DATA_FOUND then
dbms_output.put_line('No record');
end;
2)Program:Write a pl/sql Exception handling program for too many rows error.
declare
s emp.sal%type;
begin
select sal into s
from emp;
dbms_output.put_line('The salary is '|| s );
Exception
When TOO_MANY_ROWS then
dbms_output.put_line('Variable can hold only one value at a time');
dbms_output.put_line('Please specify the name of person for getting the salary');
end;
declare
x number;
y number;
z number;
begin
x := &x;
y := &y;
z := x/y;
dbms_output.put_line('The answer is ' || z);
Exception
When ZERO_DIVIDE then
dbms_output.put_line('Cannot divide by zero!!!');
end;
4) Program:Write a pl/sql Exception handling program for duplicate value on index error.
DUP_VAL_ON_INDEX error (When a duplicate value is entered in a column having Unique constraint)
declare
e emp.empno%type;
begin
e := &e;
insert into emp (empno )
values(e);
dbms_output.put_line('Successful');
Exception
When DUP_VAL_ON_INDEX then
dbms_output.put_line('Value already exists');
end;
declare
n number;
begin
n := '&n';
dbms_output.put_line(n);
Exception
When VALUE_ERROR then
dbms_output.put_line('Please enter number only');
end;
6) OTHERS (If no error handler works then at least OTHERS will work)
declare
x number;
y number;
z number;
begin
x := &x;
y := &y;
z := x/y;
dbms_output.put_line('The answer is ' || z);
Exception
When too_many_rows then
dbms_output.put_line('More than one value');
When no_data_found then
dbms_output.put_line('No value');
/*When OTHERS then
dbms_output.put_line('Some run time error has occurred');
dbms_output.put_line('Please execute the program again with proper values.');
rollback;*/
end;
Pragma Exception
PRAGMA .-> PRAGMA EXCEPTION_INIT tells the compiler to associate an exception name with an Oracle error number.
That allows you to refer to any internal exception by name and to write a specific handler for it.
declare
referential_integrity EXCEPTION;
PRAGMA EXCEPTION_INIT( referential_integrity, -2292);
begin
Delete from dept1
where deptno = &deptno;
commit;
exception
when referential_integrity then
dbms_output.put_line('The record cannot be deleted, because related record found in emp1 table');
end;
SQLCODE -> Returns the numeric value for the error code.
SQLERRM -> Returns the message associated with the error number.
declare
s emp.sal%type;
v_error_code number;
v_error_message varchar2(255);
begin
select sal into s from emp;
exception
when others then
v_error_code := SQLCODE;
v_error_message := SQLERRM;
Insert into error_log values(v_error_code, v_error_message);
commit;
end;
Exception Handlers in nested block to continue after run time error comes
declare
loan_amt number;
no_of_months number;
installment_rate number;
roi number;
tot_amt number;
begin
loan_amt := &loan_amt;
no_of_months := & no_of_months;
begin
installment_rate := loan_amt / no_of_months;
exception
when zero_divide then
no_of_months := 3;
installment_rate := loan_amt / no_of_months;
end;
/* In any case the last 3 lines will get executed */
roi := installment_rate * 0.2; -- 20% roi
tot_amt := roi loan_amt;
dbms_output.put_line('The total amount to be paid is '|| tot_amt);
end;
User-defined Exceptions
User-defined exceptions need to be defined in the declarative part of a PL/SQL block, subprogram or database trigger
Declared by naming the exception and defining it as datatype EXCEPTION
Example
DECLARE
past_due EXCEPTION;
zero_error EXCEPTION;
RAISE statement for a given expression can be coded anywhere within the scope of that expression
An exception raised inside a handler immediately propagates to the enclosing block, which is searched to find a handler for
the newly raised exception
From there on, the exception propagates normally
To re-raise an exception place a RAISE statement in its local handler
declare
p number;
n number := 6;
si number;
r number := 10.5;
EX exception;
Begin
p := &p;
if p < 100 then
raise EX;
else
si := (p * n * r) / 100;
dbms_output.put_line('The Simple Interest is '|| si);
end if;
Exception
When EX then
dbms_output.put_line('The principle amt should be greater than or equal to 100.');
end;
RAISE_application_error
This can be used to create user defined error message, which can be more descriptive than named exceptions.
Syntax - :
Raise_application_error(error number,error message);
where error number is any parameter between -20,000 and -20,999.Error message is text that is associated with this error.
The message parameter must be less than 512 characters.
Example of Raise_application_error
declare
maths number;
Begin
maths := &maths;
if maths < 35 then
raise_application_error(-20001,'Failed');
else
dbms_output.put_line('Passed');
end if;
end;
declare
x number;
begin
x := '&x';
if x < 0 then
raise_application_error(-20009,'ty');
end if;
exception
when value_error then
dbms_output.put_line('ff');
end;
DATABASE PROGRAMMING: IMPLICIT AND EXPLICIT CURSORS
Aim:
PL/SQL - Cursors
Oracle creates a memory area, known as the context area, for processing an SQL statement, which
contains all the information needed for processing the statement; for example, the number of rows
processed, etc.
A cursor is a pointer to this context area. PL/SQL controls the context area through a cursor. A cursor holds
the rows (one or more) returned by a SQL statement. The set of rows the cursor holds is referred to as the
active set.
You can name a cursor so that it could be referred to in a program to fetch and process the rows returned by
the SQL statement, one at a time. There are two types of cursors −
Implicit cursors
Explicit cursors
Implicit Cursors
Implicit cursors are automatically created by Oracle whenever an SQL statement is executed, when there is
no explicit cursor for the statement. Programmers cannot control the implicit cursors and the information in it.
Whenever a DML statement (INSERT, UPDATE and DELETE) is issued, an implicit cursor is associated with
this statement. For INSERT operations, the cursor holds the data that needs to be inserted. For UPDATE and
DELETE operations, the cursor identifies the rows that would be affected.
In PL/SQL, you can refer to the most recent implicit cursor as the SQL cursor, which always has attributes
such as %FOUND, %ISOPEN, %NOTFOUND, and %ROWCOUNT. The SQL cursor has additional attributes,
%BULK_ROWCOUNT and BULK_EXCEPTIONS, designed for use with the FORALL statement. The
following table provides the description of the most used attributes
−
S.No Attribute & Description
%FOUND Returns TRUE if an INSERT, UPDATE, or DELETE statement affected one or more
1
rows or a SELECT INTO statement returned one or more rows. Otherwise, it returns FALSE.
%ISOPEN Always returns FALSE for implicit cursors, because Oracle closes the SQL cursor
3 automatically after executing its associated SQL statement.
Any SQL cursor attribute will be accessed as sql%attribute_name as shown below in the example.
Example
We will be using the CUSTOMERS table we had created and used in the previous chapters.
The following program will update the table and increase the salary of each customer by 500 and use the
SQL%ROWCOUNT attribute to determine the number of rows affected −
DECLARE
total_rows number(2);
BEGIN
UPDATE customers
SET salary = salary + 500;
IF sql%notfound THEN dbms_output.put_line('no
customers selected');
ELSIF sql%found THEN
total_rows := sql%rowcount;
dbms_output.put_line( total_rows || ' customers selected ');
END IF;
END;
/
When the above code is executed at the SQL prompt, it produces the following result −
6 customers selected
If you check the records in customers table, you will find that the rows have been updated −
Explicit Cursors
Explicit cursors are programmer-defined cursors for gaining more control over the context area. An explicit
cursor should be defined in the declaration section of the PL/SQL Block. It is created on a SELECT
Statement which returns more than one row.
Declaring the cursor defines the cursor with a name and the associated SELECT statement. For
example −
OPEN c_customers;
Fetching the cursor involves accessing one row at a time. For example, we will fetch rows from the above-
opened cursor as follows −
Closing the cursor means releasing the allocated memory. For example, we will close the above- opened
cursor as follows −
CLOSE c_customers;
Example
DECLARE
c_id customers.id%type;
c_name customerS.No.ame%type;
c_addr customers.address%type;
CURSOR c_customers is
SELECT id, name, address FROM customers; BEGIN
OPEN c_customers;
LOOP
FETCH c_customers into c_id, c_name, c_addr; EXIT
WHEN c_customers%notfound;
dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr); END
LOOP;
CLOSE c_customers;
END;
/
When the above code is executed at the SQL prompt, it produces the following result − 1
Ramesh Ahmedabad
2 Khilan Delhi
3 kaushik Kota
4 Chaitali Mumbai
5 Hardik Bhopal
6 Komal MP
PL/SQL procedure successfully completed.
In continuation of my previous article about Oracle Cursors, here I will share the use of cursors for loops with
an appropriate example.
The process of opening, fetching, and closing is handled implicitly by a cursors FOR LOOP. If there is a need
to FETCH and PROCESS each and every record from a cursor , the cursor FOR LOOP is helpful for that.
Let's learn about the implicit cursor for loop using the following table ORDERS and example:
Note: Here, an implicit cursor FOR LOOP statement prints the name of the supplier and supplier id of the
entire item named as DEO whose customer has an ID greater than 100.
1. BEGIN
2. //Beginning of FOR LOOP//
3. FOR item IN (
4. SELECT ,supp_id,supp_name
5. FROM Orders
6. WHERE Supp_id LIKE '%DEO%'
7. AND Customer_id > 120
8. ORDER BY supp_name
9. )
10. LOOP
11. DBMS_OUTPUT.PUT_LINE
12. ('Supplier Name = ' || item.supp_name || ', Supplier ID = ' || item.Supp_id);
13. END LOOP;
14. //End of FOR LOOP//
15. END;
Result
Supp_id Supp_name
Supplier ID = 111 Supplier Name = AAA
Supplier ID = 555 Supplier Name = EEE
Supplier ID = 777 Supplier Name = GGG
Note: In the following example, an explicit cursor FOR LOOP statement prints the name of the supplier and
supplier id of the entire item named PERFUME whose customer has an ID lesser than 100.
1. DECLARE
2. CURSOR C1 IS
3. SELECT ,supp_id,supp_name
4. FROM Orders
5. WHERE Supp_id LIKE '%PERFUME%'
6. AND Customer_id < 100
7. ORDER BY supp_name;
8. BEGIN
9.
10. //Beginning of FOR LOOP//
11. FOR item IN C1
12. LOOP
13. DBMS_OUTPUT.PUT_LINE
14. ('Supplier Name = ' || item.supp_name || ', Supplier ID = ' || item.Supp_id);
15. END LOOP;
16. //End of FOR LOOP//
17.
18. END;
Result
Supp_id Supp_name
Supplier ID = 222 Supplier Name = BBB
Supplier ID = 666 Supplier Name = FFF
Cursors can be nested, in other words a cursor can have another cursor inside it.
If there is one main cursor called a parent cursor and two small/child cursors then each time the main cursor
makes a single loop, it will loop through each small cursor once and then begin a second round.
1.
DECLARE
2. cur_zip zipcode.zip%TYPE;
3. //Cursor one cur_zip//
4. CURSOR a_zip IS
5. // variable a_zip initialised//
6. SELECT zip, city, state
7. FROM zipcode
8. WHERE state = 'CT';
9. CURSOR c_Customer IS
10. SELECT first_name, last_name
11. FROM Customer
12. WHERE zip = cur_zip;
13. BEGIN
14. FOR b_zip IN a_zip
15. LOOP
16. cur_zip := b_zip.zip;
17. DBMS_OUTPUT.PUT_LINE (CHR(10));
18. DBMS_OUTPUT.PUT_LINE ('Customers living in '||
19. b_zip.city);
20. FOR b_customer in cur1_customer
21. LOOP
22. DBMS_OUTPUT.PUT_LINE (b_customer.first_name||
23. ' '||b_customer.last_name);
24. END LOOP;
25. END LOOP;
26. END;
Result:
Data base created and applied Implicit and Explicit Cursors in a database.
Aim:
PL/SQL - Procedures
A subprogram is a program unit/module that performs a particular task. These subprograms are combined to
form larger programs. This is basically called the 'Modular design'. A subprogram can be invoked by another
subprogram or program which is called the calling program.
At the schema level, subprogram is a standalone subprogram. It is created with the CREATE PROCEDURE
or the CREATE FUNCTION statement. It is stored in the database and can be deleted with the DROP
PROCEDURE or DROP FUNCTION statement.
A subprogram created inside a package is a packaged subprogram. It is stored in the database and can be
deleted only when the package is deleted with the DROP PACKAGE statement. We will discuss packages in
the chapter 'PL/SQL - Packages'.
PL/SQL subprograms are named PL/SQL blocks that can be invoked with a set of parameters. PL/SQL
provides two kinds of subprograms −
Functions − These subprograms return a single value; mainly used to compute and return a value.
Procedures − These subprograms do not return a value directly; mainly used to perform an action.
This chapter is going to cover important aspects of a PL/SQL procedure. We will discuss PL/SQL function in
the next chapter.
Each PL/SQL subprogram has a name, and may also have a parameter list. Like anonymous PL/SQL blocks,
the named blocks will also have the following three parts −
S.No Parts & Description
Declarative Part
1 It is an optional part. However, the declarative part for a subprogram does not start with the DECLARE
keyword. It contains declarations of types, cursors, constants, variables, exceptions, and nested
subprograms. These items are local to the subprogram and cease to exist when the subprogram
completes execution.
Executable Part
2
This is a mandatory part and contains statements that perform the designated action.
Exception-handling
3
This is again an optional part. It contains the code that handles run-time errors.
Creating a Procedure
A procedure is created with the CREATE OR REPLACE PROCEDURE statement. The simplified syntax for
the CREATE OR REPLACE PROCEDURE statement is as follows −
Where,
Example
The following example creates a simple procedure that displays the string 'Hello World!' on the screen when
executed.
Procedure created.
The above procedure named 'greetings' can be called with the EXECUTE keyword as −
EXECUTE greetings;
Hello World
BEGIN
greetings;
END;
/
Hello World
A standalone procedure is deleted with the DROP PROCEDURE statement. Syntax for deleting a procedure
is −
You can drop the greetings procedure by using the following statement −
The following table lists out the parameter modes in PL/SQL subprograms −
S.No Parameter Mode & Description
IN
An IN parameter lets you pass a value to the subprogram. It is a read-only parameter. Inside the
1 subprogram, an IN parameter acts like a constant. It cannot be assigned a value. You can pass a
constant, literal, initialized variable, or expression as an IN parameter. You can also initialize it to a
default value; however, in that case, it is omitted from the subprogram call. It is the default mode of
parameter passing. Parameters are passed by reference.
OUT
2 An OUT parameter returns a value to the calling program. Inside the subprogram, an OUT parameter
acts like a variable. You can change its value and reference the value after assigning it. The actual
parameter must be variable and it is passed by value.
IN OUT
An IN OUT parameter passes an initial value to a subprogram and returns an updated value to the
3 caller. It can be assigned a value and the value can be read.
The actual parameter corresponding to an IN OUT formal parameter must be a variable, not a constant
or an expression. Formal parameter must be assigned a value. Actual parameter is passed by value.
This program finds the minimum of two values. Here, the procedure takes two numbers using the IN mode
and returns their minimum using the OUT parameters.
DECLARE
a number; b
number; c
number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGI
N
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c); END;
/
When the above code is executed at the SQL prompt, it produces the following result −
This procedure computes the square of value of a passed value. This example shows how we can use the
same parameter to accept a value and then return another result.
DECLARE
a number;
PROCEDURE squareNum(x IN OUT number) IS
BEGIN
x := x * x;
END;
BEGIN
a:= 23;
squareNum(a);
dbms_output.put_line(' Square of (23): ' || a); END;
/
When the above code is executed at the SQL prompt, it produces the following result −
Positional notation
Named notation
Mixed notation
Positional Notation
findMin(a, b, c, d);
In positional notation, the first actual parameter is substituted for the first formal parameter; the second actual
parameter is substituted for the second formal parameter, and so on. So, a is substituted for x, b is substituted
for y, c is substituted for z and d is substituted for m.
Named Notation
In named notation, the actual parameter is associated with the formal parameter using the arrow symbol ( =>
). The procedure call will be like the following −
In mixed notation, you can mix both notations in procedure call; however, the positional notation should
precede the named notation.
PL/SQL - Functions
In this chapter, we will discuss the functions in PL/SQL. A function is same as a procedure except that it
returns a value. Therefore, all the discussions of the previous chapter are true for functions too.
Creating a Function
A standalone function is created using the CREATE FUNCTION statement. The simplified syntax for the
CREATE OR REPLACE PROCEDURE statement is as follows −
Where,
Example
The following example illustrates how to create and call a standalone function. This function returns the total
number of CUSTOMERS in the customers table.
RETURN total;
END;
/
When the above code is executed using the SQL prompt, it will produce the following result − Function
created.
Calling a Function
While creating a function, you give a definition of what the function has to do. To use a function, you will have
to call that function to perform the defined task. When a program calls a function, the program control is
transferred to the called function.
A called function performs the defined task and when its return statement is executed or when the
last end statement is reached, it returns the program control back to the main program.
To call a function, you simply need to pass the required parameters along with the function name and if the
function returns a value, then you can store the returned value. Following program calls the function
totalCustomers from an anonymous block −
DECLARE
c number(2); BEGIN
c := totalCustomers();
dbms_output.put_line('Total no. of Customers: ' || c); END;
/
When the above code is executed at the SQL prompt, it produces the following result −
Total no. of Customers: 6
Example
The following example demonstrates Declaring, Defining, and Invoking a Simple PL/SQL Function that
computes and returns the maximum of two values.
DECLARE
a number;
b number;
c number;
FUNCTION findMax(x IN number, y IN number)
RETURN number
IS
z number;
BEGIN
IF x > y THEN
z:= x;
ELSE
Z:= y; END
IF; RETURN
z;
END;
BEGIN
a:= 23;
b:= 45;
c := findMax(a, b);
dbms_output.put_line(' Maximum of (23,45): ' || c); END;
/
When the above code is executed at the SQL prompt, it produces the following result −
Maximum of (23,45): 45
We have seen that a program or subprogram may call another subprogram. When a subprogram calls itself, it
is referred to as a recursive call and the process is known as recursion.
To illustrate the concept, let us calculate the factorial of a number. Factorial of a number n is defined as −
n! = n*(n-1)!
= n*(n-1)*(n-2)!
...
= n*(n-1)*(n-2)*(n-3)... 1
The following program calculates the factorial of a given number by calling itself recursively −
DECLARE
num number; factorial
number;
BEGIN
num:= 6;
factorial := fact(num);
dbms_output.put_line(' Factorial '|| num || ' is ' || factorial); END;
/
When the above code is executed at the SQL prompt, it produces the following result −
Factorial 6 is 720
Step 1
The following will create a table in Oracle. For example I will create a table for customer details.
Step 2
Step 3
Stored Procedure for an update:
Step 4
Stored Procedure for a select:
Step 5
Stored Procedure for a delete:
1. OR REPLACE PROCEDURE (
CREATE DELETEcustomer
2. p_name IN CUSTOMER3.NAME%TYPE)
3. IS
4. BEGIN
5. FROM CUSTOMER WHERE
DELETE NAME=p_name;
6. END;
7. /
Result:
Aim:
PL/SQL - Triggers
In this chapter, we will discuss Triggers in PL/SQL. Triggers are stored programs, which are automatically
executed or fired when some events occur. Triggers are, in fact, written to be executed in response to any of
the following events −
Overview
Database triggers are specialized stored programs. Oracle engine allows the definition of the procedures,
which are implicitly executed when an insert, update, or delete is issued in a table from SQL or through the
Application, and the trigger automatically executes a DML statement. They are not called directly, but are
triggered by the events in the database. They run between the time, when you issue a command and the time,
you perform the database management system action. You can write the triggers in PL/SQL.
Introduction
Before Triggers: These triggers are fired before the SQL statement trigger (INSERT, UPDATE, DELETE) is
executed. The execution of the triggering SQL statement is stopped, depending on the various conditions to
be fulfilled in the BEFORE trigger.
After Triggers: These triggers are fired after the triggering SQL statement (INSERT, UPDATE, DELETE) is
executed. The triggering SQL statement is executed first, followed by the code of the trigger.
ROW Trigger: The triggers are fired for each and every record, which is inserted or updated or deleted from a
table.
Statement Trigger: The trigger is fired for each row of the DML operation, being performed on a table. We
cannot access the column values for the records being inserted, updated, deleted on the table nor the
individual records.
PL/SQL Triggers Syntax Description
CREATE or REPLACE TRIGGER trigger_name: Creates a trigger with the given name, else
overwrites an existing trigger with the same name.
{BEFORE , AFTER }: Indicates where should trigger be fired. BEFORE trigger executes before when
statement executes before time or AFTER trigger executes, after when statement executes after time.
{INSERT , UPDATE , DELETE}: Determines the performing trigger event. More than one triggering events
can be used together, separated by OR keyword.
ON Table Name: Determines the performed trigger event in the selected table.
[Referencing {old AS old, new AS new}]: Reference the old and new values of the data, being changed. : old
is used for existing row to perform and : new is used to execute a new row to perform. The reference names
can also be changed from old (or new) to any other user-defined name. You cannot reference the old values,
when inserting a record or new values, or when deleting a record, because they do not exist.
Note
Insert has no :OLD value (before execution) and have : NEW value (After execution).
Delete has no : OLD value but it has :NEW value.
Update has both : OLD and : NEW value.
for each row: Trigger must fire, when each row gets affected (Row Level Trigger) or just once, when the entire
SQL statement is executed (Statement Level trigger).
WHEN (condition): Valid only for row level triggers. The trigger is fired only for the rows, which satisfy the
specified condition.
There are various events on which a trigger can be written, such as:
1. System events
o Database startup and shutdown.
o Server error message events.
2. User events
o User login and logoff.
o DDL statements (CREATE, ALTER, and DROP).
o DML statements (INSERT, DELETE, and UPDATE).
Based on the above condition, we can classify the trigger into five categories: DML trigger, DDL trigger,
Compound triggers, Instead-Of triggers and System or database event triggers. Out of which, here I am
discussing mainly DDL and DML triggers.
DDL Trigger
DDL triggers fire, when you create, change or remove objects in a database. They support both before and
after event triggers and work at the database or schema level.
DDL event supported
alter, analyze, associate statistics, audit, comment, create, DDL, disassociate statistics, drop, grant, noaudit,
rename, revoke, truncate .
There are a number of event attribute functions, which can be used to get user, client or system
information, commonly used ones are given below:
Triggers can be defined on the table, view, schema, or database with which the event is associated.
Benefits of Triggers
Creating Triggers
DECLARE
Declaration-statements
BEGIN
Executable-statements
EXCEPTION
Exception-handling-statements
END;
Where,
CREATE [OR REPLACE] TRIGGER trigger_name − Creates or replaces an existing trigger with the
trigger_name.
{BEFORE | AFTER | INSTEAD OF} − This specifies when the trigger will be executed. The INSTEAD
OF clause is used for creating trigger on a view.
{INSERT [OR] | UPDATE [OR] | DELETE} − This specifies the DML operation.
[OF col_name] − This specifies the column name that will be updated.
[ON table_name] − This specifies the name of the table associated with the trigger.
[REFERENCING OLD AS o NEW AS n] − This allows you to refer new and old values for various
DML statements, such as INSERT, UPDATE, and DELETE.
[FOR EACH ROW] − This specifies a row-level trigger, i.e., the trigger will be executed for each row
being affected. Otherwise the trigger will execute just once when the SQL statement is executed,
which is called a table level trigger.
WHEN (condition) − This provides a condition for rows for which the trigger would fire. This clause is
valid only for row-level triggers.
Example
To start with, we will be using the CUSTOMERS table we had created and used in the previous chapters −
The following program creates a row-level trigger for the customers table that would fire for INSERT or
UPDATE or DELETE operations performed on the CUSTOMERS table. This trigger will display the salary
difference between the old values and new values −
When the above code is executed at the SQL prompt, it produces the following result − Trigger
created.
OLD and NEW references are not available for table-level triggers, rather you can use them for
record-level triggers.
If you want to query the table in the same trigger, then you should use the AFTER keyword,
because triggers can query the table or change it again only after the initial changes are applied and
the table is back in a consistent state.
The above trigger has been written in such a way that it will fire before any DELETE or INSERT or
UPDATE operation on the table, but you can write your trigger on a single or multiple operations, for
example BEFORE DELETE, which will fire whenever a record will be deleted using the DELETE
operation on the table.
Triggering a Trigger
Let us perform some DML operations on the CUSTOMERS table. Here is one INSERT statement, which
will create a new record in the table −
When a record is created in the CUSTOMERS table, the above create trigger,
display_salary_changes will be fired and it will display the following result −
Old salary:
New salary: 7500
Salary difference:
Because this is a new record, old salary is not available and the above result comes as null. Let us now
perform one more DML operation on the CUSTOMERS table. The UPDATE statement will update an
existing record in the table −
UPDATE customers
SET salary = salary + 500
WHERE id = 2;
When a record is updated in the CUSTOMERS table, the above create trigger,
display_salary_changes will be fired and it will display the following result −
Example.1
The given DDL trigger prevents truncating the table on the schema level.
Trigger created.
Table created.
Example.2
The below given trigger updates every create statement, which happens in the schema level into the
log_table.
Table created.
1. SQL>
2. CREATE OR REPLACE TRIGGER log_create_trigg
3. AFTER CREATE ON SCHEMA
4. BEGIN
5. INSERT INTO log_table
6. (user_name, event_date, detail)
7. VALUES
8. (USER, SYSDATE, 'created object is: ' || ora_dict_obj_name);
9. END;
10. /
Trigger created.
Table created.
These triggers fire, when a system activity occurs in the database like the login and logoff event triggers. They
are useful for auditing the information of the system access. These triggers, allow you to track the system
events and map them to the users.
Example
Below given trigger logs the logging information into log_trigger_table.
Table created.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options.
C:\Users\DELL\node1>sqlplus
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP,
Data Mining and Real Application Testing options:
DML Trigger
These triggers fire, when you insert, update or delete the data from a table. You can fire them once for all the
changes on a table or for each row change, using statement- or row-level trigger types, respectively. DML
triggers are useful to control DML statements. You can use these triggers to audit, check, save and replace
values before they are changed.
Example.1
Below given example inserts each record, which will be deleted from salary table into sal_deleted table.
Table created.
SQL>
Create or replace trigger sal_delete before deleting on salary. For each row, begin:
Trigger created.
1 row deleted.
Example.2
The following trigger will insert the system time automatically into DOJ field, while inserting the records into
student_details table.
SQL>
Table created.
1. SQL> ed student_details_trig;
2.
3. create trigger student_details_trig before insert
4. on student_details for each row
5. begin
6. :new.doj := sysdate;
7. end;
8. /
9. SQL> @student_details_trig
Trigger created.
No rows selected
1. SQL> select sysdate from dual;
SYSDATE
---------
19- OCT-12
1 row created.
Example.3
Following trigger will insert each record into salupdated table before the update happens in salary table,
Table created.
1. SQL> ed salupdate_trig
create or replace trigger salupdate_trig before update on salary for each row,
1. insert into salupdated values (:old.rollno, :old.empname, :old.design, :old.bpay, :old.da, :old.
netsal, :old.ta);
2. end;
3. /
4. SQL> @salupdate_trig
Trigger created.
1. SQL> select * from salupdated;
no rows selected
3 rows updated.
The output can be verified using the following sql queries:
SQL>
Example.4
Following DML trigger will raise an Application error, while trying to delete the records belonging to Asst.Manager.
Trigger created.
ERROR at line 1:
ORA-20015: Not Delete this Row
ORA-06512: at "MAHI.NOT_DEL", line 3
ORA-04088: error during execution of trigger 'MAHI.NOT_DEL
Result:
Aim:
An error condition during a program execution is called an exception and the mechanism for resolving such
an exception is known as an exception handler. SQL Server provides TRY, CATCH blocks for exception
handling. We can put all T-SQL statements into a TRY BLOCK and the code for exception handling can be
put into a CATCH block. We can also generate user-defined errors using a THROW block.
BEGIN TRY
/* T-SQL Statements */
END TRY
BEGIN CATCH
- Print Error OR
- Rollback Transaction
END CATCH
In exception handling all T-SQL statements are put into a try block. If all statements execute without any error
then everything is OK else control will go to the catch block.
PL/SQL - Exceptions
In this chapter, we will discuss Exceptions in PL/SQL. An exception is an error condition during a program
execution. PL/SQL supports programmers to catch such conditions using EXCEPTION
block in the program and an appropriate action is taken against the error condition. There are two types of
exceptions −
System-defined exceptions
User-defined exceptions
The general syntax for exception handling is as follows. Here you can list down as many exceptions as you
can handle. The default exception will be handled using WHEN others THEN −
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling goes here >
WHEN exception1 THEN
exception1-handling-statements
WHEN exception2 THEN
exception2-handling-statements
WHEN exception3 THEN
exception3-handling-statements
........
WHEN others THEN
exception3-handling-statements
END;
Example
Let us write a code to illustrate the concept. We will be using the CUSTOMERS table we had created and
used in the previous chapters −
DECLARE
c_id customers.id%type := 8; c_name
customerS.Name%type; c_addr
customers.address%type;
BEGIN
SELECT name, address INTO c_name, c_addr FROM
customers
WHERE id = c_id;
DBMS_OUTPUT.PUT_LINE ('Name: '|| c_name);
DBMS_OUTPUT.PUT_LINE ('Address: ' || c_addr);
EXCEPTION
WHEN no_data_found THEN dbms_output.put_line('No
such customer!');
WHEN others THEN
dbms_output.put_line('Error!'); END;
/
When the above code is executed at the SQL prompt, it produces the following result − No such
customer!
The above program displays the name and address of a customer whose ID is given. Since there is no
customer with ID value 8 in our database, the program raises the run-time exception NO_DATA_FOUND,
which is captured in the EXCEPTION block.
Raising Exceptions
Exceptions are raised by the database server automatically whenever there is any internal database error, but
exceptions can be raised explicitly by the programmer by using the command RAISE. Following is the simple
syntax for raising an exception −
DECLARE
exception_name EXCEPTION; BEGIN
IF condition THEN RAISE
exception_name;
END IF;
EXCEPTION
WHEN exception_name THEN
statement;
END;
You can use the above syntax in raising the Oracle standard exception or any user-defined exception. In the
next section, we will give you an example on raising a user-defined exception. You can raise the Oracle
standard exceptions in a similar way.
User-defined Exceptions
PL/SQL allows you to define your own exceptions according to the need of your program. A user- defined
exception must be declared and then raised explicitly, using either a RAISE statement or the procedure
DBMS_STANDARD.RAISE_APPLICATION_ERROR.
DECLARE
my-exception EXCEPTION;
Example
The following example illustrates the concept. This program asks for a customer ID, when the user enters an
invalid ID, the exception invalid_id is raised.
DECLARE
c_id customers.id%type := &cc_id;
c_name customerS.Name%type;
c_addr customers.address%type;
-- user defined exception
ex_invalid_id EXCEPTION;
BEGIN
IF c_id <= 0 THEN RAISE
ex_invalid_id;
ELSE
SELECT name, address INTO c_name, c_addr FROM
customers
WHERE id = c_id;
DBMS_OUTPUT.PUT_LINE ('Name: '|| c_name); DBMS_OUTPUT.PUT_LINE
('Address: ' || c_addr);
END IF;
EXCEPTION
WHEN ex_invalid_id THEN
dbms_output.put_line('ID must be greater than zero!');
WHEN no_data_found THEN dbms_output.put_line('No
such customer!');
WHEN others THEN
dbms_output.put_line('Error!');
END;
/
When the above code is executed at the SQL prompt, it produces the following result − Enter
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 −
In a System Defined Exception the exceptions (errors) are generated by the system.
Example
Output
Output
Error Occur
Error Occur that is:
Number Is Even
Here 60000 denotes the error number and 5 denotes the state to associate with the message. The
following are system functions and the keyword used within a catch block:
1. @@ERROR
2. ERROR_NUMBER()
3. ERROR_STATE()
4. ERROR_LINE()
5. ERROR_MESSAGE()
6. ERROR_PROCEDURE()
7. ERROR_SEVERITY()
8. RAISERROR()
9. GOTO()
Now we will see some examples to help understand all these functions and keywords. First
create a table and enter some value into the table as in the following:
@@ERROR return the error number for last executed T-SQL statements. It returns 0 if the previous
Transact-SQL statement encountered no errors else return an error number.
Output:
Example 2 (ERROR_NUMBER)
ERROR_NUMBER() returns the error number that caused the error. It returns zero if called outside the catch
block.
1. BEGIN TRY
2.
3. Update Employee set Salary=19000 Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6. SELECT ERROR_NUMBER() AS ErrorNumber;
7. END CATCH;
8. GO
Output
Now a question develops of what is diff @@ERROR and ERROR_NUMBER. Let me explain.
1. ERROR_NUMBER can only be used in a catch block, outside a catch block it returns Null but
@@ERROR can be used inside or outside the catch block (see Example 1).
2. ERROR_NUMBER is a contrast to @@ERROR, that only returns the error number in the
statement immediately after the one that causes an error, or the first statement of a CATCH block.
Now we will see an example and observe the differences between them.
1. BEGIN TRY
2.
3. Update Employee set Salary=19000 Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6.
7. SELECT ERROR_NUMBER() AS ErrorNumber;
8. print @@ERROR
9. END CATCH;
10. GO
Output
1. BEGIN TRY
2.
3. Update Employee set Salary=19000 Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6. print @@ERROR
7. SELECT ERROR_NUMBER() AS ErrorNumber;
8.
9. END CATCH;
10. GO
Output
Example 3 (ERROR_MESSAGE)
ERROR_MESSAGE returns the message text of the error that caused the error. The return type of
ERROR_MESSAGE is nvarchar(4000).
1. BEGIN TRY
2.
3. Update Employee set Salary=19000 Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6. SELECT ERROR_MESSAGE() AS ErrorMsg;
7.
8. END CATCH;
9. GO
Output
Example 4 ( ERROR_STATE)
ERROR_STATE returns the state number of the error. The return type of ERROR_STATE is INT.
1. BEGIN TRY
2.
3. SELECT SALARY + First_Name From Employee Where Emp_IID=5
4. END TRY
5. BEGIN CATCH
6. SELECT ERROR_STATE() AS ErrorState , ERROR_MESSAGE() ErrorMsg ;
7. END CATCH;
8. GO
Output
Example 5 (ERROR_LINE)
ERROR_LINE returns the line number at which an error occurred. The return type of ERROR_LINE is INT.
1. BEGIN TRY
2. SELECT SALARY + First_Name From Employee Where Emp_IID=5
3. END TRY
4. BEGIN CATCH
5. SELECT ERROR_STATE() AS ErrorLine;
6. END CATCH;
7. GO
Output
Example 6 (ERROR_PROCEDURE)
ERROR_PROCEDURE returns the name of the Stored Procedure or trigger of where an error occurred. The
return type of ERROR_PROCEDURE is nvarchar(128).
Return value
Return value returns the Stored Procedure Name if an error occurs in a Stored Procedure or trigger and
the catch block is called.
It returns NULL if the error did not occur within a Stored Procedure or trigger or it isb called outside the scope
of a CATCH block.
1. Exec My_Proc
Output
Example 7 (ERROR_SEVERITY)
ERROR_SEVERITY returns the severity of the error. The return type of ERROR_SEVERITY is INT.
1. BEGIN TRY
2. SELECT SALARY + First_Name From Employee Where Emp_IID=5
3. END TRY
4. BEGIN CATCH
5. SELECT ERROR_SEVERITY() AS ErrorSeverity;
6. END CATCH;
Output
The severity level of an error message provides an indication of the type of problem that Microsoft® SQL
Server encountered. In the preceding example the Severity Level is 16. That means that the error can be
removed by the user.
Example 8 (RAISERROR)
RAISEERROR is used to generate an error message and initiates error processing for the session.
4. BEGIN CATCH
5. RAISERROR(N'An Error Is Occur',16,3);
6. END CATCH;
Output
In RAISERROR(N'An Error Is Occur',16,3) the first argument represents the error messagethe , second
argument represents the Severity Level and the last argument represents the Error State.
Example 9 (GOTO)
GOTO causes a jump to a specific step or statement. It alters the flow of execution to a label. We declare
some labels in batch and alter we can move at a specific label. GOTO can exist within a conditional
control-of-flow statements, statement blocks, or procedures, but it cannot go to a label outside the batch.
GOTO cannot be used to jump into a TRY or CATCH scope.
Output
Goto exercise
Var Is Even
Example 10
1. BEGIN TRY
2. SELECT SALARY + First_Name From Employee Where Emp_IID=5
3. END TRY
4. BEGIN CATCH
5. SELECT ERROR_STATE() AS Error_Stat,ERROR_SEVERITY() AS ErrorSeverity, ERRO R_LINE() as
ErrorLine, ERROR_NUMBER() AS ErrorNumber, ERROR_MESSAGE() AS
ErrorMsg;
6. END CATCH;
Output
Exception handling is mainly used for Transaction Management. Let us see an example.
Output
Result:
What is ER Modeling?
Entity Relationship Modeling (ER Modeling) is a graphical approach to database design. It uses
Entity/Relationship to represent real world objects.
An Entity is a thing or object in real world that is distinguishable from surrounding environment. For example
each employee of an organization is a separate entity. Following are some of major characteristics of entities.
Enhanced Entity Relationship (EER) Model is a high level data model which provides extensions to original
Entity Relationship (ER) model. EER Models supports more details design. EER Modeling emerged as a
solution for modeling highly complex databases.
EER uses UML notation. UML is the acronym for Unified Modeling Language; it is a general purpose
modeling language used when designing object oriented systems. Entities are represented as class diagrams.
Relationships are represented as associations between entities. The diagram shown below illustrates an ER
diagram using the UML notation.
Now you may think why use ER modeling when we can simply create the database and all of its objects
without ER modeling? One of the challenges faced when designing database is the fact that designers,
developers and end-users tend to view data and its usage differently. If this situation is left unchecked, we can
end up producing a database system that does not meet the requirements of the users.
Communication tools understood by all stakeholders(technical as well non-technical users) are critical in
producing database systems that meet the requirements of the users. ER models are examples of such tools.
ER diagrams also increase user productivity as they can be easily translated into relational tables. Case
Let's now work with the MyFlix Video Library database system to help understand the concept of ER diagrams.
We will using this database for all hand-on in the remainder of this tutorials
MyFlix is a business entity that rents out movies to its members. MyFlix has been storing its records manually.
The management now wants to move to a DBMS
Let's look at the steps to develop EER diagram for this database-
1. Identify the entities and determine the relationships that exist among them.
2. Each entity, attribute and relationship, should have appropriate names that can be easily understood
by the non-technical people as well.
3. Relationships should not be connected directly to eachother. Relationships should connect entities.
4. Each attribute in a given entity should have a unique name.
Entities in the "MyFlix" library
The following holds true regarding the interactions between the two entities.
From the above scenario, we can see that the nature of the relationship is many-to-many. Relational
databases do not support many-to-many relationships. We need to introduce a junction entity. This is
the role that the MovieRentals entity plays. It has a one-to-many relationship with the members table and
another one-to-many relationship with movies table.
A movie can only belong to one category but a category can have more than one movie.
We can deduce from this that the nature of the relation between categories and movies table is one-to- many.
We can deduce from this that the nature of the relationship between members and payments entities is one-to-
many.
Example
129
CONNECTING TO ORACLE DATABASE USING C#
Introduction
Oracle is the most widely used database system available in the market. And on the other hand if we
talk about the .Net framework, it’s a software framework developed by the software giant Microsoft
(we all know this), it includes a large class library known as the Framework Class Library (FCL) and
provides language interoperability across several programming languages.
Prerequisites
1. Microsoft Visual Studio 2008 or higher (I’ll be using Visual Studio 2012).
2. Oracle database 9.2 or higher or Oracle Database XE
3. Install Oracle Data Access Component (ODAC) Use
http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
Moving Forward
Once you have installed ODAC, you must look for the following assembly files.
1. Go to Solution Explorer
2. Right-click and select Add Reference
3. Click on Extensions
4. Select the above mentioned files and click OK
Go to the web.config file and you can see the following code.
<assemblies>
PublicKeyToken=*************”/>
</ assemblies>
130
And you can also see a folder name, bin, that has already been created in the Solution
Explorer.
You must understand the following details before creating TNS entries.
2. You need to know the Service name. You can find it in tnsnames.ora. This allows you to
register an instance with the listener.
3. Third is the user id and password.
4. Don’t forget to add "using Oracle.DataAccess.Client;" namespace.
1. using System;
2. using System.Collections.Generic;
3. using System.Linq;
4. using System.Web;
5. using System.Web.UI;
6. using System.Web.UI.WebControls;
7. using Oracle.DataAccess.Client;
8. using System.Data; & nbsp;
9. public partial class _Default: System.Web.UI.Page {
10. //creating TNS entries
11. string oradb = "Data Source=(DESCRIPTION =" + "(ADDRESS = (PROTOCOL
= TCP)(HOST = Your host name)(PORT = 1521))" + "(CONNECT_DATA =" + "(S
131
ERVER = DEDICATED)" + "(SERVICE_NAME = XE)));" + "User Id= your user id
;Password=<strong>******</strong>;";
12. protected void Page_Load(object sender, EventArgs e) {}
13. protected void btn_Click(object sender, EventArgs e) {
14. OracleConnection conn = new OracleConnection(oradb);
15. conn.Open();
16. Response.Write("Connected to Oracle" + conn.ServerVersion);
17. // Close and Dispose OracleConnection object
18. conn.Close();
19. conn.Dispose();
20. Response.Write("Disconnected");
21. }
22. }
Remarks
Output
132
FRONT END TOOLS–Form Design using Visual Basic
• Examples
frmExample.Cls ' clears the form frmExample.Print
133
"This will print on the form"
2. CommandButton
• The Command Button control is use to create buttons with a variety of uses on a form.
• A command button is the most basic way to get user input while a program is running.
• By clicking a command button, the user requests that a specific action be taken in the
program.
• Visual Basic terms, clicking a command button creates an event, which must be
processed in your program.
• Click Event triggered when button is selected either by clicking on it or by pressing the access
key.
3. Label Boxes
• Label, the simplest control in the Visual Basic toolbox, displays formatted text on a user
interface form. Typical uses for the Label control include:
• Help text
• Descriptive labels for other objects, including text boxes and list boxes.
• Label Properties:
• Alignment Aligns caption within border.
• Appearance Selects 3-D or flat appearance.
• AutoSize -If True, the label is resized to fit the text specified by the caption property. If
False, the label will remain the size defined at design time and the text may be clipped.
• BorderStyle Determines type of border.
• Caption String to be displayed in box.
• Font Sets font type, style, size.
• Label Events:
• Click Event triggered when user clicks on a label.
134
4. Textbox
3. KeyPress :Triggered whenever a key is pressed. Used for key trapping, as seen in last class.
5. Check Boxes
• Check boxes provide a way to make choices from a list of potential candidates.
• Some, all, or none of the choices in a group may be selected
135
• Check Box Events:
6. Option Buttons
• Option buttons provide the capability to make a mutually exclusive choice among a
group of potential candidate choices.
• Hence, option buttons work as a group, only one of which can have a True (or selected)
value.
can be True. One button in each group of option buttons should always be initialized to
True at design time.
7. List Boxes
• A list box displays a list of items from which the user can select one or more items.
• If the number of items exceeds the number that can be displayed, a scroll bar is
automatically added.
136
• Examples
• lstExample.AddItem "This is an added item" ' adds text string to list
• lstExample.Clear ' clears the list box
• lstExample.RemoveItem 4 ' removes lstExample.List(4) from list box
8.Combo Boxes
• The combo box is similar to the list box.
• The differences are a combo box includes a text box on top of a list box and only allows
selection of one item.
• DblClick Event triggered when item in list is double-clicked. Primary way used to
process selection.
• Examples
•
• cboExample.AddItem "This is an added item" ' adds text string to list
• cboExample.Clear ' clears the combo box
• cboExample.RemoveItem 4 ' removes cboExample.List(4) from list box
• Horizontal and vertical scroll bars are widely used in Windows applications.
• Scroll bars provide an intuitive way to move through a list of information and make great
input devices.
137
• Scroll Bar Properties:
1. LargeChange Increment added to or subtracted from the scroll bar Value property
when the bar area is clicked.
2. Max The value of the horizontal scroll bar at the far right and the value of the
vertical scroll bar at the bottom.Can range from -32,768 to 32,767.
3. Min The other extreme value - the horizontal scroll bar at the left and the
vertical scroll bar at the top. Can range from -32,768 to 32,767.
4. SmallChange The increment added to or subtracted from the scroll bar Value property
when either of the scroll arrows is clicked.
5. Value The current position of the scroll box (thumb) within the scroll bar. If you
set this in code, Visual Basic moves the scroll box to the proper position.
10.Picture Boxes
• The picture box allows you to place graphics information on a form.
• It is best suited for dynamic environments - for example, when doing animation.
• They behave very much like small forms within a form, possessing most of the same
properties as a form.
• Example
• picExample.Picture = LoadPicture("c:\pix\sample.bmp")
138
11. Frames
• Frames provide a way of grouping related controls on a form. And, in the case of option buttons,
frames affect how such buttons operate.
• Option buttons within a frame work as a group, independently of option buttons in other frames.
• Option buttons on the form, and not in frames, work as another independent group.
• That is, the form is itself a frame by default.
• It is important to note that an independent group of option buttons is defined by physical location
within frames, not according to naming convention.
• That is, a control array of option buttons does not work as an independent group just because it is
a control array.
• It would only work as a group if it were the only group of option buttons within a frame or on
the form.
60
• The shape tool can create circles, ovals, squares, rectangles, and rounded squares and
rectangles.
• Colors can be used and various fill patterns are available.
• We can use these controls at design time as a design element or at runtime to alter the
original line you drew.
• It can also change a line at runtime by changing its X1, X2, Y1, and Y2 properties.
• Many times, especially in using graphics, we want to repeat certain operations at regular
intervals.
• The timer tool allows such repetition. The timer tool does not appear on the form while the
application is running.
Form Design
d) Facilities required to do the experiment:
Sl.No. Facilities required Quantity
1 System 1
2 Operating System Windows XP
3 S/W Name VB
e) Program:
Private Sub Command1_Click()
Text3.Text = Val(Text1.Text) + Val(Text2.Text)
End Sub
f)Output:
g)Result:
Thus the design and implementation of a form using visual basic was performed.
141
FORM DESIGN
AIM:
To design a Single Document Interface and Multiple Document Interface forms using Visual
Basic.
PROCEDURE:
STEP 1: Start
Sub OKButton_Click() If
SDI.Show
Unload Me
Else
MDIForm1.Show
Unload Me
End If
End Sub
MDIADD.Show
End Sub
MDIDIV.Show
End Sub
Private Sub EXIT_Click()
End
End Sub
142
Private Sub MUL_Click()
MDIMUL.Show
End Sub
MDISUB.Show
End Sub
Dim a As Integer
a = Val(Text1.Text) + Val(Text2.Text)
Sub
MDIForm1.Show
End Sub
Dim a As Integer
a = Val(Text1.Text) / Val(Text2.Text)
Sub
MDIForm1.Show
End Sub
Dim a As Integer
143
a = Val(Text1.Text) * Val(Text2.Text)
Sub
MDIForm1.Show
End Sub
Code for MDI SUB:
Dim a As Integer
a = Val(Text1.Text) - Val(Text2.Text)
Sub
MDIForm1.Show
End Sub
SDIADD.Show
End Sub
SDIMUL.Show
End Sub
SDIDIV.Show
End Sub
SDISUB.Show
144
End Sub
Dialog.Show
Unload Me
End Sub
Dim a As Integer
a = Val(Text1.Text) + Val(Text2.Text)
Unload Me
End Sub
Private Sub Command5_Click()
SDI.Show
Unload Me
End Sub
a = Val(Text1.Text) / Val(Text2.Text)
Unload Me
End Sub
SDI.Show
Unload Me
End Sub
145
Private Sub Command2_Click()
a = Val(Text1.Text) * Val(Text2.Text)
Unload Me
End Sub
SDI.Show
Unload Me
End Sub
a = Val(Text1.Text) - Val(Text2.Text)
Unload Me
End Sub
SDI.Show
Unload Me
End Sub
146
147
Result:
Thus the Single Document Interface and Multiple Document Interface forms in Visual
c) Program:
Private Sub Green_Click(Index As Integer)
Shape1.FillColor = RGB(0, 255, 0)
End Sub
Private Sub Oval_Click(Index As Integer)
Shape1.Shape = 2
End Sub
Private Sub Rect_Click(Index As Integer)
Shape1.Shape = 0
End Sub
Private Sub Red_Click(Index As Integer)
Shape1.FillColor = RGB(255, 0, 0)
End Sub
Private Sub Solid_Click(Index As Integer)
Shape1.FillStyle = 0
End Sub
Private Sub Square_Click(Index As Integer)
Shape1.Shape = 1
End Sub
Private Sub Transparent_Click(Index As Integer)
Shape1.FillStyle = 2
End Sub
d) Output:
e) Result:
Thus the menu design using Visual Basic was successfully designed and implemented.
2 as Oracle provider for OLEDB and click next then type user name as scott and password
as tiger. Check whether the connection is established using test connection button.
3 Right click connection, click the Add command for the connection1 and set database object as table
and object name as scott.emp
Drag command1and drop it in the data reports detail section1. Two items will
4 appear for each object. The first label for heading information. Move this label into
page header section. The label is used to store the actual value of the object.
5 In data report1 properties set data source data environment1 and the data member as command1.
Place a button in the form write coding to view the report.
c) Program:
Private Sub
Command1_Click()
DataReport1.Show
End Sub
Private Sub
Command2_Click() Unload
Me
End Sub
d) Output:
DATABASE DESIGN AND IMPLEMENTATION PAY ROLL PROCESSING
5 A window will appear given the data source home as oracle and select TNS source
name as lion and give the used id as SWTT
6 ADODC CONTROL FOR SALARY FORM:-
7 The above procedure must be follow except the table ,A select the table as
salary
8 Write appropriate Program in form each from created in VB from each from
created in VB form project.
c) Program:
10 end;
11 /
Trigger created.
PROGRAM FOR FORM 1
End Sub
Private Sub modify_Click()
Adodc1.Recordset.Update
End Sub
d) Output:
INVENTORY CONTROL SYSTEM.
AIM:
To develop a Inventory Control System using Oracle as s back end(data base) and Microsoft Visual
basic as a front end.
TABLE CREATION:
TABLE NAME:SUPPLIER
Table created.
created.
created.
TABLE NAME:ITEM
Table created.
1 row created.
SQL> COMMIT;
Commit complete.
CODING FORM1:
Form3.Show
End Sub
Form2.Show
End Sub
FORM2:
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("supno") = Text1.Text
Adodc1.Recordset.Fields("supname") = Text2.Text
Adodc1.Recordset.Fields("supdate") = Text3.Text
Adodc1.Recordset.Fields("price") = Text4.Text
Adodc1.Recordset.Fields("quantity") = Text5.Text
Adodc1.Recordset.Fields("item_name") = Text6Text
Adodc1.Recordset.Update
End Sub
Form3.Show
End Sub
Adodc1.Recordset.Delete
Adodc1.Recordset.Update
End Sub
Unload Me
End Sub
Adodc1.Recordset.MoveNext
Else
End Sub
Adodc1.Recordset.MoveFirst End
Sub
Adodc1.Recordset.MoveLast End
Sub
Adodc1.Recordset.MovePrevious
Else
End Sub
Form1.Show
150
End Sub
FORM3:
Adodc1.Recordset.Fields("itemno") = Text1.Text
Adodc1.Recordset.Fields("item_name") = Text2.Text
Adodc1.Recordset.Fields("price") = Text4.Text
Adodc1.Recordset.Fields("quat_available") = Text5.Text
Adodc1.Recordset.Update
End Sub
Form2.Show
End Sub
Adodc1.Recordset.Delete
Adodc1.Recordset.Update
End Sub
Unload Me
End Sub
151
Private Sub Command5_Click()
Adodc1.Recordset.MoveNext
Else
End Sub
Adodc1.Recordset.MoveFirst End
Sub
Adodc1.Recordset.MoveLast End
Sub
Adodc1.Recordset.MovePrevious
Else
End Sub
Form1.Show
End Sub
152
SCREEN SHOTS:
HOME PAGE
SUPPLIER FORM
153
ITEM FORM
Result:
Thus the Inventory Control System Mini project has been implemented and executed
successfully.
154