You are on page 1of 76

Overview of SQL DDL, DML and DCL Commands.

CREATE - to create objects in the database


ALTER - alters the structure of the database
DROP - delete objects from the database
TRUNCATE - remove all records from a table, including all spaces allocated
for the records are removed

INSERT - insert data into a table


UPDATE - updates existing data within a table
DELETE - deletes all records from a table, the space for the records
remain
SELECT - retrieve data from the a database

CALL - call a PL/SQL or Java subprogram


LOCK TABLE - control concurrency
GRANT - gives user's access privileges to database
REVOKE - withdraw access privileges given with the GRANT command
COMMIT - save work done
SAVEPOINT - identify a point in a transaction to which you can later roll back
ROLLBACK - restore database to original since the last COMMIT
CREATE TABLE COMMAND

Syntax:
CREATE TABLE <table_name>
(
<column_name1><datatype>(<size>)[<constraint1>]
<column_name2><datatype>(<size>)[<constraint1>]
[<constraint-list>]
);
Create a table EMP with the following schema:

Column Name Data type Size


EMPNO NUMBER 4
ENAME CHARACTER 10
JOB CHARACTER 9
MGR NUMBER 4
HIREDATE DATE
SAL NUMBER 7,2
COMM NUMBER 7,2
DEPTNO NUMBER 2

CREATE TABLE EMP


(EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2));
Table created.

Create a table DEPT with the following schema:

Column Name Data type Size


DEPTNO NUMBER 2
DNAME CHARACTER 14
LOC CHARACTER 13
CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPTNO PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13));

Table Created.

TRUNCATE TABLE COMMAND


a) TRUNCATE TABLE DEPT;

Table truncated.

DROP TABLE COMMAND


a) CREATE TABLE TEMP
(TNO NUMBER(4),TNAME VARCHAR2(20));
1 row created.

b) DROP TABLE TEMP;


Table droped.

ALTER TABLE COMMAND:


 Altering Table: The alter table command is used to modify the
structure of existing table. (i.e adding a column, add an integrity
constraint etc.).
Adding Columns: The new column will be added with NULL values for
all rows currently in table.
Syntax: alter table <table_name>
add (<col1><datatype><size> [<constraint>],
<col2><datatype><size><constraint>],…….);

a) ALTER TABLE EMP


ADD (TEMP1 NUMBER(2));

Table altered.

OR
b) ALTER TABLE EMP
ADD (TEMP1 NUMBER(2), TEMP2 NUMBER(4));

Table altered.
 Modifying Column Definitions: To change datatype, size, default
value and NOT NULL column constraint of a column definition.
Syntax:alter table <table_name>
modify (<col_name><new_datatype><new_size> );
Ex.
c) ALTER TABLE EMP
MODIFY (TEMP1 NUMBER(4));
Table altered.

d) ALTER TABLE EMP


MODIFY (TEMP1 NUMBER(4));
Table altered.
e) ALTER TABLE EMP
MODIFY (TEMP1 VARCHAR2(4));
Table altered.
To change column name:
Syntax:
ALTER TABLE <table name> RENAME COLUMN <old column name>
TO <new column name>;
EX: ALTER TABLE EMP RENAME COLUMN TEMP1 TO NEWTEMP;
 DropingColumns: The column can be deleted as follows.
Syntax: alter table <table_name>
drop (<col1>,<col2>,…….);

f) ALTER TABLE EMP


DROP (TEMP1);

Table altered.
g) ALTER TABLE EMP
DROP (TEMP1, TEMP2);

Table altered.

select * from all_constraints where table_name = 'EMP';


OR
SELECT CONSTRAINT_NAME, COLUMN_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME='EMP';
h) ALTER TABLE EMP
DROP CONSTRAINT SYS_C004048;
i) ALTER TABLE EMP
ADD CONSTRAINT PK_EMPNO PRIMARY KEY (EMPNO);

j) ALTER TABLE EMP


DROP CONSTRAINT PK_EMPNO;
For More Practice:
SQL> CREATE TABLE SUBJECT1
(SUBJCODE NUMBER(2),
SNAME VARCHAR2(20));

Table created.

SQL> CREATE TABLE STUDENT2


(STUID NUMBER(4),
SNAME VARCHAR2(20),
SUBJCODE NUMBER(2),
MARKS NUMBER(3));

Table created.

SQL> CREATE TABLE TEMP


(STUID NUMBER(4),
SNAME VARCHAR2(20),
SUBJCODE NUMBER(2),
MARKS NUMBER(3),
CONSTRAINT PK_STUID_SNAME PRIMARY
KEY(STUID,SNAME));

Table created.

SQL> CREATE TABLE STUDENT3


(STUID NUMBER(4),SNAME VARCHAR2(20),SUBJCODE NUMBER(2),
2 MARKS NUMBER(3));

Table created.

SQL> ALTER TABLE STUDENT3


2 ADD CONSTRAINT PK_STUID PRIMARY
3 KEY(STUID);

Table altered.
SQL> ALTER TABLE STUDENT3
2 DROP CONSTRAINT PK_STUID;

Table altered.
DML COMMANDS: (INSERT, UPDATE, DELETE, SELECT)
a) INSERT COMMAND:
This command is used to create data into the table which is
already defined through DDL commands. The data can be entered
in the form of rows and columns.
Syntax:
INSERT INTO <Table name>
(column1, [column2, ……….,columnN])
values (column1value,column2value,…..,columnNvalue);
OR
INSERT INTO <Table name>
Values (column1value,column2value,…..,columnNvalue);
Data to be created in the EMP table is as follows:

Data to be created in the DEPT table is as follows:


For EMP Table:

EX: INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902, '17-DEC-80',800,NULL,20);

1 row inserted.

Same manner do the following:

INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '20-FEB-81',1600,300,30);

INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698, '22-FEB-81',1250,500,30);

INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839, '02-APR-81',2975,NULL,20);

INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '28-SEP-81',1250,1400,30);

INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839, '01-MAY-81',2850,NULL,30);

INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839, '09-JUN-81',2450,NULL,10);

INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-82',3000,NULL,20);

INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL, '17-NOV-81',5000,NULL,10);

INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698, '08-SEP-81',1500,NULL,30);

INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788, '12-JAN-83',1100,NULL,20);

INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698, '03-DEC-81',950,NULL,30);

INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566, '03-DEC-81',3000,NULL,20);

INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782, '23-JAN-82',1300,NULL,10);

For DEPT Table:

INSERT INTO DEPT VALUES ('10','ACCOUNTING','NEW YORK');

INSERT INTO DEPT VALUES ('20','RESEARCH','DALLAS');

INSERT INTO DEPT VALUES ('30','SALES','CHICAGO');

INSERT INTO DEPT VALUES ('40','OPERATIONS','BOSTON');


