You are on page 1of 25

AIM: WRITE A PL/SQL PROGRAM TO DISPLAY SIMPLE MESSAGE

CODE:
set serveroutput on
declare
message varchar(20):='Hello,world!';
begin
dbms_output.put_line(message);
end;
/
OUTPUT:
SQL> @msg.sql
Hello,world!

PL/SQL procedure successfully completed.


AIM: WRITE A PL/SQL PROGRAM FOR MULTIPLICATION TABLE USING IF ELSE STATEMENT
CODE:
set serveroutput on
declare
a number(1);
i number(1);
begin
a:=&a;
for i in 1..10 loop
dbms_output.put_line(a*i);
end loop;
end;
/
OUTPUT:
SQL> @mul.sql
Enter value for a: 3
old 5: a:=&a;
new 5: a:=3;
3
6
9
12
15
18
21
24
27
30

PL/SQL procedure successfully completed.


AIM: WRITE A PL/SQL PROGRAM FOR MULTIPLICATION TABLE USING WHILE LOOP
CODE:
set serveroutput on
declare
a number;
i number;
begin
a:=&a;
i:=1;
while i<=10 loop
dbms_output.put_line(a||'x'||i||'='||a*i);
i:=i+1;
end loop;
end;
/
OUTPUT:
SQL> @mulwhile.sql
Enter value for a: 5
old 5: a:=&a;
new 5: a:=5;
5x1=5
5x2=10
5x3=15
5x4=20
5x5=25
5x6=30
5x7=35
5x8=40
5x9=45
5x10=50
PL/SQL procedure successfully completed.
AIM: WRITE A PL/SQL PROGRAM TO IMPLEMENT CALCULATOR USING IF ELSE STATEMENT
CODE:
set serveroutput on
declare
opt varchar(5);
a number;
b number;
begin
opt:=&opt;
a:=&a;
b:=&b;
if opt='+' then
dbms_output.put_line(a+b);
elsif opt='-' then
dbms_output.put_line(a-b);
elsif opt='*' then
dbms_output.put_line(a*b);
else
dbms_output.put_line(a/b);
end if;
end;
/
OUTPUT:
SQL> @calci1.sql
Enter value for opt: '+'
old 6: opt:=&opt;
new 6: opt:='+';
Enter value for a: 3
old 7: a:=&a;
new 7: a:=3;
Enter value for b: 7
old 8: b:=&b;
new 8: b:=7;
10
PL/SQL procedure successfully completed.
SQL> @calci1.sql
Enter value for opt: '-'
old 6: opt:=&opt;
new 6: opt:='-';
Enter value for a: 6
old 7: a:=&a;
new 7: a:=6;
Enter value for b: 10
old 8: b:=&b;
new 8: b:=10;
-4
PL/SQL procedure successfully completed.
SQL> @calci1.sql
Enter value for opt: '*'
old 6: opt:=&opt;
new 6: opt:='*';
Enter value for a: 5
old 7: a:=&a;
new 7: a:=5;
Enter value for b: 6
old 8: b:=&b;
new 8: b:=6;
30

PL/SQL procedure successfully completed.

SQL> @calci1.sql
Enter value for opt: '%'
old 6: opt:=&opt;
new 6: opt:='%';
Enter value for a: 8
old 7: a:=&a;
new 7: a:=8;
Enter value for b: 4
old 8: b:=&b;
new 8: b:=4;
2

PL/SQL procedure successfully completed.


AIM: WRITE A PL/SQL PROGRAM TO IMPLEMENT CALCULATOR USING SWITCH CASE
CODE:
set serveroutput on
declare
opt varchar(5):='+';
a number;
b number;
begin
opt:=&opt;
a:=&a;
b:=&b;
case opt
when '+' then dbms_output.put_line(a+b);
when '-' then dbms_output.put_line(a-b);
when '*' then dbms_output.put_line(a*b);
else dbms_output.put_line(a/b);
end case;
end;
/
OUTPUT:
SQL> @calciswitch.sql
Enter value for opt: '+'
old 6: opt:=&opt;
new 6: opt:='+';
Enter value for a: 6
old 7: a:=&a;
new 7: a:=6;
Enter value for b: 9
old 8: b:=&b;
new 8: b:=9;
15

