Sie sind auf Seite 1von 40

Free site is hosted by Lycos Search The Web Tripod

Build your own website on Tripod It's fast, easy and economical. del.icio.us Dig
g StumbleUpon MySpace Blogmarks Furl ma.gnolia Newsvine reddit Technorati Share
This Site More
Not the site you
are looking for?

QUESTION BANK - IP

Home
ASSIGNMENTS
PL / SQL PROGRAMS
FINDING OUT ERRORS
THEORY QUESTIONS
OUTPUT QUESTIONS
BOARD PAPERS
SYLLABUS CLASS XII

PL / SQL PROGRAMS

Last updated on 27 March 2009 20:21:58


PROGRAM BASED ON ASSIGNMENT STATEMENT :

P1. WRITE A NESTED PROGRAM TO ADD AND TO MULTIPLY TWO NUMBERS.


DECLARE
N1 number;
N2 number;
Sum number ;
BEGIN
Sum := N1+N2 ;
<< inner_block >>
DECLARE
Prod number;
BEGIN
Prod := N1 * N2 ;
Dbms_output.put_line( Product Value = || prod );
END inner_block ;
Dbms_output.put_line( Sum Value = || sum);
END;

P2. WRITE A PROGRAM TO CALCULATE THE SIMPLE INTEREST AND COMPUND INTEREST , IF P
, N, R ARE GIVEN.
declare
p number(9,2) ;
n number(9,2) ;
r number(9,2) ;
si number(9,2) := 0;
ci number(9,2) := 0;
begin
p := &principal_amount;
n := &no_of_years;
r := &rate_of_interest;
si := p*n*r/100;
ci := p*(1+r/100)**n;
dbms_output.put_line('simple interset =' ||si);
dbms_output.put_line('compound interset =' ||ci);
end;
SQL> /
Enter value for principal_amount: 10000
old 8: p:=&principal_amount;
new 8: p:=10000;
Enter value for no_of_years: 5
old 9: n:=&no_of_years;
new 9: n:=5;
Enter value for rate_of_interest: 10.5
old 10: r:=&rate_of_interest;
new 10: r:=10.5;
simple interset =5250
compound interset =16474.47
PL/SQL procedure successfully completed.

PROGRAM BASED ON IF LOOP


P3 . Write a program to check greatest of two numbers :
declare
a number(3) :=20;
b number(3) :=10;
begin
if a>b then
dbms_output.put_line('a is the greatest : ' ||a);
else
dbms_output.put_line('B is the greatest : ' ||b);
end if;
end;
SQL> /
a is the greatest : 20
PL/SQL procedure successfully completed.

P4. Given 2 sides of a rectangle .Write a program to find out its area is greate
r than its perimeter or not .