b) UPDATE COMMAND:
This command is used to modify or change or replace the
existingdata of a table.

Syntax:
UPDATE <Table_name>
Set <column1>=<column1value>
[,<column2>=<column2value>,………
,<columnN>=<columnNvalue>]
[where<condition>];

EX: UPDATE DEPT


SET DNAME='IT';

OR
UPDATE DEPT
SET DNAME='IT'
WHERE DEPTNO=10;
1 row updated.

DELETE COMMAND:
This command is used to remove a single row or multiple rows of a
table.
Syntax: DELETE FROM<Table_name>
[where<condition>];

EX: DELETE FROM DEPT


WHERE DEPTNO=20;
1 row deleted.
SELECT COMMAND:
This command is used to view a single row or multiple rows or
single column or multiple columns of a table.

Syntax:
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;

EX: SELECT * FROM EMP;


14 rows returned.

EX: SELECT * FROM DEPT;


4 rows returned.
LOGICAL OPERATORS AND LOGICAL CONDITIONS

NOT
DISPLAY THOSE EMPLOYEES WHOSE COMMISSION (COMM) IS NOT NULL.

QUERY:

SELECT * FROM EMP WHERE NOT (COMM IS NULL);

OUTPUT:

DISPLAY THOSE EMPLOYEES WHOSE SALARY (SAL) IS NOT BETWEEN 1000 AND

2000.

QUERY:

SELECT * FROM EMP WHERE NOT (SAL BETWEEN 1000 AND 2000);

OUTPUT:

AND
DISPLAY THOSE EMPLOYEES WHOSE JOB IS SALESMAN AND SALARY IS ABOVE

1500.

QUERY:

SELECT * FROM EMP WHERE JOB=’SALESMAN’ AND SAL > 1500;

OUTPUT:
OR
DISPLAY THOSE EMPLOYEES WHOSE JOB IS SALESMAN OR SALARY IS ABOVE

1500.

QUERY:

SELECT * FROM EMP WHERE JOB=’SALESMAN’ OR SAL > 1500;

OUTPUT:

IN
DISPLAY THOSE EMPLOYEES WHO BELONGS TO DEPARTMENT 10 OR 20.

QUERY:

SELECT * FROM EMP WHERE DEPTNO IN (10,20);

OUTPUT:
QUERIES BASED ON EMP & DEPT TABLES
1) DISPLAY THE EMPLOYEES WHO JOINED THE COMPANY IN THE YEAR 1981.

QUERY:

SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'YY')=81;

OUTPUT:

2) DISPLAY THE EMPLOYEES WHOSE SALARY IS BETWEEN 1000 AND 2000 BUT

THEIR JOB IS ‘CLERK’ OR ‘SALESMAN’.

QUERY:

SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 2000 AND JOB

IN('CLERK','SALESMAN');

OUTPUT:
3) DISPLAY THE EMPLOYEES WHOSE DEPTNO IS 10 OR 30 WHILE HIS SALARY

IS LESS THAN 1500 AND JOB IS OTHER THAN MANAGER.

QUERY:

SELECT * FROM EMP WHERE DEPTNO IN(10,30) AND SAL<1500 AND JOB NOT

IN('MANAGER');

OUTPUT:

4) DISPLAY THOSE EMPLOYEES WHOSE SALARY IS 2000,3000 AND 5000 AND

JOB IS ANALYST OR PRESIDENT WHILE THEY JOINED THE COMPANY IN THE YEAR

1981.

QUERY:

SELECT * FROM EMP WHERE SAL IN(2000,3000,5000) AND JOB IN

('ANALYST','PRESIDENT') AND TO_CHAR(HIREDATE,'YY')=81;

OUTPUT:

5) DISPLAY THOSE EMPLOYEES WHO JOINED THE COMPANY IN THE MONTH OF

DECEMBER.

QUERY:

SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'MON')='DEC';

OUTPUT:
6) DISPLAY THOSE EMPLOYEES WHOSE SALARY ENDS WITH 0.

QUERY:

SELECT * FROM EMP WHERE MOD(SAL,10)=0;

OUTPUT:

7) DISPLAY THOSE EMPLOYEES WHO ARE IN SALES DEPARTMENT.

QUERY:

SELECT ENAME,DNAME FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO AND

DNAME='SALES';

OUTPUT:
8) DISPLAY MANAGER NAME FOR JONES.

QUERY:

SELECT E.ENAME "EMPLOYEE" ,M.ENAME "MANAGER" FROM EMP E,EMP M

WHERE E.MGR=M.EMPNO AND E.ENAME='JONES';

OUTPUT:

9) DISPLAY ALL THOSE EMPLOYEES WHO ARE MANAGERS.

QUERY:

SELECT * FROM EMP WHERE JOB IN('MANAGER');

OUTPUT:
12)DISPLAY ALL THOSE EMPLOYEES WHO ARE NOT MANAGERS.

QUERY:

SELECT * FROM EMP WHERE JOB NOT IN('MANAGER');

OUTPUT:

13) DIPLAY THOSE MANAGERS WHO ARE IN SALES OR RESEARCH DEPARTMENT.

QUERY:

SELECT E.ENAME,E.JOB,D.DNAME FROM EMP E,DEPT D

WHERE E.DEPTNO=D.DEPTNO AND E.JOB='MANAGER' AND

D.DNAME IN('SALES','RESEARCH');

OUTPUT:
14) DISPLAY THOSE EMPLOYEES WHOSE SALARY IS GREATER THAN HIS MANAGER.

QUERY:

SELECT E.ENAME,E.SAL,M.ENAME,M.SAL FROM EMP E,EMP M WHERE

E.MGR=M.EMPNO AND E.SAL>M.SAL;

OUTPUT:

15) DISPLAY THOSE EMPLOYEES WHOSE SALARY IS AN ODD NUMBER.

QUERY:

SELECT * FROM EMP WHERE MOD(SAL,2)!=0;

OUTPUT:

16) DISPLAY THOSE EMPLOYEES WHOSE NAME ENDS WITH 'R'.

QUERY:

SELECT * FROM EMP WHERE ENAME LIKE '%R';

OUTPUT:
17) DISPLAY THOSE EMPLOYEES WHOSE NAME INCLUDES 'A' ANYWHERE.

QUERY:

SELECT * FROM EMP WHERE ENAME LIKE '%A%';

OUTPUT:

18) DISPLAY THE LAST THREE CHARACTERS OF ALL THE EMPLOYEE NAMES.

QUERY:

SELECT ENAME,SUBSTR(RTRIM(ENAME),-3,3) FROM EMP;

OUTPUT:
19) DISPLAY THE LAST DATE OF THE CURRENT MONTH.

QUERY:

SELECT LAST_DAY(SYSDATE) "LAST DAY" FROM DUAL;

OUTPUT:

