SQL - Unit III
SQL - Unit III
SQL
Topics Covered
• SQL commands,
• Constraints,
• Joins,
• set operations,
• Sub queries,
• Views,
• PL – SQL,
• Triggers, and Cursors.
Basics of SQL-DDL,DML,DCL,TCL Nested Queries, Views and its
Structure Creation, alternation Types
Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands
Unique, not null, check, IN operator Commit, Rollback, Savepoint
• The output of the DDL is placed in the data dictionary which contains metadata - that is, data about data.
• SQL provides a rich DDL that allows one to define tables, integrity constraints, assertions, etc.
create table department (dept name char (20), building char (15), budget numeric (12,2));
• Execution of the above DDL statement creates the department table with three columns: dept name,
building, and budget, each of which has a specific data type associated with it.
CREATING DATABASE TABLE
• Used to create a table by defining its structure, the data type and name of the various
columns, the relationships with columns of other tables etc.
• E.g.:
CREATE TABLE Employee(Name varchar2(20), DOB date, Salary number(6));
ALTER - Add a new attribute or Modify the characteristics of some existing attribute.
• ALTER TABLE table_name ADD (column_name1 data_type (size), column_name2 data_type (size),
….., column_nameN data_type (size));
E.g.:
ALTER TABLE Employee ADD (Address varchar2(20));
ALTER TABLE Employee ADD (Designation varchar2(20), Dept varchar2(3));
ALTER TABLE table_name MODIFY (column_name data_type(new_size));
E.g.:
E.g.:
E.g.:
TRUNCATE TABLE Employee_details;
Data Manipulation Language
E.g.:
• INSERT INTO Employee VALUES (‘ashok’, ‘16-mar-1998’, 30000);
• E.g.
• CREATE TABLE Student ( ID int(6) NOT NULL, NAME varchar(10)
NOT NULL, ADDRESS varchar(20) );
UNIQUE
• This constraint helps to uniquely identify each row in the table. i.e. for a
particular column, all the rows should have unique values. We can have
more than one UNIQUE columns in a table.
• E.g.
• CREATE TABLE Student ( ID int(6) NOT NULL UNIQUE, NAME
varchar(10), ADDRESS varchar(20) );
PRIMARY KEY
• Primary Key is a field which uniquely identifies each row in the table.
• If a field in a table as primary key, then the field will not be able to
contain NULL values as well as all the rows should have unique values
for this field.
• In other words we can say that this is combination of NOT NULL and
UNIQUE constraints.
• A table can have only one field as primary key.
• E.g.
• CREATE TABLE Student ( ID int(6) NOT NULL UNIQUE, NAME
varchar(10), ADDRESS varchar(20), PRIMARY KEY(ID) );
FOREIGN KEY
• Foreign Key is a field in a table which uniquely identifies each row of a
another table.
• That is, this field points to primary key of another table. This usually
creates a kind of link between the tables.
• Foreign Key is used to relate two tables. The relationship between the
two tables matches the Primary Key in one of the tables with a Foreign
Key in the second table.
• This is also called a referencing key.
• We use ALTER statement and ADD statement to specify this constraint.
• In Customer_Detail table, c_id is the primary key which is set as foreign key
in Order_Detail table.
• The value that is entered in c_id which is set as foreign key in Order_Detail table
must be present in Customer_Detail table where it is set as primary key.
• This prevents invalid data to be inserted into c_id column of Order_Detail table.
• E.g.
• CREATE TABLE Student ( ID int(6) NOT NULL, NAME varchar(10)
NOT NULL, AGE int DEFAULT 18 );
Primary Key Vs Foreign Key
Primary Key Vs Unique Key
Basics of SQL-DDL,DML,DCL,TCL Views and its Types
Structure Creation, alternation
• Count(Distinct Salary): Return number of distinct Non Null values over the
column salary .i.e 4
• Sum()
• sum(salary): Sum all Non Null values of
Column salary i.e., 310
• sum(Distinct salary): Sum of all distinct
Non-Null values i.e., 250.
• Avg()
• Avg(salary) = Sum(salary) / count(salary) = 310/5
• Avg(Distinct salary) = sum(Distinct salary) / Count(Distinct Salary) = 250/4
• Min(), Max()
• Min(salary): Minimum value in the salary column except NULL i.e., 40.
• Max(salary): Maximum value in the salary i.e., 80.
Built in Functions - Numeric Functions in
SQL
• ABS(): It returns the absolute value of a number.
Syntax: SELECT ABS(-243.5);
Output: 243.5
• ACOS(): It returns the cosine of a number.
Syntax: SELECT ACOS(0.25);
Output: 1.318116071652818
• ASIN(): It returns the arc sine of a number.
Syntax: SELECT ASIN(0.25);
Output: 0.25268025514207865
• ATAN(): It returns the arc tangent of a number.
Syntax: SELECT ATAN(2.5);
Output: 1.1902899496825317
• CEIL(): It returns the smallest integer value that is greater than or equal to a number.
Syntax: SELECT CEIL(25.75);
Output: 26
• CEILING(): It returns the smallest integer value that is greater than or equal to a number.
Syntax: SELECT CEILING(25.75);
Output: 26
• COS(): It returns the cosine of a number.
Syntax: SELECT COS(30);
Built in Functions - Numeric Functions in SQL
• COT(): It returns the cotangent of a number.
Syntax: SELECT COT(6);
Output: -3.436353004180128
• DEGREES(): It converts a radian value into degrees.
Syntax: SELECT DEGREES(1.5);
Output: 85.94366926962348
• DIV(): It is used for integer division.
Syntax: SELECT 10 DIV 5;
Output: 2
• EXP(): It returns e raised to the power of number.
Syntax: SELECT EXP(1);
Output: 2.718281828459045
• FLOOR(): It returns the largest integer value that is less than or equal to a number.
Syntax: SELECT FLOOR(25.75);
Output: 25
• GREATEST(): It returns the greatest value in a list of expressions.
Syntax: SELECT GREATEST(30, 2, 36, 81, 125);
Output: 125
• LEAST(): It returns the smallest value in a list of expressions.
Syntax: SELECT LEAST(30, 2, 36, 81, 125);
Output: 2
• LN(): It returns the natural logarithm of a number.
Syntax: SELECT LN(2);
Output: 0.6931471805599453
• LOG10(): It returns the base-10 logarithm of a number.
Syntax: SELECT LOG(2);
Output: 0.6931471805599453
Built in Functions - Numeric Functions in
SQL
• LOG2(): It returns the base-2 logarithm of a number.
Syntax: SELECT LOG2(6);
Output: 2.584962500721156
• MOD(): It returns the remainder of n divided by m.
Syntax: SELECT MOD(18, 4);
Output: 2
• PI(): It returns the value of PI displayed with 6 decimal places.
Syntax: SELECT PI();
Output: 3.141593
• POW(): It returns m raised to the nth power.
Syntax: SELECT POW(4, 2);
Output: 16
• RADIANS(): It converts a value in degrees to radians.
Syntax: SELECT RADIANS(180);
• RAND(): It returns a random number.
Syntax: SELECT RAND();
Output: 0.33623238684258644
• ROUND(): It returns a number rounded to a certain number of decimal places.
Syntax: SELECT ROUND(5.553);
Output: 6
• SIGN(): It returns a value indicating the sign of a number.
Syntax: SELECT SIGN(255.5);
Output: 1
• SIN(): It returns the sine of a number.
Syntax: SELECT SIN(2);
Output: 0.9092974268256817
Built in Functions - Numeric Functions in
SQL
• SQRT(): It returns the square root of a number.
Syntax: SELECT SQRT(25);
Output: 5
• ATAN2(): It returns the arctangent of the x and y coordinates, as an angle and expressed in radians.
Syntax: SELECT ATAN2(7);
Output: 1.42889927219073
• TRUNCATE(): This doesn’t work for SQL Server. It returns 7.53635 truncated to 2 places right of the
decimal point.
Syntax: SELECT TRUNCATE(7.53635, 2);
Output: 7.53
Built in Functions - String functions in SQL
• ASCII(): This function is used to find the ASCII value of a character.
Syntax: SELECT ascii('t’);
Output: 116
• CHAR_LENGTH(): Doesn’t work for SQL Server. Use LEN() for SQL Server. This function is used to find the length of a
word. Syntax: SELECT char_length('Hello!’);
Output: 6
• CHARACTER_LENGTH(): Doesn’t work for SQL Server. Use LEN() for SQL Server. This function is used to find the
length of a line.
Syntax: SELECT CHARACTER_LENGTH('geeks for geeks’);
Output: 15
• CONCAT(): This function is used to add two words or strings.
Syntax: SELECT 'Geeks' || ' ' || 'forGeeks';
Output: ‘GeeksforGeeks’
• CONCAT_WS(): This function is used to add two words or strings with a symbol as concatenating symbol.
Syntax: SELECT CONCAT_WS('_', 'geeks', 'for', 'geeks’);
Output: geeks_for_geeks
• FIND_IN_SET(): This function is used to find a symbol from a set of symbols.
Syntax: SELECT FIND_IN_SET('b', 'a, b, c, d, e, f’);
Output: 2
• FORMAT(): This function is used to display a number in the given format.
Syntax: Format("0.981", "Percent");
Output: ‘98.10%’
Built in Functions - String functions in SQL
• INSTR(): This function is used to find the occurrence of an alphabet.
Syntax: INSTR('geeks for geeks', 'e’);
Output: 2 (the first occurrence of ‘e’)
Syntax: INSTR('geeks for geeks', 'e', 1, 2 );
Output: 3 (the second occurrence of ‘e’)
• LCASE(): This function is used to convert the given string into lower case.
Syntax: LCASE ("GeeksFor Geeks To Learn");
Output: geeksforgeeks to learn
• LEFT(): This function is used to SELECT a sub string from the left of given size or characters.
Syntax: SELECT LEFT('geeksforgeeks.org', 5);
Output: geeks
• LENGTH(): This function is used to find the length of a word.
Syntax: LENGTH('GeeksForGeeks’);
Output: 13
• LOCATE(): This function is used to find the nth position of the given word in a string.
Syntax: SELECT LOCATE('for', 'geeksforgeeks', 1);
Output: 6
• LOWER(): This function is used to convert the upper case string into lower case.
Syntax: SELECT LOWER('GEEKSFORGEEKS.ORG’);
Output: geeksforgeeks.org
• LPAD(): This function is used to make the given string of the given size by adding the given symbol.
Syntax: LPAD('geeks', 8, '0’);
Output: 000geeks
Built in Functions - String functions in SQL
• LTRIM(): This function is used to cut the given sub string from the original string.
Syntax: LTRIM('123123geeks', '123’);
Output: geeks
• MID(): This function is to find a word from the given position and of the given size.
Syntax: Mid ("geeksforgeeks", 6, 2);
Output: for
• POSITION(): This function is used to find position of the first occurrence of the given alphabet.
Syntax: SELECT POSITION('e' IN 'geeksforgeeks’);
Output: 2
• REPEAT(): This function is used to write the given string again and again till the number of times mentioned.
Syntax: SELECT REPEAT('geeks', 2);
Output: geeksgeeks
• REPLACE(): This function is used to cut the given string by removing the given sub string.
Syntax: REPLACE('123geeks123', '123’);
Output: geeks
• REVERSE(): This function is used to reverse a string.
Syntax: SELECT REVERSE('geeksforgeeks.org’);
Output: ‘gro.skeegrofskeeg’
• RIGHT(): This function is used to SELECT a sub string from the right end of the given size.
Syntax: SELECT RIGHT('geeksforgeeks.org', 4);
Output: ‘.org’
• RPAD(): This function is used to make the given string as long as the given size by adding the given symbol on the right.
Syntax: RPAD('geeks', 8, '0’);
Output: ‘geeks000’
• RTRIM(): This function is used to cut the given sub string from the original string.
Syntax: RTRIM('geeksxyxzyyy', 'xyz’);
Output: ‘geeks’
• SPACE(): This function is used to write the given number of spaces.
Syntax: SELECT SPACE(7);
Output: ‘ ‘
Built in Functions - String functions in SQL
• STRCMP(): This function is used to compare 2 strings.
• If string1 and string2 are the same, the STRCMP function will return 0.
• If string1 is smaller than string2, the STRCMP function will return -1.
• If string1 is larger than string2, the STRCMP function will return 1.
Syntax: SELECT STRCMP('google.com', 'geeksforgeeks.com’);
Output: -1
• SUBSTR(): This function is used to find a sub string from the a string from the given position.
Syntax:SUBSTR('geeksforgeeks', 1, 5);
Output: ‘geeks’
• SUBSTRING(): This function is used to find an alphabet from the mentioned size and the given string.
Syntax: SELECT SUBSTRING('GeeksForGeeks.org', 9, 1);
Output: ‘G’
• SUBSTRING_INDEX(): This function is used to find a sub string before the given symbol.
Syntax: SELECT SUBSTRING_INDEX('www.geeksforgeeks.org', '.', 1);
Output: ‘www’
• TRIM(): This function is used to cut the given symbol from the string.
Syntax: TRIM(LEADING '0' FROM '000123’);
Output: 123
• UCASE(): This function is used to make the string in upper case.
Syntax: UCASE ("GeeksForGeeks");
Output: GEEKSFORGEEKS
Built in Functions - Date functions in SQL
• NOW(): Returns the current date and time.
Example: SELECT NOW();
Output:2017-01-13 08:03:52
• CURDATE(): Returns the current date.
Example: SELECT CURDATE();
Output: 2017-01-13
• CURTIME(): Returns the current time.
Example: SELECT CURTIME();
Output: 08:05:15
• DATE(): Extracts the date part of a date or date/time expression.
• EXTRACT(): Returns a single part of a date/time.
Syntax: EXTRACT(unit FORM date);
SELECT Name, Extract(DAY FROM BirthTime) AS BirthDay FROM
Test;
Built in Functions - Date functions in SQL
• DATE_ADD() : Adds a specified time interval to a date
Syntax: DATE_ADD(date, INTERVAL expr type);
SELECT Name, DATE_ADD(BirthTime, INTERVAL 1 YEAR) AS
BirthTimeModified FROM Test;
• To update name of the students to geeks in Student2 table whose location is same as Raju,Ravi in Student1 table
• UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN
(‘Raju’,’Ravi’));
Subqueries with the DELETE Statement
• The subquery can be used in conjunction with the DELETE statement like with any other statements mentioned above.
• To delete students from Student2 table whose rollno is same as that in Student1 table and having location as Chennai.
• DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);
SQL Correlated Subqueries
• Correlated subqueries are used for row-by-row processing. Each subquery is executed
once for every row of the outer query.
• A correlated subquery is evaluated once for each row processed by the parent
statement. The parent statement can be a SELECT, UPDATE,
or DELETE statement.
• A correlated subquery is one way of reading every row in a table and comparing
values in each row against related data.
• It is used whenever a subquery must return a different result or set of results for each
candidate row considered by the main query.
Nested Subqueries Versus Correlated Subqueries
• With a normal nested subquery, the inner SELECT query runs first and
executes once, returning values to be used by the main query.
• NOTE : You can also use the ANY and ALL operator in a correlated
subquery.
Correlated Subqueries with Select Statement
• Find all the employees who earn more than the average salary in their department.
• Outer – outer query (iterates over each row in the table)
• Subquery (calculates category-wise average salary)
Using the Exists Operator
• The EXISTS operator tests for existence of rows in the results set of the
subquery.
• If a subquery row value is found the condition is flagged TRUE and the
search does not continue in the inner query, and if it is not found then the
condition is flagged FALSE and the search continues in the inner query.
• Find the employees who have at least one person reporting to them.
Using the Not Exists Operator
• Find all the departments that do not have any employees
CORRELATED UPDATE & DELETE
CORRELATED UPDATE
• Use a correlated subquery to update rows in one table based on rows from another table.
employees (id, name, salary, department_id)
departments (id, name, average_salary)
• We want to update each employee’s salary to match the average salary of
their department.
UPDATE employees e SET salary = ( SELECT d.average_salary FROM
departments d WHERE e.department_id = d.id );
• The subquery retrieves the average salary from departments where the
department_id matches.
• Each row in employees is updated one at a time using the matching value
from the subquery.
CORRELATED DELETE
• Use a correlated subquery to delete rows in one table based on the
rows from another table.
customers (id, name)
orders (id, customer_id, amount)
• We want to delete customers who never placed an order.
DELETE FROM customers c WHERE NOT EXISTS ( SELECT 1 FROM
orders o WHERE o.customer_id = c.id );
• The EXISTS subquery checks if a customer has any matching orders.
• If no orders exist (NOT EXISTS), the customer is deleted.
Basics of SQL-DDL,DML,DCL,TCL Views and its Types
Structure Creation, alternation
Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands
Unique, not null, check, IN operator Commit, Rollback, Savepoint
Syntax
CREATE VIEW view_name AS SELECT column1, column2..... FROM table_name
Student Details
WHERE condition;
To see the data in the View, we can query the view in the same manner as we query a
table.
SELECT * FROM DetailsView;
Student Details
• Creating View from multiple tables
• In this example we will create a View named MarksView from two tables
StudentDetails and StudentMarks.
• To create a View from multiple tables we can simply include multiple tables in
the SELECT statement.
• CREATE VIEW MarksView AS SELECT StudentDetails.NAME,
StudentDetails.ADDRESS, StudentMarks.MARKS FROM StudentDetails,
Student Marks StudentMarks WHERE StudentDetails.NAME = StudentMarks.NAME;
Output
DELETING VIEWS
• SQL allows us to delete an existing View. We can delete or drop a View using the DROP statement.
Syntax
1.The SELECT statement which is used to create the view should not
include GROUP BY clause or ORDER BY clause.
2.The SELECT statement should not have the DISTINCT keyword.
3.The View should have all NOT NULL values.
4.The view should not be created using nested queries or complex queries.
5.The view should be created from a single table. If the view is created
using multiple tables then we will not be allowed to update the view.
CREATE OR REPLACE VIEW
We can use the CREATE OR REPLACE VIEW statement to add or remove fields from a view.
Syntax
CREATE OR REPLACE VIEW view_name AS SELECT column1,coulmn2,.. FROM table_name WHERE condition;
For example, if we want to update the view MarksView and add the field AGE to this View
from StudentMarks Table, we can do this as:
Syntax:
INSERT INTO view_name(column1, column2 , column3,..) VALUES(value1, value2, value3..); view_name: Name of the View
Example:
In the below example we will insert a new row in the View DetailsView which we have created above in the example of “creating
views from a single table”.
Output
Deleting a row from a View
• Deleting rows from a view is also as simple as deleting rows from a table.
• We can use the DELETE statement of SQL to delete rows from a view.
• Also deleting a row from a view first delete the row from the actual table and the change is then reflected in the view.
• Syntax
• DELETE FROM view_name WHERE condition;
• view_name:Name of view from where we want to delete rows
• condition: Condition to select rows
In this example we will delete the last row from the view DetailsView which we just added in the above example of inserting rows.
DELETE FROM DetailsView WHERE NAME="Suresh";
If we fetch all the data from DetailsView now as,
SELECT * FROM DetailsView;
Output
Uses of a View
1.Restricting data access
Views provide an additional level of table security by restricting access to a predetermined
set of rows and columns of a table.
2.Hiding data complexity
A view can hide the complexity that exists in a multiple table join.
3.Simplify commands for the user
Views allows the user to select information from multiple tables without requiring the users
to actually know how to perform a join.
4.Store complex queries
Views can be used to store complex queries.
5.Rename Columns
Views can also be used to rename the columns without affecting the base tables provided
the number of columns in view must match the number of columns specified in select
statement. Thus, renaming helps to to hide the names of the columns of the base tables.
6.Multiple view facility
Different views can be created on the same table for different users.
Basics of SQL-DDL,DML,DCL,TCL Nested Queries, Views and its
Structure Creation, alternation Types
Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands
Unique, not null, check, IN operator Commit, Rollback, Savepoint
TCL Commands
Transaction Control Language (TCL) Commands are:
Commit − It is used to save the transactions in the database.
Savepoint − The changes done till savpoint will be unchanged and all the
transactions after savepoint will be rolled back.
Example
• Given below is an example of the usage of the TCL commands
in the database management system (DBMS)
Difference between Commit, rollback and savepoint of
TCL commands
Properties of Transactions
Atomicity − ensures that all operations within the work unit are completed
successfully. Otherwise, the transaction is aborted at the point of failure and
all the previous operations are rolled back to their former state.
Consistency − ensures that the database properly changes states
upon a successfully committed transaction.
Isolation − enables transactions to operate independently of and
transparent to each other.
Durability − ensures that the result or effect of a committed
transaction persists in case of a system failure.
COMMIT
Transactional control commands are only used with the DML
Commands such as - INSERT, UPDATE and DELETE only.
Thus, two rows from the table would be deleted and the SELECT statement would
produce the following result.
ROLLBACK Command
Following is an example, which would delete those records from the table which
have the age = 25 and then ROLLBACK the changes in the database.
Thus, the delete operation would not impact the table and the
SELECT statement would produce the following result.
select * from customers;
SAVEPOINT
• A SAVEPOINT is a point in a transaction when you can roll
the transaction back to a certain point without rolling back the
entire transaction.
The syntax for a SAVEPOINT command is as shown below.
Now that the three deletions have taken place, let us assume that you have changed
your mind and decided to ROLLBACK to the SAVEPOINT that you identified as SP2.
Because SP2 was created after the first deletion, the last two deletions are undone −
Notice that only the first deletion took place since you rolled back
to SP2.
RELEASE SAVEPOINT Command:
The RELEASE SAVEPOINT command is used to remove a SAVEPOINT that
you have created.
The syntax for a RELEASE SAVEPOINT command is as follows:
Once a SAVEPOINT has been released, you can no longer use the
ROLLBACK command to undo transactions performed since the last
SAVEPOINT.
Basics of SQL-DDL,DML,DCL,TCL Nested Queries, Views and its
Structure Creation, alternation Types
Defining Constraints-Primary Key, Foreign Key, Transaction Control Commands
Unique, not null, check, IN operator Commit, Rollback, Savepoint
Variable_name Table_name.Column_name%type;
This syntax defines a variable of the type of the referenced column on the
referenced table
PL/SQL Control Structure
• PL/SQL has a number of control structures which includes:
• Conditional controls
• Iterative or loop controls.
• Exception or error controls
• These control structure, can be used singly or together, that allow the
PL/SQL developer to direct the flow of execution through the
program.
PL/SQL Control Structure
• Conditional Controls
IF....THEN....END IF;
IF....THEN...ELSE....END IF;
IF....THEN...ELSIF....THEN....ELSE....END IF;
PL/SQL Control Structure
• LOOP
...SQL Statements...
EXIT;
END LOOP;
• WHILE loops
WHILE condition LOOP
...SQL Statements...
END LOOP;
• FOR loops
FOR <variable(numeric)> IN [REVERSE]
Cursor
• A cursor is a temporary workstation that is allocated by the database server
during the execution of a statement.
• It is a database object that allows us to access data of one row at a time.
This concept of SQL is useful when the user wants to update the rows of the
table one by one.
• 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.
• There are two types of cursors −
Implicit cursors
Explicit cursors
Implicit Cursors
These types of cursors are generated and allocated by the SQL server
when the system performs INSERT, DELETE, and UPDATE operations
on SQL queries.
• This cursor is also referred to as the default cursor in SQL.
• An implicit cursor is also created by the system when the SELECT
query selects the single row.
• In PL/SQL, the most recent implicit cursor is the SQL cursor, which has
the following attributes.
Implicit Cursors
%NOTFOUND
The logical opposite of %FOUND. It returns TRUE if an INSERT, UPDATE, or
2 DELETE statement affected no rows, or a SELECT INTO statement returned
no rows. Otherwise, it returns FALSE.
%ISOPEN
Always returns FALSE for implicit cursors, because Oracle closes the SQL
3 cursor automatically after executing its associated SQL statement.
%ROWCOUNT
Returns the number of rows affected by an INSERT, UPDATE, or DELETE
4 statement, or returned by a SELECT INTO statement.
Example
The following program will update the employee 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;
Output:
6 customers selected
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.
LANGUAGE value of SQL and the BEGIN...END block, which forms the procedure body, are particular to an SQL
procedure
∙ CASE statement
∙ FOR statement
∙ GOTO statement
∙ IF statement
∙ ITERATE statement
∙ RETURN statement
∙ WHILE statement
• Invoking Procedures
Can invoke Stored procedure stored at the location of the database by using the
SQL CALL statement
IF <condition> THEN
<statement(s)>
ELSE
<statement(s)>
END IF;
Loops
LOOP
……
EXIT WHEN <condition>
……
END LOOP;
EXAMPLE :
CREATE PROCEDURE UPDATE_SALARY_IF
(IN employee_number CHAR(6), IN rating SMALLINT)
LANGUAGE SQL
BEGIN
SET counter = 10;
WHILE (counter > 0) DO
IF (rating = 1)
THEN UPDATE employee
SET salary = salary * 1.10, bonus = 1000
WHERE empno = employee_number;
ELSEIF (rating = 2)
THEN UPDATE employee
SET salary = salary * 1.05, bonus = 500
WHERE empno = employee_number;
ELSE UPDATE employee
SET salary = salary * 1.03, bonus = 0
WHERE empno = employee_number;
END IF;
SET counter = counter – 1;
END WHILE;
END
@
Triggers
• A trigger is a stored procedure in database which automatically invokes whenever a
special event in the database occurs. For example, a trigger can be invoked when a
row is inserted into a specified table or when certain table columns are being updated.
∙
A database definition (DDL) statement (CREATE, ALTER, or DROP).
∙
A database operation (SERVERERROR, LOGON, LOGOFF, STARTUP, or SHUTDOWN).
The syntax of Triggers in SQL–
CREATE [OR REPLACE ] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF }
{INSERT [OR] | UPDATE [OR] | DELETE}
[OF col_name]
ON table_name
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
WHEN (condition)
DECLARE
Declaration-statements
BEGIN
Executable-statements
EXCEPTION
Exception-handling-statements
END;
Create [OR REPLACE] TRIGGER trigger_name: It makes or replaces a current trigger with the
EXAMPLE
CREATE OR REPLACE TRIGGER display_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON customers
FOR EACH ROW
WHEN (NEW.ID > 0)
DECLARE
sal_diff number;
BEGIN
sal_diff := :NEW.salary - :OLD.salary;
dbms_output.put_line('Old salary: ' || :OLD.salary);
dbms_output.put_line('New salary: ' || :NEW.salary);
dbms_output.put_line('Salary difference: ' || sal_diff);
END;
After creating a Trigger, use it in the PL/SQL code for putting it in to action.
DECLARE
total_rows number(2);
BEGIN
UPDATE customers
IF sql%notfound THEN
total_rows := sql%rowcount;
END IF;
END;
/
Advantages of Triggers
•Auditing
• Step-2
Optimizer
• During optimization stage, database must perform a hard parse at least for one unique DML statement and perform optimization
during this parse. This database never optimizes DDL unless it includes a DML component such as subquery that require
optimization.
• It is a process in which multiple query execution plan for satisfying a query are examined and most efficient query plan is satisfied
for execution.
•
Database catalog stores the execution plans and then optimizer passes the lowest cost plan for execution.
Row Source Generation
• The Row Source Generation is a software that receives a optimal execution
plan from the optimizer and produces an iterative execution plan that is
usable by the rest of the database.
• The iterative plan is the binary program that when executes by the sql
engine produces the result set.
Step-3
Execution Engine
• Finally runs the query and display the required result.