PL/SQL procedure successfully completed.

SQL> @calciswitch.sql
Enter value for opt: '-'
old 6: opt:=&opt;
new 6: opt:='-';
Enter value for a: 7
old 7: a:=&a;
new 7: a:=7;
Enter value for b: 2
old 8: b:=&b;
new 8: b:=2;
5

PL/SQL procedure successfully completed.

SQL> @calciswitch.sql
Enter value for opt: '%'
old 6: opt:=&opt;
new 6: opt:='%';
Enter value for a: 9
old 7: a:=&a;
new 7: a:=9;
Enter value for b: 6
old 8: b:=&b;
new 8: b:=6;
1.5

PL/SQL procedure successfully completed.

SQL> @calciswitch.sql

Enter value for opt: '*'


old 6: opt:=&opt;
new 6: opt:='*';
Enter value for a: -2
old 7: a:=&a;
new 7: a:=-2;
Enter value for b: -3
old 8: b:=&b;
new 8: b:=-3;
6

PL/SQL procedure successfully completed.


AIM: CREATE A EMPLOYEE TABLE AND WRITE A PL/SQL PROGRAM TO FIND GP &NP USING
P TYPE
SQL> create table emp(eno varchar(4) primary key,bp numeric(6,2),hra numeric(4),da numeric(3),it
numeric(4),gp numeric,np numeric);

Table created.
SQL> insert into emp values('&eno',&bp,&hra,&da,&it,&gp,&np);
Enter value for eno: 1
Enter value for bp: 9000
Enter value for hra: 3500
Enter value for da: 300
Enter value for it: 1500
Enter value for gp: NULL
Enter value for np: NULL
old 1: insert into emp values('&eno',&bp,&hra,&da,&it,&gp,&np)
new 1: insert into emp values('1',9000,3500,300,1500,NULL,NULL)

1 row created.
SQL> /
Enter value for eno: 2
Enter value for bp: 9000.75
Enter value for hra: 3000
Enter value for da: 410
Enter value for it: 1500
Enter value for gp: NULL
Enter value for np: NULL
old 1: insert into emp values('&eno',&bp,&hra,&da,&it,&gp,&np)
new 1: insert into emp values('2',9000.75,3000,410,1500,NULL,NULL)

1 row created.
SQL> /
Enter value for eno: 3
Enter value for bp: 8000
Enter value for hra: 2750
Enter value for da: 220
Enter value for it: 1400
Enter value for gp: NULL
Enter value for np: NULL
old 1: insert into emp values('&eno',&bp,&hra,&da,&it,&gp,&np)
new 1: insert into emp values('3',8000,2750,220,1400,NULL,NULL)
1 row created.

SQL> select *from emp;


ENO BP HRA DA IT GP NP
---- ---------- ---------- ---------- ---------- ---------- ----------
1 9000 3500 300 1500
2 9000.75 3000 410 1500
3 8000 2750 220 1400
SQL> ed emp.sql
CODE:
set serveroutput on
declare
eid number;
bp1 emp.bp%type;
h1 emp.hra%type;
da1 emp.da%type;
it1 emp.it%type;
gp1 emp.gp%type;
np1 emp.np%type;
begin
eid:=&eid;
select bp,hra,da,it,gp,np into bp1,h1,da1,it1,gp1,np1 from emp where eno=eid;
gp1:=bp1+h1+da1;
np1:=gp1-it1;
dbms_output.put_line('gp:'||gp1);
dbms_output.put_line('np:'||np1);
update emp set gp=gp1,np=np1 where eno=eid;
end;
/
OUTPUT:
SQL> @emp.sql
Enter value for eno1: 1
old 10: eno1:=&eno1;
new 10: eno1:=1;
gp:12800
np:11300

PL/SQL procedure successfully completed.

SQL> select *from emp;


