Question Bank Ip Dbms Plsql

54
PL / SQL PROGRAMS Last updated on Friday March 27, 17:51:58 GMT+0530 2009 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.

Transcript of Question Bank Ip Dbms Plsql

Page 1: Question Bank Ip Dbms Plsql

PL / SQL PROGRAMS

Last updated on Friday March 27, 17:51:58 GMT+0530 2009

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) ;

Page 2: Question Bank Ip Dbms Plsql

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.

Page 3: Question Bank Ip Dbms Plsql

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 greater than its perimeter or not .

declare

l number;

b number;

ar number;

pr number;

begin

l := &l;

b := &b;

Page 4: Question Bank Ip Dbms Plsql

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

Page 5: Question Bank Ip Dbms Plsql

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

Page 6: Question Bank Ip Dbms Plsql

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

Page 7: Question Bank Ip Dbms Plsql

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

Page 8: Question Bank Ip Dbms Plsql

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% compounded annually.

Page 9: Question Bank Ip Dbms Plsql

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% compounded annually.

Given the amount deposited and the number of years , Write a program to calculate 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

Page 10: Question Bank Ip Dbms Plsql

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

Page 11: Question Bank Ip Dbms Plsql

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 Greatest.

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;

Page 12: Question Bank Ip Dbms Plsql

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);

Page 13: Question Bank Ip Dbms Plsql

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 RESULT.

declare

a number(3) ;

b number(3) ;

c number(3) ;

op char(1) ;

begin

a := &a ;

b := &b ;

op := &op ;

Page 14: Question Bank Ip Dbms Plsql

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.

Page 15: Question Bank Ip Dbms Plsql

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'

Page 16: Question Bank Ip Dbms Plsql

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

Page 17: Question Bank Ip Dbms Plsql

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

Page 18: Question Bank Ip Dbms Plsql

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);

Page 19: Question Bank Ip Dbms Plsql

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;

Page 20: Question Bank Ip Dbms Plsql

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:

Page 21: Question Bank Ip Dbms Plsql

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

Page 22: Question Bank Ip Dbms Plsql

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 ANDREVERSE 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;

Page 23: Question Bank Ip Dbms Plsql

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 ;

Page 24: Question Bank Ip Dbms Plsql

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

Page 25: Question Bank Ip Dbms Plsql

~~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;

Page 26: Question Bank Ip Dbms Plsql

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.

Page 27: Question Bank Ip Dbms Plsql

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

Page 28: Question Bank Ip Dbms Plsql

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

Page 29: Question Bank Ip Dbms Plsql

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;

Page 30: Question Bank Ip Dbms Plsql

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.

Page 31: Question Bank Ip Dbms Plsql

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

Page 32: Question Bank Ip Dbms Plsql

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

Page 33: Question Bank Ip Dbms Plsql

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 DIFFERENT QUARTERS.

Structure of the table :

Page 34: Question Bank Ip Dbms Plsql

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 INCREMENT . 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;

Page 35: Question Bank Ip Dbms Plsql

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 INTEGER , 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;

Page 36: Question Bank Ip Dbms Plsql

P33 . DISPLAY AVERAGE SALARY , TOTOL NO: OF EMP, AND TOTAL SALARY FOR FIRST 5 DEPARTMENTS 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 SMALL COMPANY, ELSE IF TOTAL BETWEEN 10-50 DISPLAY MEDIUM ELSE DISPLAY LARGE .

DECLARE

Page 37: Question Bank Ip Dbms Plsql

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 salary >4000,

Page 38: Question Bank Ip Dbms Plsql

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 SPECIFICATIONS:

SNO DNO TEXT

Page 39: Question Bank Ip Dbms Plsql

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

Page 40: Question Bank Ip Dbms Plsql

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 values ( 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(thiredate,'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';

Page 41: Question Bank Ip Dbms Plsql

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

Page 42: Question Bank Ip Dbms Plsql

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 displays 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;

Page 43: Question Bank Ip Dbms Plsql

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 table :

SQL> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

--------- ---------- --------- --------- --------- --------- --------- ---------

Page 44: Question Bank Ip Dbms Plsql

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

Page 45: Question Bank Ip Dbms Plsql

THE SALARY 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

Page 46: Question Bank Ip Dbms Plsql