20) DISPLAY ONLY THE DAY OF THE MONTH OF JOINING OF THE EMPLOYEES

IN THE COMPANY.

QUERY:

SELECT ENAME "EMPLOYEE",TO_CHAR(HIREDATE,'DAY') "DAY" FROM

EMP;

OUTPUT:

21) DISPLAY THE CURRENT DATE.

QUERY:

SELECT SYSDATE "TODAY" FROM DUAL;

OUTPUT:
Queries using ORDER BY, GROUP BY and HAVING clauses
To write queries using clauses such as GROUP BY, ORDER BY, etc. and

retrieving information by joining tables.

Source tables: emp, dept.

Order by : The order by clause is used to display the results in sorted order.

Group by: The attribute or attributes given in the clauses are used to form groups.

Tuples with the same value on all attributes in the group by clause are placed in

one group.

Having: SQL applies predicates (conditions) in the having clause after groups have

been formed, so aggregate function be used.

1. DISPLAY LIST OF EMPLOYEES FROM EMP TABLE IN ASCENDING ORDER BY

ENAME.

QUERY:

SELECT * FROM EMP

ORDER BY ENAME;

OUTPUT:
2. DISPLAY LIST OF EMPLOYEES FROM EMP TABLE IN DESCENDING ORDER BY

ENAME.

QUERY:

SELECT * FROM EMP

ORDER BY ENAME DESC;

OUTPUT:

3. DISPLAY TOTAL SALARY SPENT FOR EACH JOB CATEGORY.

QUERY:

SELECT JOB,SUM(SAL) FROM EMP

GROUP BY JOB;

OUTPUT:
4. DISPLAY JOB CATEGORY WISE TOTAL SALARY WHICH IS ABOVE 5000.

QUERY:

SELECT JOB,SUM(SAL) FROM EMP

GROUP BY JOB

HAVING SUM(SAL)>5000;

OUTPUT:

5. DISPLAY TOTAL SALARY SPENT ON SALESMAN.

QUERY:

SELECT JOB,SUM(SAL) FROM EMP

GROUP BY JOB

HAVING JOB='SALESMAN';

OUTPUT:

6. DISPLAY MANAGER NAME WITH TOTAL NO. OF EMPLOYEES WORKING UNDER

HIM.

QUERY:

SELECT M.ENAME,COUNT(E.EMPNO) "NO OF EMPLOYEES" FROM EMP

E,EMP M WHERE E.MGR=M.EMPNO GROUP BY M.ENAME;

OUTPUT:
SUB QUERIES
Simple subquery:
1. DISPLAY THOSE EMPLOYEES WHOSE SALARY IS MORE THAN THE SALARY OF

EMPLOYEE NO 7566.

QUERY:

SELECT ENAME FROM EMP

WHERE SAL > ( SELECT SAL FROM EMP

WHERE EMPNO=7566);

OUTPUT:

Order by:
2. DISPLAY ALL THOSE EMPLOYEES WHO ARE WORKING UNDER KING IN THE

EMP TABLE .

QUERY:

SELECT * FROM EMP E

WHERE E.MGR=(SELECT M.EMPNO FROM EMP M

WHERE M.ENAME='KING')

ORDER BY ENAME;

OUTPUT:
Aggregation:
3. DISPLAY THOSE EMPLOYEES WHOSE SALARY IS MORE THAN THE AVERAGE

SALARY OF DEPARTMENT 20.

QUERY:

SELECT * FROM EMP

WHERE SAL>(SELECT AVG(SAL) FROM EMP

WHERE DEPTNO=20);

OUTPUT:

Grouping:
4. DISPLAY THOSE EMPLOYEES WHOSE SALARY IS MINIMUM IN THE
DEPARTMENT.

QUERY:

SELECT ENAME, SAL, DEPTNO FROM EMP


WHERE SAL IN (SELECT MIN(SAL) FROM EMP
GROUP BY DEPTNO);
OUTPUT:
5. DISPLAY THOSE EMPLOYEES WHOSE SALARY IS MINIMUM.

QUERY:

SELECT * FROM EMP WHERE SAL=(SELECT MIN(SAL) FROM EMP);

OUTPUT:
NESTED QUERIES or MULTIPLE LEVELS OF NESTING

 Sometimes Subqueries may themselves contain subqueries.

 When the WHERE clause of a subquery has as its object another subquery,

these are termed as nested subqueries.

1. DISPLAY THE DEPARTMENT NAME IN WHICH THE EMPLOYEE IS GETTING

MAXIMUM SALARY.

QUERY:

SELECT DNAME FROM DEPT

WHERE DEPTNO = (SELECT DEPTNO FROM EMP

WHERE SAL = (SELECT MAX(SAL) FROM EMP));

OUTPUT:

Evaluation of the above query:

2. DISPLAY ALL THE EMPLOYEES WHO EARN SALARIES BETWEEN MINIMUM AND

3000 (BOTH INCLUSIVE).

QUERY:

SELECT * FROM EMP


WHERE SAL BETWEEN
(SELECT MIN(SAL) FROM EMP) AND 2000;
OUTPUT:
3. DISPLAY A NEW COLUMN NAMED “PAY,” WHICH CONTAINS EITHER “HIGH” OR

“LOW” BASED ON THEIR SALARY COMPARED TO THE AVERAGE SALARY OF ALL

EMPLOYEES.

QUERY:

SELECT EMPNO, ENAME,

CASE

WHEN SAL >= (SELECT AVG(SAL) FROM EMP) THEN

'HIGH'

ELSE 'LOW'

END AS PAY, SAL

FROM EMP;

OUTPUT:
4. DISPLAY THOSE EMPLOYEES WHO ARE IN SALES DEPARTMENT AND WORKING

UNDER KING OR JONES.

QUERY:

SELECT E.EMPNO,E.ENAME FROM EMP E,DEPT D WHERE D.DNAME='SALES'

AND E.MGR=ANY (SELECT M.EMPNO FROM EMP M

WHERE M.ENAME IN('KING','JONES'));

OUTPUT:
CORRELATED SUBQUERIES

The Oracle server performs a correlated subquery when the subquery


references a column from a table referred to in the parent statement.
A correlated subquery is evaluated once for each row processed by the
parent statement as shown below.

The parent statement can be a SELECT, UPDATE, or DELETE statement.

1. Display whose salary is higher than the average salary of their


department.
Query:-
SELECT O.ENAME, O.SAL, O.DEPTNO FROM EMP O

WHERE O.SAL >

(SELECT AVG(I.SAL) FROM EMP I

WHERE I.DEPTNO = O.DEPTNO);

OUTPUT:
NUMBER FUNCTIONS

Absolute function: It returns the absolute value of data i.e., a positive value.

Syntax:ABS(data)

Query:-

SQL>SELECT ABS(-200) FROM DUAL;