declare
l number;
b number;
ar number;
pr number;
begin
l := &l;
b := &b;
ar := l*b;
pr := 2*(l+b);
if ar > pr then
dbms_output.put_line('the area iS > its perimeter'|| 'area = '||ar||'perimeter =
'||pr);
else
dbms_output.put_line('the area iS < its perimeter'|| ' area = '||ar||' perimeter
= '||pr);
end if;
end;

Enter value for l: 10


old 7: l:=&l;
new 7: l:=10;
Enter value for b: 6
old 8: b:=&b;
new 8: b:=6;
the area is > its perimeter area = 60 perimeter = 32
PL/SQL procedure successfully completed.

P5. WRITE A PROGRAM TO INPUT A SINGLE DIGIT NO: CONVERT IT INTO WORDS.
Declare
a number;
t varchar2(10);
begin
a :=&a;
if a=1 then
t := 'one';
elsif a=2 then
t := 'two';
elsif a= 3 then
t := 'three';
elsif a= then
t := 'four';
elsif a=5 then
t := 'five';
elsif a=6 then
t := 'six';
elsif a=7 then
t := 'seven';
elsif a=8 then
t := 'eight';
elsif a=9 then
t := 'nine';
else
t := 'zero';
end if;
dbms_output.put_line(a || ' = ' || t);
end;
Enter value for a: 2
old 5: a:=&a;
new 5: a:=2;
2 = two
PL/SQL procedure successfully completed.
P6 . Write a program to check the given number is +ve or ve :
SQL>
declare
n number(2):=12;
begin
if n>0 then
dbms_output.put_line('the given number is positive' || n);
else
dbms_output.put_line('the given number is negative' || n);
end if;
end;
/
SQL> save posneg.sql
Created file posneg.sql
SQL >The given number is positive 12
PL/SQL procedure successfully completed.
PROGRAM BASED ON NESTED IF LOOP

P7. WRITE A PROGRAM TO INPUT 2 NUMBERS IF THE 1st No >2nd No THEN SWAP IT, ELSE
IF 1st No < 2nd No RAISE IT TO ITS POWER , ELSE DOUBLES IT.
declare
a number(5);
b number(5);
t number(5);
begin
a := &a;
b := &b;
dbms_output.put_line( 'initial value of a = '||a ||' b = '||b )
if a>b
then
t:= a;
a:= b;
b:=t;
elsIF A<B
then
a:=a**a;
b:=b**b;
ELSE
a:=2*a;
b:=2*b;
end if;
dbms_output.put_line('final value of a = '||a ||' b = '||b);
end;
SQL> /
Enter value for a: 4
old 6: a:=&a;
new 6: a:=4;
Enter value for b: 5
old 7: b:=&b;
new 7: b:=5;
initial value of a = 4 b = 5
final value of a = 256 b = 3125
PL/SQL procedure successfully completed.
SQL> /
Enter value for a: 5
old 6: a:=&a;
new 6: a:=5;
Enter value for b: 4
old 7: b:=&b;
new 7: b:=4;
initial value of a = 5 b = 4
final value of a = 4 b = 5
PL/SQL procedure successfully completed.
SQL> Enter value for a: 5
old 6: a:=&a;
new 6: a:=5;
Enter value for b: 5
old 7: b:=&b;
new 7: b:=5;
initial value of a = 5 b = 5
final value of a = 10 b = 10
PL/SQL procedure successfully completed.

P8. A bank accepts fixed deposits for one or more years and the policy it adopts
on interest is as follows:

If a deposit is < Rs 2000 and for 2 or more years , the interest rate is 5% comp
ounded annually.

If a deposit is Rs.2000 or more but less than 6000 and for 2 or more years , the
interest is 7 % compounded annually.

If a deposit is Rs.6000 and for 1 or more years , the interest is 8 % compounded


annually.

On all deposits for 5 years or more , interest is 10% compounded annually.

On all other deposits not covered by above conditions , the interest is 3% compo
unded annually.
Given the amount deposited and the number of years , Write a program to calculat
e the amount on maturity.

declare
p number(9,2);
r number(9,2);
t number(9,2);
ci number(9,2);
begin
p := &p;
t := &t;
if p<2000 and t>=2 then
r := 5;
elsif p>=2000 and p<6000 and t>=2 then
r := 7;
elsif p>6000 and t>=1 then
r := 8;
elsif t>=5 then
r := 10;
else
r := 3;
end if;

ci := p*(1+r/100)**t - p;

dbms_output.put_line('The Principal amount is ='||p);


dbms_output.put_line('The rate of interest is ='||r);
dbms_output.put_line('The time period is ='||t);
dbms_output.put_line('The compund interst is ='||ci);
end;

Enter value for p: 10000


old 7: p:=&p;
new 7: p:=10000;
Enter value for t: 5
old 8: t:=&t;
new 8: t:=5;
The Principal amount is =10000
The rate of interest is =8
The time period is =5
The compund interst is =4693.28
PL/SQL procedure successfully completed.
Enter value for p: 1500
old 7: p:=&p;
new 7: p:=1500;
Enter value for t: 3
old 8: t:=&t;
new 8: t:=3;
The Principal amount is =1500
The rate of interest is =5
The time period is =3
The compound interest is =236.44
PL/SQL procedure successfully completed.

P9. WRITE A PROGRM TO INPUT 3 NUMBERS FIND THE 1st Greatest, 2nd Greatest, 3rd G
reatest.
declare
a number(3);
b number(3);
c number(3);
f number(3);
s number(3);
t number(3);
begin
a :=&a;
b :=&b;
c :=&c;
if a>b and a>c then
f:= a;
if b>c then
s:=b;
t:=c;
else
s:=c;
t:=b;
end if;
elsif b>a and b>c then
f:= b;
if a>c then
s:=a;
t:=c;
else
s:=c;
t:=a;
end if;
else
f:= c;
if a>b then
s:=a;
t:=b;
else
s:=b;
t:=a;
end if;
end if;
dbms_output.put_line('first largest = ' ||f);
dbms_output.put_line('second largest = ' ||s);
dbms_output.put_line('third largest = ' ||t);
end;
/
Enter value for a: 5
old 9: a:=&a;
new 9: a:=5;
Enter value for b: 8
old 10: b:=&b;
new 10: b:=8;
Enter value for c: 9
old 11: c:=&c;
new 11: c:=9;
first largest = 9
second largest = 8
third largest = 5
PL/SQL procedure successfully completed.
P10 . WRITE A PROGRAM TO INPUT 2 NUMBERS AND AN OPERATOR , AND DISPLAY THE RESUL
T.
declare
a number(3) ;
b number(3) ;
c number(3) ;
op char(1) ;
begin
a := &a ;
b := &b ;
op := &op ;
if op='+'
then
c:=a+b;
elsif op='-'
then
c:=a-b;
elsif op='*'
then
c:=a*b;
else
c:=a/b;
end if;
dbms_output.put_line('result='||c);
end;
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;
Enter value for op: '*'
old 9: op:=&op;
new 9: op:='*';
result=30
PL/SQL procedure successfully completed.

P11. Write a program to calculate the commission of the sales man.


If salesmade Comm
>10000 500
10000 20000 1000
>20000 1500
declare
sman varchar(10);
sm number(9,2);
com number(9,2);
begin
sman := &sman;
sm := &sm;
if sm > 10000 then
com := 500;
elsif sm > 20000 then
com := 1000;
else
com := 1500;
end if;
dbms_output.put_line(' the sales man name is :'||sman);
dbms_output.put_line(' the sales made is :'||sm);
dbms_output.put_line(' the sales commission is :'||com);
end;

Enter value for sman: 'Mathew'


old 6: sman:=&sman;
new 6: sman:='Mathew';
Enter value for sm: 15000
old 7: sm:=&sm;
new 7: sm:=15000;
The sales man name is :Mathew
The sales made is :15000
The sales commission is :500
PL/SQL procedure successfully completed.

PROGRAM BASED ON WHILE LOOP

P12. TO GENERATE NUMBERS FROM 0 TO 25 IN STEP OF 5


declare
i number :=10 ;
begin
dbms_output.put_line(' THE WHILE LOOP begins');
WHILE I<=25 LOOP
dbms_output.put_line(to_char(i));
i:=i+5;
end loop;
End;

THE WHILE LOOP BEGINS


10
15
20
25
PL/SQL procedure successfully completed.

P13. Write a program to find the sum of the digits of the number:
DECLARE
N number ;
S NUMBER :=0;
R NUMBER;
begin
n:=&N;
WHILE N<>0 LOOP
R := MOD(N,10);
S := S + R;
N := TRUNC(N/10);
end loop;
dbms_output.put_line('THE SUM OF THE DIGITS = ' || S);
end;
SQL> Enter value for n: 375
old 7: n:=&N;
new 7: n:=375;
THE SUM OF THE DIGITS = 15
PL/SQL procedure successfully completed.

PROGRAM BASED ON NESTED WHILE LOOP

PROGRAM BASED ON FOR LOOP


P14. WRITE A PROGRAM CODE TO PRINT THE MULTIPLICATION TABLE OF A GIVEN NO:
declare
t number(3) := 3;
begin
T := &T;
FOR I IN 1..3 LOOP
dbms_output.put_line(t||' X '|| i || ' = ' ||i*t );
end loop;
end;

p15. write aprogram to generate even numbers from 2 to 50, and find its sum.
declare
i number(5);
n number(5);
v number(5);
s number(5):=0;
begin
n := &terminal_number;
for i in 1 .. n/2 loop
v := i*2;
s := s+v;
dbms_output.put_line(v);
end loop;
dbms_output.put_line('the sum of numbers from 2 to '||n||' = ' ||s);
end;
SQL> /
Enter value for terminal_number: 10
old 7: n:=&terminal_number;
new 7: n:=10;
2
4
6
8
10
The sum of numbers from 2 to 10 = 30
PL/SQL procedure successfully completed.

P16 . WRITE A PROGRAM TO GENERATE FIRST 25 TERMS OF THE FIBONACCIS SERIES.


declare
a number:= 0 ;
b number:= 1;
c number;
begin
dbms_output.put(a||' '||b||' ');
for i in 3..10 loop
c := a + b;
dbms_output.put(c||' ');
a := b;
b := c;
end loop;
dbms_output.put_line(' ');
end;
0 1 1 2 3 5 8 13 21 34
PL/SQL procedure successfully completed.

P17. Write a program to find the factorial of a number :


declare
n number(2);
i number(2);
f number(5):=1;
begin
n :=&n;
for i in 1..n loop
f := f * i;
end loop;
dbms_output.put_line(' the factorial value = '||f);
end;
Enter value for n: 5
old 6: n:=&n;
new 6: n:=5;
the factorial value = 120
PROGRAM BASED ON NESTED FOR LOOP

P18. Write a program to print the following design:


1
12
123
1234
12345
declare
i number ;
j number;
n number;
begin
n :=&n;
for i in 1..n loop
for j in 1..i loop
dbms_output.put(j);
end loop;
dbms_output.put_line(' ');
end loop;
end;
Enter value for n: 5
old 6: n:=&n;
new 6: n:=5;
P19. WRITE A PROGRAM TO DISPLAY NUMBERS OF THE FORM
0 0 0 0 0
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
DECLARE
I NUMBER;
J NUMBER ;
K NUMBER;
BEGIN
FOR I IN 0 .. 5 LOOP
FOR J IN 1..5 LOOP
K := I*J;
DBMS_OUTPUT.PUT(K);
END LOOP;
DBMS_OUTPUT. PUT_LINE (' ');
END LOOP;
END;
P20. WRITE A PL/SQL CODE TO ACCEPT THE TEXT AND
REVERSE THE GIVEN TEXT.
CHECK THE TEXT IS PALINDROME OR NOT
DECLARE
G VARchar2(20);
r VARchar2(20);
BEGIN
G:='&g';
dbms_output.put_line('THE GIVEN TEXT :'||G);
for i in REVERSE 1.. length(G) loop
R:= R||substr(G,i,1);
end loop;
dbms_output.put_line('THE REVERSED TEXT :'||R);
IF R=G THEN
dbms_output.put_line('THE GIVEN TEXT IS PALINDROME ');
ELSE
dbms_output.put_line('THE GIVEN TEXT IS NOT PALINDROME ');
END IF;
end;
SQL> /
Enter value for g: MALAYALAM
old 5: G:='&g';
new 5: G:='MALAYALAM';
THE GIVEN TEXT :MALAYALAM
THE REVERSED TEXT :MALAYALAM
THE GIVEN TEXT IS PALINDROME
PL/SQL procedure successfully completed.
/
Enter value for g: HELLO
old 5: G:='&g';
new 5: G:='HELLO';
THE GIVEN TEXT :HELLO
THE REVERSED TEXT :OLLEH
THE GIVEN TEXT IS NOT PALINDROME
PL/SQL procedure successfully completed.
P21. Write a program to print the following design:
declare
i number ;
j number;
n number;
k number;
m number;
begin
n := &n;
for i in 1..n loop
for j in 1..n-i loop
dbms_output.put('~');
end loop;

for k in 1..i loop


dbms_output.put(k);
end loop;

for k in reverse 1..i-1 loop


dbms_output.put(k);
end loop;
dbms_output.put_line(' ');
end loop;
end;

Enter value for n: 5


old 8: n:=&n;
new 8: n:=5;
~~~~1
~~~121
~~12321
~1234321
123454321
PL/SQL procedure successfully completed.

P22. Write a program to print the following design :


declare
i number ;
j number;
n number;
k number;
m number;
begin
n := &n;
for i in 1..n loop
for j in 1..n-i loop
dbms_output.put('~');
end loop;
for k in 1..i loop
dbms_output.put(k);
end loop;
for k in reverse 1..i-1 loop
dbms_output.put(k);
end loop;
dbms_output.put_line(' ');
end loop;
for i in reverse 1..n-1 loop
for j in 1..n-i loop
dbms_output.put('~');
end loop;
for k in 1..i loop
dbms_output.put(k);
end loop;
for k in reverse 1. . i-1 loop
dbms_output.put(k);
end loop;
dbms_output.put_line(' ');
end loop;
end;
Enter value for n: 5
old 8: n:=&n;
new 8: n:=5;
~~~~1
~~~121
~~12321
~1234321
123454321
~1234321
~~12321
~~~121
~~~~1
PL/SQL procedure successfully completed.

PROGRAM BASED ON FOR & IF

P23. GENERATE ODD NOS: FROM 1 TO 10 AND FIND ITS SUM.


DECLARE
I NUMBER(4);
S NUMBER(4):=0;
BEGIN
FOR I IN 1..10 LOOP
IF MOD(I,2) <> 0 THEN
S := S+I;
DBMS_OUTPUT.PUT_LINE(I);
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE(' THE SUM OF ODD NOS FROM 1 TO 10 = ' ||S);
END;
SQL>/
1
3
5
7
9
THE SUM OF ODD NOS FROM 1 TO 10 = 25
PL/SQL procedure successfully completed.
P24 . WRITE A PROGRAM TO ALL ODD NUMBERS FORM 10 TO 1 IN REVERSE ORDER.
declare
i number(5);
n number(5);
v number(5);
s number(5) :=0;
begin
S := &STARTING_NUMBER;
n := &terminal_number;
for i in REVERSE S .. N loop
IF MOD (I,2) <>0 THEN
s := s + I;
dbms_output.put_line(I);
end loop;
dbms_output.put_line('the sum of numbers from 2 to '||n||' = ' ||s);
end;
Enter value for starting number : 1
Old 6: s=&starting_number:1
New 6: s:=1;
Enter value for Terminal_number: 10
old 7: n := &terminal_number;
new 7: n:=10;
9
7
5
3
1
The sum of numbers from 1 to 9 = 25
PL / SQL procedure successfully completed.
P25. Write a program to check the given no: is prime or not:
declare
n number;
i number;
pr number(2):=1;
begin
n:= &n;
for i in 2..n/2 loop
if mod(n,i) = 0 then
pr := 0;
end if;
end loop;
if pr = 1 then
dbms_output.put_line(' the given no: is prime: '||n);
else
dbms_output.put_line(' the given no: is not prime: '||n);
end if;
end;
Enter value for n: 7
old 6: n:=&n;
new 6: n:=7;
the given no: is prime: 7
PL/SQL procedure successfully completed.
SQL> /
Enter value for n: 25
old 6: n:=&n;
new 6: n:=25;
the given no: is not prime: 25
PL/SQL procedure successfully completed.
P26. WRITE A PROGRAM TO PRINT ASCII TABLE :
DECLARE
I NUMBER;
BEGIN
FOR I IN 33..256 LOOP
DBMS_OUTPUT.PUT (( TO_CHAR (I,'000')) || ':' || CHR(I) || ' ' );
IF MOD (I, 8) = 0 THEN
DBMS_OUTPUT.PUT_LINE(' ');
END IF;
END LOOP;
END;
033:! 034:" 035:# 036:$ 037:% 038:& 039:' 040:(
041:) 042:* 043:+ 044:, 045:- 046:. 047:/ 048:0
049:1 050:2 051:3 052:4 053:5 054:6 055:7 056:8
249:ù 250:ú 251:û 252:ü 253:ý 254:þ 255:ÿ 256:
:: :: :: :: :: ::
:: :: :: :: :: ::
PL/SQL procedure successfully completed.

P27. Write a program to generate prime nos from 1 to 10:


declare
n number;
i number;
pr number;
begin
for n in 1..10 loop
pr:=1;
for i in 2 .. n/2 loop
if mod(n,i) = 0 then
pr := 0;
end if;
end loop;
if pr = 1 then
dbms_output.put_line(n);
end if;
end loop;
end;
1
2
3
5
7
P28 . Write a program to check the square root of a number is prime or not.
declare
n number;
i number;
pr number;
begin
pr := 1;
n := &n;
n := sqrt(n);
for i in 2 .. n/2 loop
if mod(n,i) = 0 then
pr := 0;
end if;
end loop;
if pr = 1 then
dbms_output.put_line('the square root of the given number is prime'||n*n);
else
dbms_output.put_line('the square root of the given number is not prime'||n*n);
end if;
end;
SQL> Enter value for n: 81
old 7: n:=&n;
new 7: n:=81;
The square root of the given number is not prime81
PL/SQL procedure successfully completed.
PROGRAM BASED ON LOOP... END LOOP

P29. Write a program to reverse the digits of the number:


DECLARE
N number ;
S NUMBER : = 0;
R NUMBER;
K number;
begin
N := &N;
K := N;
LOOP
EXIT WHEN N = 0 ;
S := S * 10;
R := MOD(N,10);
S := S + R;
N := TRUNC(N/10);
end loop;
dbms_output.put_line( ' THE REVERSED DIGITS ' || ' OF ' || K || ' = ' || S);
end;
Enter value for n: 4567
old 7: N:=&N;
new 7: N:=4567;
THE REVERSED DIGITS OF 4567 = 7654
PL/SQL procedure successfully completed.
PROGRAM BASED ON RECORDS

P30. WRITE PL/SQL SCRIPT TO CREATE A RECORD TYPE THAT CAN HOLD SALES IN 4 DIFFER
ENT QUARTERS.
Structure of the table :
SALES ( SNO, NAME, QUAD1, QUAD2, QUAD3, QUAD4 )
SALES2004 ( Q1, Q2, Q3, Q4 )

DECLARE
TYPE SALEREC IS RECORD
( Q1 NUMBER,
Q2 NUMBER,
Q3 NUMBER,
Q4 NUMBER,
) ;

BEGIN
SREC SALEREC ;
SELECT SUM(QUAD1) , SUM(QUAD2) , SUM(QUAD3), SUM(QUAD4) INTO SREC FROM SALES ;

INSERT INTO SALES2004 VALUES (SREC.Q1 ,SREC.Q2, SREC.Q3, SREC.Q4);


END;

PROGRAM BASED ON DATABASE INTERACTION


P31 . Write PL/SQL SCRIPT to determine the salary of employee in the EMP table.
If salary >7500 give an increment of 15% , otherwise display the message NO INCR
EMENT . Get the empno from the user.

DECLARE
ENO EMP.EMPNO%TYPE;
SALARY EMP.SAL%TYPE;
BEGIN
ENO := &ENO;
SELECT SAL INTO SALARY FROM EMP WHERE EMPNO=ENO;
IF SALARY >7500 THEN
UPDATE EMP SET SAL =SAL+SAL* 15/100 WHERE EMPNO=ENO;
ELSE
DBMS_OUTPUT.PUT_LINE(NO INCREMENT)
END IF;
END;

P32 . GIVEN A TABLE STUDENT ( SID INTEGER PRIMARY KEY, NAME CHAR(30), AGE INTEGE
R , GPA FLOAT ). WRITE A PL/SQL SCRIPT TO GO THROUGH SID 142-857 AND SET ALL GPA
UNDER 4.0 TO 4.0 .
DECLARE
TSID STUDENT.SID%TYPE;
TGPA STUDENT.GPA%TYPE;
BEGIN
TSID:=142;
LOOP
EXIT WHEN TSID > 857 ;
SELECT GPA INTO TGPA FROM STUDENT WHERE SID=TSID;
IF TGPA< 4.0 THEN
UPDATE STUDENT SET GPA=4.0 WHERE SID=TSID;
END IF;
TSID:=TSID+1;
END LOOP;
END;

P33 . DISPLAY AVERAGE SALARY , TOTOL NO: OF EMP, AND TOTAL SALARY FOR FIRST 5 DE
PARTMENTS IN EMP TABLE. DEPT NO ARE 10,20,30,40,5090.
DECLARE
DNO NUMBER:=10;
DPNAME DEPT. DNAME%TYPE;
ASAL EMP. SAL%TYPE;
ACOUNT NUMBER;
SSAL EMP. SAL%TYPE;
BEGIN
LOOP
EXIT WHEN DNO > 50;
SELECT DNAME INTO DPNAME FROM DEPT WHERE DEPTNO=DNO;
SELECT AVG(SAL), COUNT(*), SUM(SAL) INTO ASAL, ACOUNT,SSAL
FROM EMP WHERE DEPTNO = DNO;
DBMS_OUTPUT.PUT_LINE( DEPARTMENT NAME || DPNAME);
DBMS_OUTPUT.PUT_LINE( DEPARTMENT COUNT || ACOUNT);
DBMS_OUTPUT.PUT_LINE( AVERAGE SALARY || ASAL);
DBMS_OUTPUT.PUT_LINE( SUM SALARY || SSAL);
DNO := DNO+10;
END LOOP;
END;

P34. WRITE A PL/SQL SCRIPT TO COUNT THE NO: OF EMPLOYEES. IF TOTAL <10 DISPLAY S
MALL COMPANY, ELSE IF TOTAL BETWEEN 10-50 DISPLAY MEDIUM ELSE DISPLAY LARGE .
DECLARE
TOT NUMBER (3);
BEGIN
SELECT COUNT(*) INTO TOT FROM EMP;
IF TOT <10 THEN
TEXT := SMALL ;
ELSIF TOT<50 THEN
TEXT := MEDIUM;
ELSE
TEXT := LARGE;
END IF;
DBMS_OUTPUT.PUT_LINE( TEXT || COMPANY);
END;

P35. Find the employee drawing minimum salary. Add his details like empno, name,
sal into the table newsal, after incrementing Rs.700.
DECLARE
ENO EMP.EMPNO%TYPE;
NAME EMP.ENAME%TYPE;
SALARY EMP.SAL%TYPE;
BEGIN
SELECT EMPNO, ENAME, SAL INTO ENO, NAME, SALARY
FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);
SALARY := SALARY+700;
INSERT INTO NEWSAL VALUES ( ENO,NAME,SALARY);
END;
P36. Write a program to update the salary of the employee by 25% if he earns sal
ary >4000, otherwise if salary <4000 update by 10%, else update by 15%.
DECLARE
S NUMBER(8,2) ;
NAME VARCHAR2(10);
BEGIN
NAME:=&NAME;
SELECT SAL INTO S FROM EMP WHERE ENAME = NAME;
IF S >4000 THEN
UPDATE EMP SET SAL := SAL+SAL*20/100 WHERE ENAME=NAME;
ELSIF S<4000
UPDATE EMP SET SAL := SAL+SAL*10/100 WHERE ENAME=NAME;
ELSE
UPDATE EMP SET SAL := SAL+SAL*15/100 WHERE ENAME=NAME;
END IF;
END;
P37 .Write PL/SQL code to increase the sal of an employee by 5% whose salary is
more than 4000 . Get the empno from the user.
DECLARE
ENO NUMBER(4);
BEGIN
ENO := &ENO;
UPDATE EMP SET SAL =SAL+SAL*5/100 WHERE SAL>4000 AND EMPNO=ENO;
END;

