Professional Documents
Culture Documents
Oracle Database is the first database designed for enterprise grid computing, the
most flexible and cost effective way to manage information and applications.
Enterprise grid computing creates large pools of industry-standard, modular
storage and servers. With this architecture, each new system can be rapidly
provisioned from the pool of components. There is no need for peak workloads,
because capacity can be easily added or reallocated from the resource pools as
needed.
The database has logical structures and physical structures. Because the physical
and logical structures are separate, the physical storage of data can be managed
without affecting the access to logical storage structures
1
History of Oracle
The different products related to oracle are developed during different years.
These years are:-
1982: RSI in its turn changed its name, becoming known as "Oracle
Corporation",[41] to align itself more closely with its flagship product.
1983: The company released Oracle version 3, which it had re-written using
the C programming language and which supported
COMMIT and ROLLBACK functionality for transactions. Version 3 extended
platform support from the existing Digital VAX/VMS systems to
include Unix environments.[41]
1988: Oracle RDBMS version 6 came out with support for PL/SQL embedded
within Oracle Forms v3 (version 6 could not store PL/SQL in the database
proper), row-level locking and hot backups.[42]
2
1989: Oracle Corporation entered the application products market and
developed its ERP product, (later to become part of the Oracle E-Business
Suite), based on the Oracle relational database.
1992: Oracle version 7 appeared with support for referential integrity, stored
procedures and triggers.
2001: Oracle9i went into release with 400 new features, including the ability to
read and write XML documents. 9i also provided an option for Oracle RAC, or
"Real Application Clusters", a computer-cluster database, as a replacement for
the Oracle Parallel Server(OPS) option.
2007: Oracle Database 10g release 2 sets a new world record TPC-H 3000
GB benchmark result[44]
2007: Oracle Corporation released Oracle Database 11g for Linux and
for Microsoft Windows.
3
2008: Oracle Corporation acquires BEA Systems.
Versions of Oracle
Oracle products follow a custom release numbering and naming convention. With
the Oracle RDBMS 10g release, Oracle Corporation began using the "10g" label in
all versions of its major products, although some sources refer to Oracle
Applications Release 11i as Oracle 11i. The suffixes "i" and "g" do not actually
represent a low-order part of the version number, as letters typically represent in
software industry version numbering; that is, there is no predecessor version of
Oracle 10g called Oracle 10f.
Since version 5, Oracle's RDBMS release numbering has used the following codes:
Oracle v5
Oracle v6
4
Oracle7: 7.0.167.3.4
5
Oracle Server Features
This chapter provides an overview of some of the features of the Oracle server. The
topics include:
6
Oracle Database Features
Concurrency
Read Consistency
Locking Mechanisms
Quiesce Database
7
Real Application Clusters
Portability
Concurrency
One way to manage data concurrency is to make each user wait for a turn. The goal
of a database management system is to reduce that wait so it is either nonexistent
or negligible to each user. All data manipulation language statements should
proceed with as little interference as possible, and destructive interactions between
concurrent transactions must be prevented. Destructive interaction is any
interaction that incorrectly updates data or incorrectly alters underlying data
structures. Neither performance nor data integrity can be sacrificed.
Read Consistency
Guarantees that the set of data seen by a statement is consistent with respect
to a single point in time and does not change during statement execution
(statement-level read consistency)
Ensures that readers of database data do not wait for writers or other readers
of the same data
Ensures that writers of database data do not wait for readers of the same data
Ensures that writers only wait for other writers if they attempt to update
identical rows in concurrent transactions
8
Locking Mechanisms
Oracle also uses locks to control concurrent access to data. When updating
information, the data server holds that information with a lock until the
update is submitted or committed. Until that happens, no one else can
make changes to the locked information. This ensures the data integrity of
the system.
Oracle provides unique non-escalating row-level locking. Unlike other data servers
that escalate locks to cover entire groups of rows or even the entire table,
Oracle always locks only the row of information being updated. Because Oracle
includes the locking information with the actual rows themselves, Oracle can lock
an unlimited number of rows so users can work concurrently without unnecessary
delays.There are two types of locking:-
Automatic Locking
Manual Locking
9
The interaction between a lamp and an electrical socket can be considered as a
interaction between client and server is just like. In the example the electrical
socket is just like a server and the lamp works like a client.
Table Creation
11
6 Manjeet 27000 50 admin - 2000
7 Abhinav 15000 60 manager - 2000
ENAME
Aman
Simran
Karampreet
Manjot
Gurpreet
Gurnoor
ENAME SALARY
Simran 55000
abhinav 45000
ENAME SALARY
12
Simran 55000
ENAME SALARY
Simran 55000
ROLLNO NAME
1 Meenakshi
2 Sandeep
6 Rimal
7 Ranju
ROLLNO NAME
1 Meenakshi
13
5 Rajneet
7 Ranju
STATUS NAME
F Rajneet
P Ranju
ENAME SALARY
Simran 55000
STATUS NAME
30 Rajneet
23 Sarabjit
20 Ikjot
11 Palak
14
11: WRITE A QUERY TO UPDATE THE SALARY OF SALESMAN OF
DEPARTMENT NUMBER 10 TO 12,000?
UPDATE EMP SET SALARY=12000 WHERE DEPT_NO=10 AND DESG='SALESMAN';
RNO MARKS
10 15
16
2 simran 50000 20 manager 1000 1500
9 Abhinav 50000 60 Manager - 2000
STATUS RNO
Absent 5
17
CREATING TABLE AND INSERTING DATA
1: STUDENT TABLE
CREATE TABLE STUDENT(RNO NUMBER(10),NAME VARCHAR(20),ENGLISH
NUMBER(7),C NUMBER(10),CSM NUMBER(10));
18
2: EMPLOYEE TABLE
CREATE EMP(DEPTNO NUMBER(20),NAME VARCHAR(20),SALARY
NUMBER(10),DESG VARCHAR(20));
19
IMPLEMENTING DML STATEMENTS
20
RNO NAME
2 SIMRAN
3 RAJ
4 RIMAL
6 MANJOT
CSM
44
44
49
86
88
88
NAME RNO
SANDEEP 5
21
6: WRITE A QUERY TO DISPLAY THE DETAILS OF ALL
EMPLOYEES OF DEPARTMENT NO 10 AND 20?
BONUS
750
1250
600
500
850
400
22
550
1350
750
23
9: WRITE A QUERY TO DISPLAY THE NAME OF MANAGER OF
DEPARTMENT NO 20 WHOSE SLARY IS GREATER THAN
50,000?
SELECT ENAME,SALARY FROM EMP WHERE DEPTNO=20 AND DESG='MANAGER' AND
SALARY>50000;
ENAME SALARY
ABHINAV 55000
24
8 Manjeet 27000 50 admin - 2000
9 Abhinav 15000 60 manager - 2000
RNO NAME
1 ROHIT
4 RAJ
7 SANDEEP
25
14: WRITE A QUERY TO DISPLAY THE NAME AND ROLLNO OF
ALL STUDENT WHOSE MARKS ARE LESS THAN 40?
SELECT RNO,NAME FROM STUDENT WHERE ENGLISH+C+CSM<40
RNO NAME
4 RAJ
27
5 PRABLEEN B.COM 19-FEB-93 2879636976
DESC STUDENT;
28
16: CREATE A BIRTHDAY TABLE HAVING COLUMNS
NAME(VARCHAR2),DOB(DATE),ENAME (VARCHAR2),
PLACE(VARCHAR2),SEX(VARCHAR2)?
30
QUES 19: EXECUTE THE FOLLOWING QUERIES ON EMP TABLE
LIST THE NUMBER OF MONTHS BETWEEN THE SYSTEM'S DATE AND THE
DATE OF JOINING OF THE EMPLOYEE.
LIST ALL THE EMPLOYEE WHO ARE NOT WORKING IN ANY DEPARTMENT.
LIST ALL THE EMPLOYEE WHO HAVE TWO L'S IN THEIR NAME.
32
LIST THE HIREDATE AND EMPLOYEE'S REVIEW DATE IF REVIEW DATE IS
FIRST MONDAY AFTER THREE MONTHS OF SERVICE.
LIST THE MGR AND THE SALARY OF THE LOWEST PAID EMPLOYEE FOR
THAT MANAGER.EXCLUDE ANYONE WHOSE MANAGER IS NOT
KNOWN.
ENAME SALARY
Simran 25000
Manjeet 27000
33
5 gurpreet 17000 40 Clerk 500 1000
7 hardeep 11000 30 salesman 200 500
8 manjeet 27000 50 Admin - 2000
9 abhinav 15000 60 Manager - 2000
D. SELECT ENAME FROM EMP WHERE ENAME LIKE 'A%' OR ENAME LIKE '%N';
ENAME
Aman
Simran
Abhinav
ENAME
Aman
Simran
Gurpreet
Gurnoor
Abhinav
ENAME
Aman
34
Simran
Karampreet
Manjot
Gurpreet
Gurnoor
Hardeep
Manjeet
Abhinav
ENAME COMM
Manjeet -
Abhinav -
ENAME
Aman
Simran
Karampreet
Manjot
35
Gurpreet
Gurnoor
Hardeep
Manjeet
Abhinav
ENAME SUBSTR(ENAME,-1,3)
Aman man
Simran ran
karampreet Eet
Manjot Jot
Gurpreet Eet
Gurnoor Oor
Hardeep Eep
Manjeet Eet
Abhinav Nav
36
5 name is Gurpreet
6 name is Gurnoor
7 name is Hardeep
8 name is Manjeet
9 name is Abhinav
HIREDATE TO_DATE(DD/MM/YYYY)
09-JUN-81 19/06/1981
17-NOV-87 17/11/1987
09-OCT-78 09/10/1978
11-JAN-76 11/01/1976
19-SEP-92 19/09/1992
03-OCT-84 03/10/1984
08-MAR-88 08/03/1988
24-MAY-82 24/05/1982
31-AUG-76 31/08/1976
ENAME MONTHS_BETWEEN(SYSDATE,HIREDATE)
Aman 289.78934
Simran 288.98456
karampreet 217.35465
Manjot 282.91353
37
Gurpreet 281.92783
Gurnoor 278.73236
Hardeep 281.73876
Manjeet 278.68245
Abhinav 288.77567
TO_CHAR(SYSDATE,HH:MI:SS)
06:05:09
SYSDATE+7
7-FEB-14
ENAME HIREDATE
Aman 09-JUN-81
Simran 17-NOV-87
karampreet 09-OCT-78
Manjot 11-JAN-76
Gurpreet 19-SEP-92
38
Gurnoor 03-OCT-84
Hardeep 08-MAR-88
Manjeet 24-MAY-82
Abhinav 31-AUG-76
P. SELECTENAME,DESG,DECODE(DESG,'CLERK','C','MANAGER','M',SALESMAN,
S,OTHERS) FROM EMP;
SUM(SAL) SUM(COMM)
140000 2800
DESG COUNT(DESG)
CLERK 3
MANAGER 2
SALESMAN 3
ADMIN 1
DNO ENAME
30 MANJOT
30 KAMALPREET
30 GURNOOR
30 ABHINAV
W. SELECT ENAME FROM EMP WHERE HIREDATE LIKE '%81' GROUP BY DEPTNO;
ENAME
Aman
Kamalpreet
ENAME
Simran
41
Gurnoor
ENAME
Aman
Gurpreet
Gurnoor
ENAME
Aman
Gurpreet
Manjeet
ENAME
Hardeep
NO DATA FOUND
42
CC. SELECT ENAME,TO_DATE('HIREDATE','Ddspth "OF" MONTH YYYY') FROM EMP;
ENAME EXPRESSION
Aman 09-JUN-81
Karampreet 09-OCT-78
Manjeet 24-MAY-82
MGR MIN(SAL)
20 8000
43
30 12000
44
20:CONSIDER A SUPPLIER_PARTS DATABASE.CREATE THREE
TABLES HAVING COLUMNS AS GIVEN:
INSERT INTO
PARTS(PID,PNAME,COLOR,WEIGHT,CITY)VALUES(12,AASHISH,BLUE,22,AMRITSAR
);
INSERT INTO
PARTS(PID,PNAME,COLOR,WEIGHT,CITY)VALUES(13,RIMALJEET,GREEN,16,
JALANDHAR);
INSERT INTO PARTS(PID,PNAME,COLOR,WEIGHT,CITY)VALUES(14,ABHI,PINK,15,CHANDIGARH);INSERT
INTO PARTS(PID,PNAME,COLOR,WEIGHT,CITY)VALUES(15,SANDEEP,BLACK,11,AMBALA);
QUANTITY
40
SELECT * FROM PARTS WHERE COLOR=RED;
QUANTITY
40
48
30
20
10
50
SUM(QUANTITY)
30
50
GROUP and HAVING CLAUSE
4.To find total salary paid to each job title within each dept
Select deptno,SUM(sal) from emp GROUP BY deptno;
5.to count the number of employees under each job title with
each dept
Select deptno,COUNT(eno) from emp GROUP BY deptno;
51
JOIN
52
3. SELECT ENAME, DEPT, DNAME FROM EMP AND DEPT TABLE
USING CARTESIAN JOIN.
SELECT ENAME, EMP.DEPT, DNAME FROM EMP,DEPT ORDER BY ENAME;
53
SELF-JOIN
WHERE E1.DNO=E2.DNO;
E1.DNAME||'DEPARTMENTIN'||E2.LOC
SCIENCE DEPARTMENT IN MODEL TOWN
COMPUTER DEPARTMENT IN DHOLEWAL
COMMERCE DEPARTMENT IN MILAR GANJ
ENGLISG DEPARTMENT IN ARTI CHOWK
PUNJABI DEPARTMENT IN PREET PLC
54
SET OPERATOR
6. SELECT ENO,ENAME FROM EMP TABLE WHERE EITHER DEPT=10 OR
DEPT=30.
SELECT ENO,ENAME FROM EMP WHERE DEPT=10
UNION
SELECT ENO,ENAME FROM EMP WHERE DEPT=30;
ENO ENAME
1 AMAN
3 KARAMPREET
4 MANJOT
6 GURNOOR
7 HARDEEP
MINUS
SELECT ENO,ENAME FROM EMP WHERE DEPT=40;
ENO ENAME
1 AMAN
6 GURNOOR
55
8. SHOW THE NAMES OF EMPLOYEES WHOSE NAME START
WITH A, J OR S USING INTERSECT OPERATOR.
INTERSECT
ENO ENAME
1 AMAN
9 ABHINAV
56
SUB QUERIES
57
11. LIST ALL EMPLOYEES WHICH IS SAME AS THOSE OF
EMPLOYEES WHOSE NAME END WITH N.
ENO ENAME
1 AMAN
2 SIMRAN
ENAME SALARY
AMAN 15000
GURNOOR 8000
ENAME SALARY
MANJEET 27000
58
14. LIST ENO,ENAME,SALARY(INCL. COMM) AND DNAME OF ALL
EMPLOYEES.
SELECT ENO,ENAME,SALARY,SALARY+COMM,DNAME FROM EMP,DEPT WHERE EMP.DEPT=DEPT.DPTNO;
ENAME
MANJEET
59
ENAME SALARY DESG
AMAN 15000 CLERK
4. CREATE SEQUENCE
CREATE SEQUENCE EMP_DEPT
INCREMENT BY 1
START WITH 1
MAXVALUE 50;
5. INSERTION IN SEQUENCES
6. ALTER SEQUENCE
INCREMENT BY 2
MAXVALUE 100;
61
7.DROP SEQUENCE
PL/SQL
1: WRITE A PROGRAM TO DISPLAY A MESSAGE 'WELCOME TO PL/SQL'.
SOLUTION:
begin
dbms_output.put_line('WELCOME TO PL/SQL');
end;
--OUTPUT--
WELCOME TO PL/SQL
Statement processed.
62
0.00 seconds
SQL> declare
num number;
begin
num := :num;
else
end if;
end;
--OUTPUT--
num := 4
number 4 is positive
63
Statement processed.
0.00 seconds
SQL>declare
num number;
begin
num := :num;
dbms_output.put_line('number'||num||' is even');
elsif
dbms_output.put_line('number'||num||' is odd');
else
dbms_output.put_line(number is zero);
end if;
end;
--OUTPUT--
num := 63
number63 is odd
64
Statement processed.
0.00 seconds
declare
n number := :n;
begin
if n=1 then
dbms_output.put_line('Day is sunday');
dbms_output.put_line('Day is monday');
dbms_output.put_line('Day is tuesday');
dbms_output.put_line('Day is wednesday');
dbms_output.put_line('Day is thursday');
dbms_output.put_line('Day is friday');
65
dbms_output.put_line('Day is saturday');
else
dbms_output.put_line('invalid input');
end if;
end;
--OUTPUT--
n := 6
Day is friday
Statement processed.
0.00 seconds
66
5: WRITE A PL/SQL PROGRAM TO PRINT MONTH OF YEAR
ACCORDING TO NUMBERS.
SOLUTION:
declare
n number;
begin
n := :n;
if n=1 then
dbms_output.put_line('month is january');
elsif n =2 then
dbms_output.put_line('month is feburary');
elsif n = 3 then
dbms_output.put_line('month is march');
elsif n =4 then
dbms_output.put_line('month is april');
elsif n = 5 then
dbms_output.put_line('month is may');
elsif n =6 then
dbms_output.put_line('month is june');
elsif n = 7 then
67
dbms_output.put_line('month is july');
elsif n =8 then
dbms_output.put_line('month is august');
elsif n = 9 then
dbms_output.put_line('month is september');
dbms_output.put_line('month is october');
elsif n = 11 then
dbms_output.put_line('month is november');
dbms_output.put_line('month is december');
else
dbms_output.put_line('invalid input');
end if;
end;
--OUTPUT--
n := 6
month is june
Statement processed.
0.02 seconds
68
6:WRITE A PL/SQL PROGRAM TO EVALUATE DIFFERENT
ARITHMETIC EXPRESSIONS.
SOLUTION:
DECLARE
a number := :a;
b number := :b;
c number;
n number:= :n;
BEGIN
IF (n=1) THEN
c:= a+b;
dbms_output.put_line('after addition c= ' || c);
elsif (n=2) THEN
c:= a-b;
dbms_output.put_line('after subtraction c= ' || c);
elsif (n=3) THEN
c:= a*b;
dbms_output.put_line('after mul c= ' || c);
ELSIF (n=4) THEN
c:= a/b;
dbms_output.put_line('after division c= ' || c);
ELSE
dbms_output.put_line(' enter from 1 to 4 ');
END IF;
END;
--OUTPUT
A: 8
B: 4
N: 4
69
after division c= 2
declare
r number;
l number;
b number;
area number;
n number:=:n;
begin
if(n=1) then
r := :r;
area := pi * r * r;
elsif(n=2) then
r := :r;
area := r * r * r;
elsif(n=3) then
70
l:= :l;
b:= :b;
area:= l * b;
elsif(n=4) then
r:= :r;
area:= r ** 2;
elsif(n=5) then
l:= :l;
b:= :b;
area:= 0.5 * l * b;
else
end if;
end;
--OUTPUT--
r := 5
Statement processed.
71
0.00 seconds
DECLARE
a number;
b number;
c number;
BEGIN
a:= :a;
b:= :b;
c:= :c;
IF (a>b AND a>c) THEN
dbms_output.put_line('a is the greatest');
ELSIF (b>a and b>c) THEN
dbms_output.put_line('b is the greatest');
ELSIF (c>a and c>b) THEN
dbms_output.put_line('c is the greatest');
ELSE
dbms_output.put_line('sorry');
END IF;
END;
--OUTPUT--
Enter the value of a: 2
Enter the value of b: 5
Enter the value of c: 1
b is the greatest
Statement processed.
72
9:WRITE A PL/SQL PROGRAM TO CALCULATE SIMPLE
INTEREST.
SOLUTION:
declare
p number:= :p;
r number:= :r;
t number:= :t;
s number:= 0;
begin
s:= p * r * t / 100;
end;
--OUTPUT--
p :=3000
r := 2
t := 10
Statement processed.
0.02 seconds
73
10: WRITE A PL/SQL PROGRAM TO PRINT COUNTING FROM 1
TO 10 USING WHILE LOOP
SOLUTION:
declare
n number := :n;
begin
dbms_output.put_line(n);
n := n+1;
end loop;
end;
--OUTPUT--
n :=1
1
2
3
4
5
6
7
8
9
10
Statement processed.
0.01 seconds
74
11: WRITE A PL/SQL PROGRAM TO PRINT COUNTING FROM 1
TO 10 USING FOR LOOP
SOLUTION:
declare
n number := :n;
begin
dbms_output.put_line(i);
end loop;
end;
--OUTPUT--
N := 10
1
2
3
4
5
6
7
8
9
10
Statement processed.
0.00 seconds
75
12:Write PL/SQL program to print 1 to 10 numbers in reverse
order using for loop
SOLUTION:
DECLARE
n number;
BEGIN
n:= :n;
FOR I IN REVERSE 1 ..n LOOP
Dbms_output.put_line(i);
END LOOP;
Dbms_output.new_line;
END;
--OUTPUT--
10
9
8
7
6
5
4
3
2
1
76
13: WRITE A PL/SQL PROGRAM TO FIND FACTORIAL OF A
NUMBER.
SOLUTION:
DECLARE
n number:= :n;
f number := 1;
BEGIN
f:= f*n;
n:= n-1;
END LOOP;
dbms_output.put_line('factorial is ' || f );
END;
--OUTPUT--
n =5
factorial is 120
Statement processed.
0.00 seconds
77
14: WRITE A PL/SQL TO PRINT THE TABLE OF A NUMBER USING
FOR LOOP
SOLUTION:
DECLARE
n number:= :n;
t number;
BEGIN
t:= n * i;
END LOOP;
END;
--OUTPUT--
n := 9
9*1=9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
9 * 10 = 90
Statement processed.
0.00 seconds
78
15:WRITE A PL/SQL PROGRAM TO FIND THE SUM OF 10 EVEN
NUMBERS.
SOLUTION:
declare
s number:= 0;
n number := :n;
begin
if n mod 2 = 0 then
s := s + n;
end if;
end loop;
dbms_output.put_line(s);
end
--OUTPUT--
N := 20
400
Statement processed.
0.00 seconds
79
16: WRITE A PL/SQL PROGRAM TO PRINT THE ENAME OF
EMPLOYEE FROM EMP TABLE IF THE SAL OF GIVEN EMPNO IS
GREATER THAN 3000.
SOLUTION:
declare
no emp.empno %type;
begin
no := :eno;
Select ename into name from emp where sal > 3000 and empno = eno;
end;
--OUTPUT--
Eno := 7902
name is miller
Statement processed.
0.00 seconds
80
17: WRITE A PL/SQL PROGRAM TO DISPLAY SALARY OF AN
EMPLOYEE WITH SPECIFIC EMPNUMBER FROM EMPLOYEE
TABLE.
SOLUTION:
DECLARE
salary emp.sal%TYPE;
eno emp.empno%TYPE;
BEGIN
Eno:= :empno;
END;
--OUTPUT--
Empno:=7902
Statement processed.
0.00 seconds
81
18: WRITE A PL/SQL PROGRAM TO PRINT THE INFORMATION
OF A PARTICULAR EMPLOYEE FROM EMP TABLE USING
%ROWTYPE.
SOLUTION:
DECLARE
Employee emp%ROWTYPE;
BEGIN
END;
--OUTPUT--
Statement processed.
0.00 seconds
82
19: WRITE A PL/SQL PROGRAM TO INSERT A NEW RECORD IN
EMPLOYEE TABLE.
SOLUTION:
BEGIN
Values
(8101,'sandeep',78950,'manager',30);
Dbms_output.put_line('Data entered');
END;
--OUTPUT
Data entered
1 row(s) inserted.
0.00 seconds
83
20: WRITE A PL/SQL PROGRAM TO INSERT THREE RECORDS
INTO STUDENT TABLE USING WHILE LOOP
SOLUTION:
DECLARE
rollno number := 5;
n number := 1;
BEGIN
rollno := rollno+1;
n:= n+1;
END LOOP;
END;
--OUTPUT--
84
statement processed
1 meenakshi 75 46 68
2 sandeep 92 67 87
3 sarbhjeet 45 36 60
4 ekjot 72 54 69
5 geetika 52 48 75
5 - 42 - -
6 - 52 - -
7 - 62 - -
85
DECLARE
ecode employee.eno%type;
choice number;
BEGIN
dbms_output.put_line('case1 : to selection');
dbms_output.put_line('case1 : to insertion');
dbms_output.put_line('case1 : to deletion');
dbms_output.put_line('case1 : to updation');
choice:= :choice;
ecode:= :ecode;
if (choice=1) THEN
dbms_output.put_line('data selected');
elseif(choice=2) THEN
dbms_output.put_line('data inserted');
elseif(choice=3) THEN
dbms_output.put_line('data deleted');
elseif(choice=4) THEN
86
update employee set salary=salary+500 where eno=ecode;
dbms_output.put_line('data updated');
else
dbms_output.put_line('invalid choice');
END IF;
END;
DECLARE
87
N number :=0;
BEGIN
LOOP
N := n+1;
END LOOP;
END;
--OUTPUT--
DECLARE
Name emp.ename%type;
88
BEGIN
EXCEPTION
END;
--OUTPUT--
Name emp.ename%type;
89
BEGIN
EXCEPTION
Dbms_output(divide by zero);
END;
DECLARE
90
Ecode emp.empno%type;
Name emp.ename%type;
Ename_err exception;
BEGIN
Ecode := :ecode;
Name := :name;
Raise ename_err;
End if;
Dbms_output.put_line('data entered');
EXCEPTION
END;
--OUTPUT--
data entered
1 row(s) inserted.
91
26:WRUTE A PL/SQL PROGRAM TO CREATE A USER DEFINED
EXCEPTION TO CHECK WEATHER AGE IS GREATER THAN 18
OR NOT.
SOLUTION
DECLARE
AGE NUMBER;
92
AGE_ERR EXCEPTION;
BEGIN
AGE:=:AGE;
IF(AGE<18) THEN
RAISE AGE_ERR;
ELSE
END IF;
EXCEPTION
END;
DECLARE
NO_DATA EXCEPTION;
PRAGMA EXCEPTION_INIT(NO_DATA,-1403);
93
BEGIN
EXCEPTION
END;
--OUTPUT
DECLARE
SALARY NUMBER;
94
BEGIN
ELSE
END IF;
END;
Begin
IF SQL%NOTFOUND then
95
dbms_output.put_line('record not found');
ELSE
dbms_output.put_line('record is updated');
END IF;
END;
--OUTPUT--
ENO: 12
Declare
Cursor SAL_CURSOR IS
96
Post Emp.desg%TYPE;
Ecode Emp.Eno%TYPE;
Begin
OPEN sal_cursor;
LOOP
IF POST='MANAGER' THEN
END IF;
END LOOP;
CLOSE sal_cursor;
END;
--OUTPUT--
1 row(s) updated
97
31: Write a PL/SQL program to calculate maximum, minimum
and average salary department wise and display the results?
SOLUTION:
Declare
Cursor INFO_CURSOR IS
Dcode Emp.Dept%TYPE;
Maxsal Emp.salary%TYPE;
Minsal EMP.salary%TYPE;
98
Avgsal Emp.salary%TYPE;
BEGIN
OPEN INFO_cursor;
LOOP
END LOOP;
CLOSE INFO_CURSOR;
END;
--OUTPUT--
99
32: Write a PL/SQL program to print the NAME ALL VOTER WHO
HAS VOTE THIS YEAR using cursor FOR loop?
SOLUTION:
Declare
Cursor VOTE_Cursor IS
BEGIN
FOR V IN VOTE_CURSOR
LOOP
100
END LOOP;
END;
--OUTPUT
Declare
Cursor EMP_DATA IS
ECODE Emp.Eno%TYPE;
Name Emp.Ename%TYPE;
Sal Emp.salary%TYPE;
Begin
OPEN EMP_DATA;
101
LOOP
END LOOP;
CLOSE Emp_data;
END;
Output:-
DEPT: 40
5 gurpreet 17100
Declare
Sal Emp.salary%TYPE;
NAME EMP.ENAME%TYPE;
M number;
N number;
102
Begin
M:= :M;
N:= :N;
Open Emp_cursor(M,N);
LOOP
END LOOP;
CLOSE EMP_CURSOR;END;
--OUTPUT--
aman 15100
karampreet 12100
manjot 10100
gurpreet 17100
hardeep 11100
103
35:WRITE A LOCAL PROCEDURE THAT ACCEPT TWO NUMBER
AND PERFORM SELECTED ARITHMETIC OPERATION.
SOLUTION:
DECLARE
A NUMBER;
B NUMBER;
N NUMBER;
RESULT NUMBER;
BEGIN
IF(N=1) THEN
Z:=X+Y;
104
ELSIF(N=2) THEN
Z:=X-Y;
ELSIF(N=3) THEN
Z:=X*Y;
ELSE
Z:=X/Y;
END CALCULATOR;
BEGIN
A:=A;
B:=B;
N:=N;
CALCULATOR(A,B,N,RESULT);
DBMS_OUTPUT.PUT_LINE(RESULT=||RESULT);
END;
105
36:WRITE A PL/SQL FOR CREATING A STORED PROCEDURE
THAT ACCEPT TWO NUMBER AND PERFORM SELECTED
ARITHMETIC OPERATION.
SOLUTION:
Z NUMBER;
BEGIN
IF(N=1) THEN
Z:=X+Y;
DBMS_OUTPUT.PUT_LINE(ADDITION=||Z);
ELSIF(N=2) THEN
Z:=X-Y;
DBMS_OUTPUT.PUT_LINE(SUBTRACTION=||Z);
ELSIF(N=3) THEN
106
Z:=X*Y;
DBMS_OUTPUT.PUT_LINE(MULTIPLICATION=||Z);
ELSE
Z:=X/Y;
DBMS_OUTPUT.PUT_LINE(DIVISION=||Z);
END CALCULATOR;
DECLARE
A NUMBER;
B NUMBER;
N NUMBER;
BEGIN
A:=:A;
B:=:B;
N:=:N;
CALCULATOR(A,B,N);
END;
107
38:WRITE PL/SQL PROCEDURE TO PERFORM UPDATION ON
EMP TABLE
SOLUTION:
DECLARE
ecode employee.eno%type;
sal employee.salary%type;
BEGIN
END updation;
BEGIN
ecode:= :ecode;
updation(ecode);
END;
--OUTPUT--
108
Statement processed.
salary updated
DECLARE
ecode employee.eno%type;
BEGIN
END deletion;
BEGIN
ecode:= :ecode;
deletion(ecode);
END;
Statement processed
109
40:CREATE A STORED PROCEDURE TO DEBIT A BANK ACCOUNT.
THE USER MUST ENTER THE ACCOUNT NUMBER AND
AMOUNT TO BE DEBITED.THE MINIMUM BALANCE IN THE
ACCOUNT SHOULD BE 500. SUPPOSE THAT A TABLE BANK
CONTAINS THE ACCOUNT NUMBER AND BALANCE FIELDS
AND HAS 10 RECORDS INTO IT.
CREATE OR REPLACE PROCEDURE CHK_BALANCE(ACC NUMBER,AMOUNT
NUMBER)AS LESS_BALANCE EXCEPTION;
SOLUTION
Begin
IF curr_amount>500 THEN
ELSE
END IF;
EXCEPTION
110
When No_data_found Then
END chk_balance;
Declare
A number;
B number;
RESULT number;
Begin
C := A * B;
Return(C);
End product;
Begin
A := :A;
B := :B;
RESULT := product(A,B);
END;--OUTPUT--
111
Enter value for a: 4
Product 12
Declare
Ecode emp.empno%TYPE;
Salary emp.sal%TYPE;
Begin
Return S;
EXCEPTION
return 0;
END calc_sal;
Begin
Ecode := :Ecode;
112
dbms_output.put_line('salary = || salary);
ELSE
END IF;
END;
113
43:CREATE A STORED FUNCTION THAT COMPUTES THE
GREATEST OF THREE NUMBERS.
SOLUTION:
Begin
Return A;
Return b;
ELSE
Return C;
END IF;
END Greatest;
--OUTPUT--
Return EMP%ROWTYPE AS
S EMP%ROWTYPE;
Begin
Return S;
END emp_info;
--OUTPUT--
function created.
115
45:THUS A STORED FUNCTION ,'EMP_INFO' IS CREATED WHICH
IS THEN CALLED IN SUBSEQUENT PROGRAM.
SOLUTION
Declare
A emp%ROWTYPE;
Ecode emp.empno%type;
Begin
Ecode := : Ecode;
A := Emp_info (Ecode);
EXCEPTION
END;
116
46:Create a stored function TAX that returns the tax
information of an employee from EMP table where each
employee has a salary.
Salary TAX
RETURN NUMBER IS
BEGIN
IF (S<=1000) THEN
RETURN 0;
ELSE
RETURN(100 + (s-2000)*0.20);
END ;
117
47:CREATE A FUNCTION THAT CONCATENATES ROW VALUES
INTO A SINGLE COLUMN VALUES .
SOLUTION
hold VARCHAR2(2000);
cur sys_refcursor;
BEGIN
LOOP
ret := hold;
ELSE
END IF;
END LOOP;
Return ret;
END rowcount;
118
48:WRITE PL/SQL PACKAGE WHICH CONTAINS FUNCTION TO
RETURN SALARY OF A GIVEN EMPLOYEE CODE,A
PROCEDURE WHICH DISPLAYS EMPLOYEES OF GIVEN
DEPARTMENT NUMBER ABD ANOTHER PROCEDURE THAT
INCREMENT THE SALARY OF A GIVEN EMPLOYEE
SOLUTION
END emp_pack;
Package Body
Salary emp.sal%TYPE;
BEGIN
Return salary;
Exception
Return 0;
END sal_check;
119
Procedure emp_info(dno number) as
Cursor emp_cur is
Begin
Dbms_output.put_line(I.ename || || i.sal);
END LOOP;
END emp_info;
BEGIN
If(SQL%FOUND) THEN
Dbms_output.put_line(data updated);
Else
END IF;
END sal_inc;
END emp_pack;
120
49:WRITE PL/SQL PACKAGES WHICH CONSIST OF PROCEDURE
THAT UPDATES THE MARKS OF THE STUDENTS AND A
FUNCTION THAT RETURNS THE PERCENTAGE OF MARKS OF
A GIVEN STUDENT
SOLUTION
END emp_pack;
BEGIN
END update_marks;
per number;
begin
total_marks=math+dbms+eng;
per:= total_marks/300*100;
121
return(per);
END per;
BEGIN
math:= :math;
dbms:= :dbms;
eng:= :eng;
per:= percentage(math,dbms,eng);
END emp_pack;
END cal_pack;
AS
c number;
BEGIN
a:= :a;
b:= :b;
c:= a+b;
END add;
AS
123
r number;
BEGIN
d:= :d;
e:= :e;
r:= d-e;
END subtract;
AS
r number;
BEGIN
p:= :p;
r:= :r;
r:= p/q;
END division;
AS
z number;
BEGIN
x:= :x;
y:= :y;
z:= x/y;
END multiply;
END cal_pack;
DECLARE
125
sal number(8);
BEGIN
if(sal>10000) then
END IF;
END;
Output:-
statement processed
126
for each row
begin
values
(:old.eno,:old.name,:old.salary,:old.dept_no,:old.comm,:old.desi,:old.phone_no);
END;
--OUTPUT--
statement processed
curr_sal number(7);
new_salary number;
BEGIN
New_salary:= :new_salary;
curr_sal=:old.salary-:new.salary;
END;
--Output--
Curr_sal:= 10000
Statement processed
128
PR_ID AMT_STOC REORDER_POINT
K
INVENTORY TABLE
PRODID DESC
101 SUGAR
102 WHEAT
103 RICE
104 MAIZE
PRODUCT TABLE
SOLUTION:
ON INVENTORY
129
FOR EACH ROW
V_DESC PRODUCT.DESC%TYPE;
BEGIN
IF :NEW.AMT_STOCK<=:NEW.RECORDER_POINT THEN
ELSIF
ELSE
V_MSG:=PRODUCT P#=||TO_CHAR(:NEW.PR_ID)||
ORDERED;
END IF;
DBMS_PIPE.PACK_MESSAGE(V_MSG);
STAT_SEND:=DBMS_PIPE.SEND_MESSAGE(INVPIPE);
END;
--OUTPUT
TRIGGER CREATED
130
55:CREATE A TRIGGER THAT RECORDS THE MODIFICATION
MADE TO THE EMP TABLE INTO THE EMO_LOG TABLE
SOLUTION:
BEGIN
IF INSERTING THEN
NEW_SAL,)VALUES(:NEW.EMPNO,USER,SYSDATE,INSERT,:NEW.SAL);
OLD_SAL,NEW_SAL)VALUES(:OLD.EMPNO,USER,SYSDATE,UPDATE,
:OLD.SAL,:NEW.SAL);
ELSE
OLD_SAL)VALUES(:OLD.EMPNO,USER,SYSDATE,DELETE,:OLD.SAL);
131
END IF;
END;
--OUTPUT
TRIGGER CREATED
132