ENO BP HRA DA IT GP NP
---- ---------- ---------- ---------- ---------- ---------- ----------
1 9000 3500 300 1500 12800 11300
2 9000.75 3000 410 1500
3 8000 2750 220 1400
SQL> @emp.sql
Enter value for eno1: 2
old 10: eno1:=&eno1;
new 10: eno1:=2;
gp:12411
np:10911

PL/SQL procedure successfully completed.

SQL> select *from emp;

ENO BP HRA DA IT GP NP
---- ---------- ---------- ---------- ---------- ---------- ----------
1 9000 3500 300 1500 12800 11300
2 9000.75 3000 410 1500 12411 10911
3 8000 2750 220 1400
SQL> @emp.sql
Enter value for eno1: 3
old 10: eno1:=&eno1;
new 10: eno1:=3;
gp:10970
np:9570

PL/SQL procedure successfully completed.

SQL> select *from emp;

ENO BP HRA DA IT GP NP
---- ---------- ---------- ---------- ---------- ---------- ----------
1 9000 3500 300 1500 12800 11300
2 9000.75 3000 410 1500 12411 10911
3 8000 2750 220 1400 10970 9570
AIM: CREATE A STUDENT TABLE AND WRITE A PL/SQL PROGRAM TO UPDATE TOTAL & GRADE
USING ROW TYPE
SQL> create table stu(sno varchar(4) primary key,m1 numeric(2),m2 numeric(2),m3 numeric(2),tot
numeric,grade numeric);

Table created.

SQL> insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade);


Enter value for sno: 1201
Enter value for m1: 87
Enter value for m2: 81
Enter value for m3: 90
Enter value for tot: 0
Enter value for grade: 0
old 1: insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade)
new 1: insert into stu values('1201',87,81,90,0,0)

1 row created.
SQL> /
Enter value for sno: 1202
Enter value for m1: 89
Enter value for m2: 91
Enter value for m3: 77
Enter value for tot: 0
Enter value for grade: 0
old 1: insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade)
new 1: insert into stu values('1202',89,91,77,0,0)

1 row created.
SQL> /
Enter value for sno: 1203
Enter value for m1: 74
Enter value for m2: 81
Enter value for m3: 93
Enter value for tot: 0
Enter value for grade: 0
old 1: insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade)
new 1: insert into stu values('1203',74,81,93,0,0)
1 row created.
SQL> /
Enter value for sno: 1204
Enter value for m1: 76
Enter value for m2: 79
Enter value for m3: 89
Enter value for tot: 0
Enter value for grade: 0
old 1: insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade)
new 1: insert into stu values('1204',76,79,89,0,0)

1 row created.
SQL> select * from stu;

SNO M1 M2 M3 TOT GRADE


---- ---------- ---------- ---------- ---------- ----------
1201 87 81 90 0 0
1202 89 91 77 0 0
1203 74 81 93 0 0
1204 76 79 89 0 0
CODE
set serveroutput on;
declare
r stu%rowtype;
id number;
begin
id:=&id;
select * into r from stu where sno=id;
r.tot:=r.m1+r.m2+r.m3;
dbms_output.put_line('total:'||r.tot);
if(r.tot>270)then
r.grade:='10';
dbms_output.put_line('grade:'||r.grade);
elsif(270<r.tot and r.tot>210)then
r.grade:='9';
dbms_output.put_line('grade:'||r.grade);
elsif(210<r.tot and r.tot>150)then
r.grade:='8';
dbms_output.put_line('grade:'||r.grade);
elsif(105<r.tot and r.tot>150)then
r.grade:='6';
dbms_output.put_line('grade:'||r.grade);
else
r.grade:='0';
dbms_output.put_line('grade:'||r.grade);
end if;
update stu set tot=r.tot,grade=r.grade where sno=id;
end;
/
OUTPUT
SQL> @stu.sql
Enter value for id: 1201
old 5: id:=&id;
new 5: id:=1201;
total:258
grade:8

PL/SQL procedure successfully completed.