P38. GIVEN A TABLE TEMP ( SNO NUMBER(3) , DNO NUMBER,TEXT CHAR (4) . WRITE A PL/
SQL SCRIPT TO INSERT 10 RECORDS IN TABLE TEMP AS PER THE FOLLOWING SPECIFICATION
S:
SNO DNO TEXT
1 50 ODD
2 100 EVEN
3 150 ODD
DECLARE
SNO NUMBER := 1;
DNO NUMBER ;
TEXT CHAR(5) ;
BEGIN
LOOP
EXIT WHEN SNO > 10;
DNO := SNO * 50;
IF MOD ( SNO, 2 ) = 0
TEXT := EVEN;
ELSE
TEXT := ODD;
INSERT INTO TEMP VALUES (SNO,DNO,TEXT);
SNO := SNO + 1;
END LOOP;
COMMIT;
END;

P39 . Write PL/SQL code to DELETE the record of an employee whose salary is more
than 4000 . Get the empno from the user.

DECLARE
ENO NUMBER(4);
BEGIN
ENO := &ENO;
DELETE FROM EMP WHERE SAL>4000 AND EMPNO=ENO;
END;

P40 .Write PL/SQL code to insert a new record in the table emp after obtaining v
alues ( empno, ename, hiredate, sal ) from user.
declare
tempno number(4);
tename varchar(10);
thiredate varchar2(12);
tsal number(7,2);
begin
tempno :=&tempno;
tename :='&tename';
thiredate :='&thiredate';
tsal := &tsal;
insert into emp (empno,ename,hiredate,sal) values(tempno,tename,to_date(thiredat
e,'DD-mon-yyyy'),tsal);
end;
Enter value for tempno: 8000
old 7: tempno:=&tempno;
new 7: tempno:=8000;
Enter value for tename: mathew
old 8: tename :='&tename';
new 8: tename :='mathew';
Enter value for thiredate: 10-jan-2004
old 9: thiredate :='&thiredate';
new 9: thiredate :='10-jan-2004';
Enter value for tsal: 8000
old 10: tsal := &tsal;
new 10: tsal := 8000;
PL/SQL procedure successfully completed.

P41. WRITE A PROGRAM TO CREATE A EMP %ROWTYPE RECORD .ACCEPT THE EMPNO FROM THE
USER, AND DISPLAY ALL THE INFORMATION ABOUT THE EMPLOYEE.
declare
erec emp%rowtype;
eno emp.empno%type;
begin
eno := &eno;
select * into erec from emp where empno=eno;
dbms_output.put_line( 'Emp no : '||erec.empno) ;
dbms_output.put_line( 'Name : '||erec.ename) ;
dbms_output.put_line( 'Salary : '||erec.sal);
dbms_output.put_line( 'Deptno : '||erec.deptno);
dbms_output.put_line( 'hiredate: '||erec.hiredate);
dbms_output.put_line( 'job : '||erec.job);
end;
SQL> /
Enter value for eno: 7788
old 5: eno := &eno;
new 5: eno := 7788;
Emp no : 7788
Name : SCOTT
Salary : 1452
Deptno : 20
hiredate: 19-APR-87
job : ANALYST
PL/SQL procedure successfully completed.

PROGRAM BASED ON EXCEPTION


P42. Write PL/SQL script that traps an invalid data type value given and display
s a custom error message.
DECLARE
ENO EMP. EMPNO%TYPE;
SNO VARCHAR2(5);
NAME EMP.ENMAE%TYPE;
BEGIN
SNO := &SNO ;
SELECT EMPNO,ENAME INTO ENO,NAME FROM EMP WHERE EMPNO=SNO;
DBMS_OUTPUT.PUT_LINE ( NAME || ENAME || EMPNO ||EMPNO);
EXCEPTION
WHEN INVALID_NUMBER THEN
DBMS_OUTPUT.PUT_LINE(SNO||IS INVALID DATA FOR EMPLOYEE ID);
END;

PROGRAM BASED ON FUNCTIONS


P43 . write a function to create factorial of a number.
CREATE OR REPLACE FUNCTION FACT (N NUMBER)
RETURN NUMBER
IS
I NUMBER(10);
F NUMBER :=1;
BEGIN
FOR I IN 1.. N LOOP
F:= F*I;
END LOOP;
RETURN F;
END;
SQL> /
Function created.
SQL> select fact(8) from dual;
FACT(8)
---------
40320

PROGRAM BASED ON PROCEDURES


P44. Write a Procedure to increase the salary for all the employees in the EMP t
able :
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- ---------- --------- --------- --------- --------- --------- ---------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
14 rows selected.
SQL> create or replace procedure inc(i number)
is
begin
update emp set sal =sal+i;
end;
/
Procedure created.
To execute the procedures in the PL/SQL block:
SQL> declare
begin
inc(100);
end;
/
PL/SQL procedure successfully completed.
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1700 300 30
14 rows selected.

P45. WRITE A PROCEDURE TO INCREASE THE SALARY FOR THE SPECIFIED EMPLOLEE
USING EMPNO IN THE EMP TABLE BASED ON THE FOLLOWING CRITERIA: INCREASE THE SALAR
Y BY 5% FOR CLERKS, 7% FOR SALESMAN , 10% FOR ANALYST, 20 % FOR MANAGER and 25%
FOR PRESIDENT. ACTIVATE USING PL/SQL BLOCK.
SQL> SELECT * FROM EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPT
7369 SMITH CLERK 7902 17-DEC-80 800 20

CREATE OR REPLACE PROCEDURE DESIGNATION(ENO NUMBER)


IS
BEGIN
UPDATE EMP SET SAL=SAL+SAL*5/100 WHERE JOB ='CLERK' AND EMPNO=ENO;
UPDATE EMP SET SAL=SAL+SAL*7/100 WHERE JOB='SALESMAN' AND EMPNO=ENO;
UPDATE EMP SET SAL=SAL+SAL*10/100 WHERE JOB='ANALYST' AND EMPNO=ENO;
UPDATE EMP SET SAL=SAL+SAL*20/100 WHERE JOB='MANAGER' AND EMPNO=ENO;
UPDATE EMP SET SAL=SAL+SAL*25/100 WHERE JOB='PRESIDENT' AND EMPNO=ENO;
END;
SQL> /
Procedure created.
SQL> DECLARE
2 BEGIN
3 DESIGNATION(7369);
4 END;
5 /
PL/SQL procedure successfully completed.
SQL> SELECT * FROM EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPT
7369 SMITH CLERK 7902 17-DEC-80 840 20

PROGRAM BASED ON TRIGGERS


Posted 45 programs

Enter supporting content here

Das könnte Ihnen auch gefallen