OUTPUT:-

CEIL function: It returns the largest integer greater than or equal to data.

Syntax: CEIL(data)

Query:-

SQL>SELECT CEIL(74.55) FROM DUAL;

OUTPUT:-

FLOOR function: It returns the smallest integer less than or equal to data.
Syntax:FLOOR(data)
Query:-

SQL>SELECT FLOOR(74.5) FROM DUAL;

OUTPUT:

MOD function: It returns the modulus or remainder.


Syntax:MOD(data,y)
Query:-
SQL>SELECT MOD(11,2) FROM DUAL;
OUTPUT:

POWER function: It returns the data raised to the power of y as given below.
Syntax:POWER(data,y)
Query:-
SQL>SELECT POWER(3,2) FROM DUAL;
OUTPUT:

ROUND function: It rounds up the data to the specified number of decimal places.
Syntax:ROUND(data,n)
Query:-
SQL>SELECT ROUND(123.5,0) FROM DUAL;
OUTPUT:

Query:-
SQL>SELECT ROUND(123.55,1) FROM DUAL;
OUTPUT:

Query:-
SQL>SELECT ROUND(123.55,-1) FROM DUAL;
OUTPUT:

Query:-
SQL>SELECT ROUND(123.55,-2) FROM DUAL;
OUTPUT:

TRUNC function : The TRUNC function can be used with both numbers and
dates. It is mainly used to terminate the column, expression, or value to a
specified number of decimal places. When TRUNC is used, if the number of
decimal places is not specified, then the specified number defaults to zero.

Syntax: TRUNC(column|expression, decimal places)


Query:-
SELECT TRUNC (45.926, 2) FROM DUAL;
OUTPUT:

Query:-
SELECT TRUNC (45.926) FROM DUAL;
OUTPUT:
SQRT function: It returns the square root of data.
Syntax:SQRT(data)
Query:-
SQL>SELECT SQRT(81) FROM DUAL;
OUTPUT:
AGGREGATE FUNCTIONS

AVG function: It can be used on numeric data or character data that


contains only numeric’s.

Query:-

SELECT AVG(SAL) FROM EMP;

OUTPUT:

MAX function: It is used to find the maximum value of x. It can be


used on any type of data.

Query:-

SELECT MAX(COMM) FROM EMP;

OUTPUT:

MIN function: It is used to find the minimum value of x.

Query:-

SELECT MIN(COMM) FROM EMP;

OUTPUT:

SUM function: It sums the values and can be used on numeric data
also.

SELECT SUM(COMM) FROM EMP;

OUTPUT:
COUNT FUNCTIONS

COUNT(*): It counts the number of rows in the table or the number of


row in the group including NULL.

Query:-

SELECT COUNT(*) FROM EMP;

OUTPUT:

COUNT(DISTINCT column_name): It counts the number of different value


in the column.

Query:-

SELECT COUNT(DISTINCT DEPTNO) FROM EMP;

OUTPUT:
CHARACTER FUNCTIONS

INITCAP(data): It will convert the first letter of the string to the


uppercase.

Query:-

SELECT INITCAP('ADITYA')FROM DUAL;

OUTPUT:

LENGTH(data): It will return the length of the string.

Query:-

SELECT LENGTH('Aditya')FROM DUAL;

OUTPUT:

SUBSTR(data,x,y): This function will extract y characters starting


from the x Character of data.

Query:-