SQL> @stu.sql
Enter value for id: 1202
old 5: id:=&id;
new 5: id:=1202;
total:257
grade:8

PL/SQL procedure successfully completed.


SQL> @stu.sql
Enter value for id: 1203
old 5: id:=&id;
new 5: id:=1203;
total:248
grade:8

PL/SQL procedure successfully completed.


SQL> @stu.sql
Enter value for id: 1204
old 5: id:=&id;
new 5: id:=1204;
total:244
grade:8

PL/SQL procedure successfully completed.


SQL> select *from stu;

SNO M1 M2 M3 TOT GRADE


---- ---------- ---------- ---------- ---------- ----------
1201 87 81 90 258 8
1202 89 91 77 257 8
1203 74 81 93 248 8
1204 76 79 89 244 8
AIM: WRITE A PL/SQL PROGRAM TO FIND CUBE OF A NUMBER USING PROCEDURE
CODE:
declare
a number;
procedure cube(x IN OUT number) IS
begin
x:=x*x*x;
end;
begin
a:=3;
cube(a);
dbms_output.put_line('cube of 3:'||a);
end;
/
OUTPUT
SQL> @cube
cube of 3:27

PL/SQL procedure successfully completed.


AIM: WRITE A PL/SQL PROGRAM TO FIND FACTORIAL OFAGIVEN NUMBER USING PROCEDURE
CODE:
set serveroutput on
create or replace procedure fact1(n IN number) AS
i number;
fac number;
begin
fac:=1;
for i in 1..n loop
fac:=fac*i;
end loop;
dbms_output.put_line('factrorial of '|| n ||' is '||fac);
end;
/
OUTPUT
SQL> @fact.sql

Procedure created.

SQL> execute fact1(4)


factrorial of 4 is 24

PL/SQL procedure successfully completed.

SQL> execute fact1(6)


factrorial of 6 is 720

PL/SQL procedure successfully completed.


SQL> execute fact1(5);
factrorial of 5 is 120

PL/SQL procedure successfully completed.


AIM: CREATE A STUDENT TABLE AND WRITE A PL/SQL PROGRAM TO UPDATE TOTAL & GRADE
USING PROCEDURES
SQL> insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade);
Enter value for sno: 1205
Enter value for m1: 56
Enter value for m2: 34
Enter value for m3: 91
Enter value for tot: 0
Enter value for grade: 0
old 1: insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade)
new 1: insert into stu values('1205',56,34,91,0,0)

1 row created.

SQL> insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade);


Enter value for sno: 1206
Enter value for m1: 43
Enter value for m2: 27
Enter value for m3: 10
Enter value for tot: 0
Enter value for grade: 0
old 1: insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade)
new 1: insert into stu values('1206',43,27,10,0,0)

1 row created.

SQL> /
Enter value for sno: 1207
Enter value for m1: 56
Enter value for m2: 29
Enter value for m3: 74
Enter value for tot: 0
Enter value for grade: 0

old 1: insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade)


new 1: insert into stu values('1207',56,29,74,0,0)

1 row created.

SQL> insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade);


Enter value for sno: 1208
Enter value for m1: 14
Enter value for m2: 10
Enter value for m3: 9
Enter value for tot: 0
Enter value for grade: 0
old 1: insert into stu values('&sno',&m1,&m2,&m3,&tot,&grade)
new 1: insert into stu values('1208',14,10,9,0,0)

1 row created.
CODE:
create or replace procedure stud(id IN stu.sno%type) AS
r stu%rowtype;
begin
select * into r from stu where sno=id;
r.tot:=r.m1+r.m2+r.m3;
update stu set stu.tot=r.tot where sno=id;
if(r.tot>270)then
update stu set stu.grade='10' where sno=id;
elsif(270<r.tot and r.tot>210)then
update stu set stu.grade='9' where sno=id;
elsif(210<r.tot and r.tot>150)then
update stu set stu.grade='8' where sno=id;
elsif(105<r.tot and r.tot>150)then
update stu set stu.grade='6' where sno=id;
else
update stu set stu.grade='5' where sno=id;