SELECT SUBSTR(‘Aditya Engineering College',5,3) FROM


DUAL;

OUTPUT:
DATE FUNCTIONS

The default display format for dates is DD/MON/YYYY.

example: 02/DEC/2012.

SYSDATE:
To display the current date, use the DUAL table.

Query:-

SELECT SYSDATE FROM DUAL;

OUTPUT:
The following query shows how the date functions are used.

Query:-

SELECT EMPNO, HIREDATE,

ROUND(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS TENURE,

ADD_MONTHS (HIREDATE, 6) AS REVIEW,

NEXT_DAY(HIREDATE, 'FRIDAY'),

LAST_DAY(HIREDATE)

FROM EMP

WHERE MONTHS_BETWEEN (SYSDATE, HIREDATE) > 36;

OUTPUT:
CONVERSION FUNCTIONS

The Oracle Server can internally convert VARCHAR2 and CHAR data to
NUMBER and DATE data types. It can convert NUMBER and DATE data back to
CHARACTER datatype as shown below.

DATE CONVERSION TO CHARACTER DATA:

Syntax:

TO_CHAR (date column name, 'user specified format')


Query:-
SELECT empno,ename,HIREDATE,TO_CHAR (hiredate, 'YYYY , YEAR ,MM ,
MONTH , MON,DY,DAY,DD,fmMonth dd, YYYY') FROM emp;
OUTPUT:

Query:-
SELECT SYSDATE,TO_CHAR(SYSDATE,'HH24:MI:SS AM,DD "OF" MONTH,
DDspth Ddspth, ddspth') FROM dual;
OUTPUT:
NUMBER CONVERSION TO CHARACTER DATA:

Syntax:
TO_CHAR(number, 'format model')
Query:-
SELECT SAL,TO_CHAR(SAL,'99,999') FROM EMP;
OUTPUT:

CHARACTER CONVERSION TO NUMBER:

SYNTAX:

TO_NUMBER(character string, 'format model')


QUERY:
SELECT TO_NUMBER('450', '999') + 10 AS "Number Change" FROM DUAL;
OUTPUT:

CHARACTER CONVERSION TO DATE:

SYNTAX:

TO_DATE('character string', 'format model')


QUERY:
SELECT TO_DATE('November 3, 2001', 'Month dd yyyy') FROM DUAL;
OUTPUT:
NULL VALUE MANIPULATION FUNCTIONS

NULL value means that no entry has been made into the column. It states

that the corresponding value is either unknown or undefined. They should be

avoided to avoid the complexity in select & update queries and also because

columns which have constraints like primary or foreign key constraints cannot

contain a NULL value.

NVL
Syntax:
NVL(expr1,expr2)
This function is often used to check null values. It returns expr2 if the
expr1 is null, otherwise returns expr1.
Example
The following query returns 0 if comm. (commission) is null.
QUERY:-
SELECT ENAME, NVL(COMM,0) FROM EMP;
OUTPUT:
NVL2
Syntax:
NVL2(expr1,expr2,expr3)
NVL2 returns expr2 if expr1 is not null, otherwise return expr3.
QUERY:-
SELECT ENAME, NVL2(COMM,0,1000) FROM EMP;
ASSIGNS COMM=0 IF COMM IS NULL, OTHERWISE COMM=1000.
OUTPUT:

NULLIF
Syntax:
NULLIF(expr1,expr2)
NULLIF compares expr1 with expr2. If they are equal then
returns NULL otherwise return expr1.
Query:-
SELECT ENAME, NULLIF(EMPNO,MGR) FROM EMP
WHERE EMPNO=7499;
OUTPUT:

Query:-
SELECT ENAME, NULLIF(EMPNO,EMPNO) FROM EMP WHERE
EMPNO=7499;
OUTPUT:
VIEWS AND THEIR OPERATIONS
A view is a customized representation of data from one or more tables. The

tables that the view is referencing are known as base tables. A view can be

considered as a stored query or a virtual table. Only the query is stored in the

Oracle data dictionary; the actual data is not copied any-where. This means that

creating views does not take any storage space, other than the space in dictionary.

SYNTAX:

CREATE VIEW <view_name> [(column1, column2...)]

AS SELECT <* | column_names>

FROM <table_name>;

HORIZONTAL VIEW: It restricts a user’s access to only selected rows of a table.

QUERY:

CREATE VIEW HOR_V_EMP

AS SELECT * FROM EMP

WHERE EMPNO IN (7902, 7566, 7654);

OUTPUT:

QUERY:

SELECT * FROM HOR_V_EMP;

OUTPUT:
VERTICAL VIEW: It restricts a user’s access to only selected columns of a table.

QUERY:

CREATE VIEW VER_V_EMP

AS SELECT EMPNO, ENAME, SAL FROM EMP;

OUTPUT:

QUERY:

SELECT * FROM VER_V_EMP;

OUTPUT:

ROW/COLUMN SUBSET VIEWS: It restricts a user’s access to only selected rows

and columns of a table.

QUERY:

CREATE VIEW HOR_VER_V_EMP

AS SELECT EMPNO, ENAME, SAL FROM EMP

WHERE EMPNO IN(7902,7566,7654);

OUTPUT:

QUERY:

SELECT * FROM HOR_VER_V_EMP;

OUTPUT:

Note: The other operations like Insert, Delete and Update can be conducted

on VIEWS similar to DML commands as shown above.


CONSTRAINTS
Primary Key Constraint: Uniquely identifies each row of the table and

prevents NULL values. A table can have only one primary key constraint.

Syntax to define a Primary key at column level:

CREATE TABLE <table_name>

(
<column_name1><datatype>(<size>)[CONSTRAINT
<constraint name1>] PRIMARY KEY,
…. ,
…. ,
<column_nameN><datatype>(<size>)[<constraint1>]
[<constraint-list>]
);
CREATE A TABLE STUDENT IN WHICH STUID SHOULD BE THE
PRIMARY KEY.

QUERY:

CREATE TABLE STUDENT


(STUID NUMBER(4) CONSTRAINT PK_STUID PRIMARY KEY,
SNAME VARCHAR2(20),
SUBJCODE NUMBER(2),
MARKS NUMBER(3));
OUTPUT:

CREATE A TABLE SUBJECTS IN WHICH SUBJCODE SHOULD BE THE


PRIMARY KEY.

QUERY:

CREATE TABLE SUBJECTS


(SUBJCODE NUMBER(2) CONSTRAINT PK_SUBJCODE
PRIMARY KEY,
SUBJNAME VARCHAR2(20));
OUTPUT:
VERIFICATION OF PRIMARY KEY:
QUERY:
INSERT INTO STUDENT VALUES(101,'ADITYA',10,80);
OUTPUT:

QUERY:
INSERT INTO STUDENT VALUES(101,'ADITYA',10,80);
OUTPUT:

Syntax to define a Primary key at table level:

CREATE TABLE <table_name>

(
<column_name1><datatype>(<size>)[<constraint1>] ,

<column_name2><datatype>(<size>)[<constraint1>]
[<constraint-list>] ,

…. ,

…. ,

[CONSTRAINT constraint_name] PRIMARY KEY


(column_name1,column_name2,..)

);

QUERY:

CREATE TABLE TEMP

(STUID NUMBER(4),

SNAME VARCHAR2(20),

SUBJCODE NUMBER(2),

MARKS NUMBER(3),

CONSTRAINT PK_STUID_SNAME PRIMARY KEY

(STUID,SNAME));
OUTPUT:

VERIFICATION OF PRIMARY KEY:


QUERY:
INSERT INTO TEMP VALUES (1001,'ADITYA',10,90); OUTPUT:

QUERY:
INSERT INTO TEMP VALUES (1001,'ADITYA',10,90); OUTPUT:

NOTE: When the Primary key is not created along with the table
definition, it can be created by using ALTER TABLE command as
shown below.

QUERY:
ALTER TABLE STUDENT

ADD CONSTRAINT PK_STUID PRIMARY KEY (STUID);

OUTPUT:

DROPPING OF UNNECESSRY CONSTRAINTS:


QUERY:
ALTER TABLE STUDENT

DROP CONSTRAINT PK_STUID;

OUTPUT:

Foreign Key Constraint: When a column refers the Primary key of


other table then it is a foreign key. A table can have any number of
foreign keys.

The column on which FOREIGN KEY constraint is applied then


the values in that column must refer to existing values in the other
table. A foreign key column can refer to primary key or unique key
column of other tables. This Primary key and foreign key
relationship is also known as PARENT-CHILD relationship i.e. the
table which has Primary Key is known as PARENT table and the
table which has Foreign key is known as CHILD table. This
relationship is also known as REFERENTIAL INTEGRITY.

Syntax to define a Foreign key at column level:

CREATE TABLE <table_name>

<column_name1><datatype>(<size>),

<column_name2><datatype>(<size>)

[CONSTRAINT <constraint_name> REFERENCES

<table_name>(<column_name>)]

, ……….);

QUERY: (Parent table)

CREATE TABLE AUTHOR

(AUTHORID NUMBER(4) CONSTRAINT PK_AUTHORID

PRIMARY KEY);

OUTPUT:

QUERY: (Child table)


CREATE TABLE CFK_BOOK

(BOOKID NUMBER(4) CONSTRAINT CPK_BOOKID

PRIMARY KEY,

AUTHORID NUMBER(4) CONSTRAINT FK_AUTHORID

REFERENCES AUTHOR(AUTHORID));

OUTPUT:
VERIFICATION OF FOREIGN KEY:
QUERY:
INSERT INTO CFK_BOOK
VALUES(10,9001);
OUTPUT:

QUERY:
INSERT INTO CFK_BOOK
VALUES(30,9002);
OUTPUT:

NOTE: When the Foreign key is not created along with the table
definition, it can be created by using ALTER TABLE command as
shown below.

QUERY:
ALTER TABLE CFK_BOOK

MODIFY AUTHORID CONSTRAINT FK_AUTHORID

REFERENCES AUTHOR(AUTHORID);

OUTPUT:

Syntax to define a Foreign key at Table level:

CREATE TABLE <table_name>


(
<column_name1><datatype>(<size>),
<column_name2><datatype>(<size>),
…. ,
…. ,
[CONSTRAINT <constraint_name> FOREIGN KEY
(<column_name1>,<column_name2>,…) REFERENCES
<table_name>(<column_name1>,<column_name2>,..)] ,
……….);
QUERY:

CREATE TABLE INVOICE

(INVNO NUMBER(4), INVDT DATE,

CONSTRAINT PK_INVNO_INVDT PRIMARY KEY

(INVNO,INVDT));

OUTPUT:

QUERY:
CREATE TABLE SALES
(CUSTNO NUMBER(4) CONSTRAINT PK_CUSTNO PRIMARY
KEY, INVNO NUMBER(4), INVDT DATE,
CONSTRAINT FK_INVNO_INVDT FOREIGN KEY(INVNO,INVDT)
REFERENCES INVOICE(INVNO,INVDT));
OUTPUT:

VERIFICATION:
QUERY:
INSERT INTO INVOICE
VALUES(1001,'17-OCT-15');
OUTPUT:

QUERY:
INSERT INTO SALES
VALUES(2001,1001,'17-OCT-15');
OUTPUT:

QUERY:

INSERT INTO SALES


VALUES(2002,1002,'17-OCT-15');
OUTPUT:
Unique Constraint: Any unique column will not allow duplicate values
to be present in it. However there can be two or more than two NULL
in the unique column (because Null is not equal to Null).

Unique Key constraint is same as primary key i.e. it does not


accept duplicate values, except the following differences:

 There can be only on Primary key per table. Whereas, you can
have as many Unique Keys per table as you want.

 Primary key does not accept NULL values whereas, unique key
columns can be left blank.

Not Null Constraint: By default all columns in a table can contain null
values. To ensure that a column must always have a value, i.e. it
should not be left blank, then define a NOT NULL constraint on it.
These types of constraints are defined on a single column. By default,
Oracle allows NULL values in any column. A NOT NULL constraint is
defined at the column level; it cannot be defined at the table level.

Check Constraint: It is a column level constraint and allows the


column value to satisfy the condition specified in the constraint. It is
possible to define as many check constraints on a single column as
required.
Implementing Primary key, Unique, Check and Not null constraints by
using the following CUSTOMER TABLE SCHEMA details:

QUERY:

CREATE TABLE CUSTOMER

(customerid varchar2(6) constraint pk_customer_pk primary

key constraint customer_cid check (customerid like 'C%'),

customername varchar2(30) constraint

customer_customer_nnull not null, dateofreg date,

userid varchar2(15) constraint customer_userid_uq unique,

password varchar2(15) constraint customer_passwd not

null);

OUTPUT:

NOTE: VERIFY THE RESULT AS SHOWN EARLIER.


JOINS
In relational databases, data is spread over multiple tables.
Sometimes we may want data from two or more tables. A join is an
operation which combines results from two or more tables.

Joins are of different types, and they are

• Cartesian Join

• Inner Join or Equi Join

• Outer Join

• Left-outer Join

• Right-outer Join

• Self Join

CARTESIAN JOIN:

SYNTAX:

SELECT * FROM TABLE1, TABLE2;

In this every row of table1 will be mapped with all rows of

table2.

QUERY:

SELECT * FROM SUBJECTS, DEPT;

OUTPUT:
INNER JOIN OR EQUI JOIN

The most common operator used to relate two tables is the


equality operator (=). In such case the inner join is also referred as
equi join.

1. Display the employee number, employee name and department


name of the employees who are working for some department.

QUERY:

SELECT EMPNO, ENAME, DNAME

FROM EMP E, DEPT D

WHERE E.DEPTNO = D.DEPTNO;

OUTPUT:
SELF JOIN:

To join a table with itself based on some criteria is referred as


Self Join by using the concept of synonyms. Treat the table as two
different tables by giving synonyms as shown below.

2. TO LIST ALL THE EMPLOYEE NAMES ALONG WITH THEIR


MANAGER’S NAME.

QUERY:

SELECT EMP.EMPNO, EMP.ENAME "EMPLYEE NAME",


EMP.MGR, MANAGER.ENAME "MANAGER NAME"
FROM EMP EMP, EMP MANAGER
WHERE EMP.MGR=MANAGER.EMPNO;
OUTPUT:
OUTER JOIN:

An Outer join retrieves all rows that match the WHERE clause
and also those that have a NULL value in the column used for join.

Assume that TABLE1 and TABLE2 are already created with the
following data.

TABLE1 TABLE2

LEFT OUTER JOIN:

Left outer join includes all records from the first (left) of two
tables. Mathematically it is represented as A = B (+). The symbol + is
to indicate include null values also.

3. List all cities of Table1 if there is match in cities in Table2 &


also unmatched cities from Table1
QUERY:

SELECT TABLE1.EMPID, TABLE1.CITY, TABLE2.CUSTID,


TABLE2.CITY
FROM TABLE1, TABLE2
WHERE TABLE1.CITY = TABLE2.CITY (+);
OUTPUT:
RIGHT OUTER JOIN:

Right outer join includes all records from the second (right) of
two tables. Mathematically it is represented as A (+) = B. The symbol
+ is to indicate include null values also.

4. List all cities of Table2 if there is match in cities in Table1 &


also unmatched cities from Table2
QUERY:

SELECT TABLE1.EMPID, TABLE1.CITY, TABLE2.CUSTID,


TABLE2.CITY
FROM TABLE1, TABLE2
WHERE TABLE1.CITY (+) = TABLE2.CITY;
OUTPUT:

QUERY: WITHOUT (+) SYMBOL IT CAN BE AN INNER JOIN

SELECT TABLE1.EMPID, TABLE1.CITY, TABLE2.CUSTID,


TABLE2.CITY
FROM TABLE1, TABLE2
WHERE TABLE1.CITY = TABLE2.CITY;
OUTPUT:
PL/SQL PROGRAMS

1. Write a Program to calculate Simple Interest.


SET SERVEROUTPUT ON;

DECLARE

P NUMBER(5);

T NUMBER(5);

R NUMBER(5);

SI NUMBER(5);

BEGIN

P:=&P;

T:=&T;

R:=&R;

SI:=(P*T*R)/100;

DBMS_OUTPUT.PUT_LINE('RESULT='||SI);

END;

OUTPUT:

Enter value for P=100


old 7: P:=&P;
new 7: P:=100;
Enter value for T=2
old 8: T:=&T;
new 8: T:=2;
Enter value for R=10
old 9: R:=&R;
new 9: R:=10;
RESULT=20

PL/SQL procedure successfully completed.


2. WRITE PROGRAM TO FIND GREATEST OF THREE NUMBERS

DECLARE

A NUMBER:=40;

B NUMBER:=12;

C NUMBER:=13;

BEGIN

IF(A>B AND A>C) THEN

DBMS_OUTPUT.PUT_LINE('GREATEST='||A);

END IF;

IF(B>A AND B>C) THEN

DBMS_OUTPUT.PUT_LINE('RESULT='||B);

END IF;

IF(C>A AND C>B) THEN

DBMS_OUTPUT.PUT_LINE('GREATEST='||C);

END IF;

END;

Output:

GREATEST=40
PL/SQL procedure successfully completed.
3. WRITE A PROGRAM TO FIND FACTORIAL OF A NUMBER

DECLARE

N NUMBER;

I NUMBER;

P NUMBER:=1;

BEGIN

N:=&N;

FOR I IN 1..N LOOP

P:=P*I;

END LOOP;

DBMS_OUTPUT.PUT_LINE('FACTORIAL '||N||'='||P);

END;

Output:
Enter value for N=5
old 6: N:=&N;
new 6: N:=5;
FACTORIAL 5=120

PL/SQL procedure successfully completed.


4. WRITE A PROGRAM TO CHECK WHETHER THE GIVEN NUMBER IS
ARMSTRONG NUMBER OR NOT

DECLARE

X NUMBER;

Y NUMBER;

R NUMBER;

TEMP NUMBER:=0;

BEGIN

X:=&X;

Y:=X;

WHILE(X<>0) LOOP

R:=MOD(X,10);

TEMP:=TEMP+R**3;

X:= TRUNC(X/10);

END LOOP;

IF(TEMP=Y) THEN

DBMS_OUTPUT.PUT_LINE('ARMSTRONG NUMBER');

ELSE

DBMS_OUTPUT.PUT_LINE('NOT AN ARMSTRONG NUMBER');

END IF;

END;

OUTPUT:
Enter value for X=153
old 7: X:=&X;
new 7: X:=153;

ARMSTRONG NUMBER

PL/SQL procedure successfully completed.


5. WRITE A PROGRAM TO CALCULATE SUM OF DIGITS OF A GIVEN
NUMBER

DECLARE

X NUMBER;

R NUMBER;

TEMP NUMBER:=0;

BEGIN

X:=&X;

WHILE(X<>0) LOOP

R:=MOD(X,10);

TEMP:=TEMP+R;

X:=TRUNC(X/10);

END LOOP;
DBMS_OUTPUT.PUT_LINE('SUM OF DIGITS OF A GIVEN NUMBER = '||TEMP);

END;

OUTPUT:
Enter value for X=123
old 6: X:=&X;
new 6: X:=123;
SUM OF DIGITS OF A GIVEN NUMER = 6

PL/SQL procedure successfully completed.


6. WRITE A PROGRAM TO DISPLAY REVERSE OF A GIVEN NUMBER

DECLARE

N NUMBER(10,0);

REV NUMBER(10,0);

REM NUMBER(10,0);

BEGIN

N:=&N;

REV:=0;

WHILE(N>0)LOOP

REM:=(MOD(N,10));

REV:=(REV*10)+REM;

N:=TRUNC(N/10,0);

END LOOP;

DBMS_OUTPUT.PUT_LINE('REVERESE OF A NUM = '||REV);

END;

OUTPUT:
Enter value for N=123
old 6: N:=&N;
new 6: N:=123;

REVERESE OF A NUM = 321

PL/SQL procedure successfully completed.


7. WRITE A PROGRAM TO CHECK WHETHER GIVEN NUM IS PALINDRONE
OR NOT
DECLARE
N NUMBER(10,0);
REV NUMBER(10,0);
REM NUMBER(10,0);
GIVEN NUMBER(10,0);
BEGIN

N:=&N;

GIVEN:=N;

REV:=0;

WHILE(N>0)LOOP

REM:=(MOD(N,10));

REV:=(REV*10)+REM;

N:=TRUNC(N/10,0);

END LOOP;

IF(REV=GIVEN) THEN

DBMS_OUTPUT.PUT_LINE('THIS IS PALINDROME');

ELSE

DBMS_OUTPUT.PUT_LINE('THIS IS NOT A PALINDROME');

END IF;

END;
/
OUTPUT:
Enter value for N=121
old 7: N:=&N;
new 7: N:=153;

THIS IS PALINDROME

PL/SQL procedure successfully completed.


Enter value for N=123
old 7: N:=&N;
new 7: N:=123;

THIS IS NOT A PALINDROME


PL/SQL procedure successfully completed.
8. WRITE A PROGRAM TO PRINT FEBONACCI SERIES
DECLARE
X NUMBER;
A NUMBER:=0;
B NUMBER:=1;
N NUMBER;
I NUMBER;
BEGIN

DBMS_OUTPUT.PUT_LINE(‘ENTER THE POSITION UPTO WHICH

SERIES IS TO BE GENERATED’);

N:=&N;

DBMS_OUTPUT.PUT_LINE( A||'');

DBMS_OUTPUT.PUT_LINE(B||'');

FOR I IN 3..N LOOP

X:=A+B;

DBMS_OUTPUT.PUT_LINE(X);

A:=B;

B:=X;

END LOOP;

END;
/
OUTPUT:
ENTER THE POSITION UPTO WHICH SERIES IS TO BE GENERATED
Enter the value for N=10
old 9: N:=&N;
new 9: N:=10;

0
1
1
2
3
5
8
13
21
34
PL/SQL procedure successfully completed.
9. WRITE A PROGRAM TO PRINT THE GIVEN NUMBER IS PRIME NUM
OR NOT

DECLARE
N NUMBER:=0;
FLAG NUMBER:=0;
TEMP NUMBER:=0;
BEGIN

N:=&N;

FOR I IN 2..(N-1) LOOP

TEMP:=(MOD(N,I));

IF(MOD(N,I)=0) THEN

FLAG:=1;

END IF;

END LOOP;

IF(FLAG=1) THEN

DBMS_OUTPUT.PUT_LINE('NOT A PRIME');

ELSE

DBMS_OUTPUT.PUT_LINE('PRIME');

END IF;

END;

OUTPUT:
Enter value for N=7
old 6: N:=&N;
new 6: N:=7;
PRIME
PL/SQL procedure successfully completed.

Enter value for N=4


old 6: N:=&N;
new 6: N:=4;
NOT A PRIME
PL/SQL procedure successfully completed.
CURSORS
1. Write a PL/SQL Program to display data
[EMPNO,ENAME,DEPTNO,SAL] from EMP table by using cursor

SET SERVEROUTPUT ON;

DECLARE

CURSOR C IS SELECT EMPNO,ENAME,DEPTNO,SAL FROM EMP;

I EMP.EMPNO%TYPE;

J EMP.ENAME%TYPE;

K EMP.DEPTNO%TYPE;

L EMP.SAL%TYPE;

BEGIN

OPEN C;

DBMS_OUTPUT.PUT_LINE('EMPNO,NAME,DEPTNO,SALARY OF
EMPLOYEES ARE:=');

LOOP

FETCH C INTO I,J,K,L;

EXIT WHEN C% NOTFOUND;

DBMS_OUTPUT.PUT_LINE(I||' '||J||' '||K||' '||L);

END LOOP;
CLOSE C;
END;
/
OUTPUT :-

PL/SQL procedure successfully completed.


2. Write the PL/SQL program to extract the given data of the
empno whose no. is 7521

SET SERVEROUTPUT ON;

DECLARE

CURSOR C IS SELECT EMPNO,ENAME,DEPTNO,SAL FROM

EMP WHERE EMPNO=7521;

I EMP.EMPNO%TYPE;

J EMP.ENAME%TYPE;

K EMP.DEPTNO%TYPE;

L EMP.SAL%TYPE;

BEGIN

OPEN C;

DBMS_OUTPUT.PUT_LINE('EMPNO,NAME,DEPTNO,SALARY OF

EMPLOYES ARE:=');

LOOP

FETCH C INTO I,J,K,L;

EXIT WHEN C% NOTFOUND;

DBMS_OUTPUT.PUT_LINE(I||' '||J||' '||K||' '||L);

END LOOP;

CLOSE C;

END;

OUTPUT :-

PL/SQL procedure successfully completed.


3. Write the PL/SQL program to extract the given data of the
empno. whose no. is 7900

SET SERVEROUTPUT ON;

DECLARE

CURSOR C IS SELECT MGR,HIREDATE,COMM FROM EMP


WHERE EMPNO=7900;

A EMP.MGR%TYPE;

B EMP.HIREDATE%TYPE;

D EMP.COMM%TYPE;

BEGIN

OPEN C;

DBMS_OUTPUT.PUT_LINE('MGR,HIREDATE,COMM OF
EMPLOYEES ARE:=');

LOOP

FETCH C INTO A,B,D;

EXIT WHEN C% NOTFOUND;

DBMS_OUTPUT.PUT_LINE(A||' '||B||' '||D);

END LOOP;

CLOSE C;

END;

OUTPUT :-

PL/SQL procedure successfully completed.


4. Write a PL/SQL program to extract the data from EMP
table whose deptno=20

SET SERVEROUTPUT ON;

DECLARE

CURSOR C IS SELECT ENAME FROM EMP WHERE DEPTNO=20;

A EMP.ENAME%TYPE;

BEGIN

OPEN C;

DBMS_OUTPUT.PUT_LINE('ENAME OF EMPLOYEES ARE WHO ARE IN

DEPTNO 20 :=');

LOOP

FETCH C INTO A;

EXIT WHEN C% NOTFOUND;

DBMS_OUTPUT.PUT_LINE(A);

END LOOP;

CLOSE C;

END;

OUTPUT :-

PL/SQL procedure successfully completed.


5. Write a PL/SQL program to extract the given data from
the EMP table whose comm. Is greater than 200

SET SERVEROUTPUT ON;

DECLARE

CURSOR C IS SELECT ENAME,COMM FROM EMP WHERE

COMM>200;

A EMP.ENAME%TYPE;

B EMP.COMM%TYPE;

BEGIN

OPEN C;

DBMS_OUTPUT.PUT_LINE('ENAME OF EMPLOYEES WHOSE

COMMISSION IS ABOVE 200 =');

LOOP

FETCH C INTO A,B;

EXIT WHEN C% NOTFOUND;

DBMS_OUTPUT.PUT_LINE('NAME = '||A||' COMMISSION =

'||B);

END LOOP;

CLOSE C;

END;

OUTPUT :-

PL/SQL procedure successfully completed.


STORED PROCEDURES
SYNTAX:

CREATE OR REPLACE PROCEDURE <procedure name>


( [ <parameter declaration> [ { , <parameter declaration>
}... ]])
IS
BEGIN
SQL STATEMENTS;
END;
QUERY: Procedure creation

CREATE or REPLACE PROCEDURE run_ceil


(x number)
IS
BEGIN
dbms_output.put_line(ceil(x));
END
OUTPUT:

QUERY: Calling the procedure in pl/sql block

DECLARE

N NUMBER(4);

BEGIN

N:=&N;

RUN_CEIL(N);

END;

OUTPUT:
Enter value for N=12.3
old 4: N:=&N;
new 4: N:=12.3;
12

PL/SQL procedure successfully completed.


TRIGGERS
A database trigger is a compiled stored program unit. Its main

advantage is to automatically generate derived column values, prevent

invalid transactions, provide auditing and event logging and record

information about table access.

Triggers are schema objects that are similar to subprograms which

are explicitly run by a user, application, or trigger. Triggers are implicitly

invoked by the database when a triggering event occurs.

SYNTAX:

CREATE OR REPLACE TRIGGER trigger_name

triggering_statement

[trigger_restriction]

BEGIN

triggered_action;

END;
1. WRITE A TRIGGER ON DEPT TABLE WHICH SHOULD BE EXECUTED

IMPLICITLY WHEN ANY ROW IS INSERTED INTO THE TABLE.

QUERY:

CREATE OR REPLACE TRIGGER trigger1_dept

AFTER INSERT ON DEPT

FOR EACH ROW

BEGIN

IF(INSERTING)

THEN

DBMS_OUTPUT.PUT_LINE('I HAVE INSERTED ONE ROW');

END IF;

END;

OUTPUT:

VERIFICATION OF TRIGGER:

QUERY:

INSERT INTO DEPT

VALUES(99,'CSE&IT','SURAMPALEM');

OUTPUT:
2. WRITE A TRIGGER ON DEPT TABLE WHICH SHOULD BE EXECUTED

IMPLICITLY WHEN ANY ROW IS INSERTED, DELETED AND

UPDATED INTO THE TABLE.

QUERY:

CREATE OR REPLACE TRIGGER trigger2_dept

AFTER INSERT OR UPDATE OR DELETE ON DEPT

FOR EACH ROW

BEGIN

IF(INSERTING)

THEN

DBMS_OUTPUT.PUT_LINE('I HAVE INSERTED ONE ROW');

END IF;

IF(DELETING)

THEN

DBMS_OUTPUT.PUT_LINE('I HAVE DELETED ONE ROW');

END IF;

IF(UPDATING)

THEN

DBMS_OUTPUT.PUT_LINE('I HAVE UPDATED ONE ROW');

END IF;

END;

OUTPUT:
VERIFICATION OF TRIGGER:

QUERY:

INSERT INTO DEPT

VALUES(99,'CSE&IT','SURAMPALEM');

OUTPUT:

QUERY:

DELETE FROM DEPT

WHERE DEPTNO=99;

OUTPUT:

QUERY:

UPDATE DEPT

SET LOC='SURAMPALEM'

WHERE LOC='ADITYA';

OUTPUT:

You might also like