end if;
end;
/
OUTPUT:
SQL> @stu1.sql

Procedure created.

SQL> execute stud(1205);

PL/SQL procedure successfully completed.

SQL> execute stud(1206);

PL/SQL procedure successfully completed.

SQL> select * from stu;

SNO M1 M2 M3 TOT GRADE


---- ---------- ---------- ---------- ---------- ----------
1201 87 81 90 258 8
1202 89 91 77 257 8
1203 74 81 93 248 8
1204 76 79 89 244 8
1205 56 34 91 181 6
1206 43 27 10 80 5
1207 56 29 74 0 0

7 rows selected.

SQL> execute stud(1207);

PL/SQL procedure successfully completed.

SQL> execute stud1(1208);

PL/SQL procedure successfully completed.

SQL> select *from stu;

SNO M1 M2 M3 TOT GRADE


---- ---------- ---------- ---------- ---------- ----------
1201 87 81 90 258 8
1202 89 91 77 257 8
1203 74 81 93 248 8
1204 76 79 89 244 8
1205 56 34 91 181 6
1206 43 27 10 80 5
1207 56 29 74 159 6
1208 14 10 9 33 0

8 rows selected.
AIM: WRITE A PL/SQL PROGRAM TO IMPLEMENT CALCULATOR USING FUNCTIONS
CODE:
SQL>ed calcifun.sql
set serveroutput on;
create or replace function cal(op IN number,num1 IN number,num2 IN number)
return number as
begin
if op=1 then
return(num1+num2);
elsif op=2 then
return(num1-num2);
elsif op=3 then
return(num1*num2);
else
return(num1/num2);
end if;
end;
/
SQL> ed calcifun1.sql
set serveroutput on
declare
choice number;
a number;
b number;
res number;
begin
choice:=&choice;
a:=&a;
b:=&b;
res:=cal(choice,a,b);
dbms_output.put_line('result:'||res);

end;
/
OUTPUT
SQL> @calcifun.sql

Function created.

SQL> ed calcifun1.sql

SQL> @calcifun1.sql
Enter value for choice: 2
old 7: choice:=&choice;
new 7: choice:=2;
Enter value for a: 23
old 8: a:=&a;
new 8: a:=23;
Enter value for b: 14
old 9: b:=&b;
new 9: b:=14;
result:9

PL/SQL procedure successfully completed.


AIM: WRITE A PL/SQL PROGRAM TO FIND MAX OF 3 NUMBERS USING FUNCTIONS
CODE:
set serveroutput on
DECLARE
a number;
b number;
c number;
d number;
FUNCTION max1(x IN number,y IN number,z IN number)
RETURN number
IS
s number;
BEGIN
IF (x>=y) AND (x>=z) THEN
s:=x;
ELSIF (y>=x) and (y>=z) THEN
s:=y;
ELSE
s:=z;
END IF;
RETURN s;
END;
BEGIN
a:=&a;
b:=&b;
c:=&c;
d:=max1(a,b,c);
dbms_output.put_line('maximum is:'||d);
END;
/
OUTPUT
SQL> @maxfun.sql
Enter value for a: 34
old 21: a:=&a;
new 21: a:=34;
Enter value for b: 56
old 22: b:=&b;
new 22: b:=56;
Enter value for c: 18
old 23: c:=&c;
new 23: c:=18;
maximum is:56

PL/SQL procedure successfully completed.


AIM: WRITE A PL/SQL PROGRAM TO IMPLEMENT PAYROLL USING CURSOR
CODE
set serveroutput on
declare
id emp.eno%type;
b emp.bp%type;
h emp.hra%type;
d emp.da%type;
i emp.it%type;
g emp.gp%type;
n emp.np%type;
cursor emp1 is select eno,bp,hra,da,it,gp,np from emp;
begin
open emp1;
loop
fetch emp1 into id,b,h,d,i,g,n;
exit when emp1%notfound;
g:=b+h+d;
n:=g-i;
update emp set gp=g,np=n where eno=id;
dbms_output.put_line('ENO'||' '||'BP'||' '||'HRA'||' '||'DA'||' '||'IT'||' '||'GP'||' '||'NP');
dbms_output.put_line(id||' '||b||' '||h||' '||d||' '||i||' '||g||' '||n);
end loop;
close emp1;
end;
/
OUTPUT
SQL> @cursor.sql
ENO BP HRA DA IT GP NP
1 9000 3500 300 1500 12800 11300
ENO BP HRA DA IT GP NP

2 9000.75 3000 410 1500 12411 10911


ENO BP HRA DA IT GP NP
3 8000 2750 220 1400 10970 9570
ENO BP HRA DA IT GP NP
4 8500 3200 250 1400 11950 10550

PL/SQL procedure successfully completed.


AIM: WRITE A PL/SQL PROGRAM TO DISPLAY THE ERROR MESSAGE WHENEVER WE ENTERING THE
MARKS <0 OR >100
CODE:
set serveroutput on
create or replace trigger mark_trg
before update of m1
on stu
for each row when(new.m1>0)
begin
if :NEW.m1<0 or :NEW.m1>100 then
raise_application_error('enter the marks in between 0 and 100');
end if;
end;
/
OUTPUT
SQL> ed trig.sql

SQL> @trig.sql

Trigger created.

SQL> update stu set m1=-5 where sno=1206;


update stu set m1=-5 where sno=1206
*
ERROR at line 1:
ORA-20100: enter the marks in between 0 and 100
ORA-06512: at "B17.MARK_TRG", line 3
ORA-04088: error during execution of trigger 'B17.MARK_TRG'
SQL> select *from stu;

SNO M1 M2 M3 TOT GRADE


---- ---------- ---------- ---------- ---------- ----------
1201 87 81 90 258 8
1202 89 91 77 257 8
1203 74 81 93 248 8
1204 76 79 89 244 8
1205 56 34 91 181 6
1206 -5 27 10 80 5
1207 56 29 74 159 6

7 rows selected.
AIM: WRITE A PL/SQL PROGRAM TO DISPLAY THE ERROR MESSAGE WHENEVER WE ARE UPDATING
THE MARKS FROM 1 TO 6
CODE:
set serveroutput on
create or replace trigger statmarks
before update of m1
on stu
declare
time number;
begin
time:=extract(hour from systimestamp);
if time between 1 and 6 then
raise_application_error(-20100,'cannot update marks on time from 1 to 6');
end if;
end;
/
OUTPUT
SQL> ed sttrig.sql

SQL> @sttrig.sql

Trigger created.
SQL> update stu set m1=-7 where sno=1202;
update stu set m1=-7 where sno=1202
*
ERROR at line 1:
ORA-20100: cannot update marks on time from 1 to 6
ORA-06512: at "B17.STATMARKS", line 6
ORA-04088: error during execution of trigger 'B17.STATMARKS'
AIM: WRITE A PL/SQL PROGRAM TO INSERT THE RECORD FROM 1 TABLE TO STUDENT TABLE USING
ROW LEVEL TRIGGER
CODE:
set serveroutput on
create or replace trigger p_trig
after insert on st
for each row
when(new.rno>0)
begin
insert into stu values(:new.rno,0,0,0,0,0);
end;
/
OUTPUT
SQL> ed strig.sql

SQL> @strig.sql

Trigger created.

SQL> insert into st values(&rno,'&name',&ph_no);


Enter value for rno: 1209
Enter value for name: uma
Enter value for ph_no: 7654323456
old 1: insert into st values(&rno,'&name',&ph_no)
new 1: insert into st values(1209,'uma',7654323456)

1 row created.
SQL> select *from stu;

SNO M1 M2 M3 TOT GRADE


---- ---------- ---------- ---------- ---------- ----------
1201 87 81 90 258 8
1202 89 57 77 257 8
1203 74 81 93 248 8
1204 -7 79 89 167 6
1205 56 34 91 181 6
1206 -8 27 10 80 5
1207 56 29 74 159 6
1209 0 0 0 0 0

8 rows selected.

You might also like