0% found this document useful (0 votes)
82 views

DBMS Rest

The document contains PL/SQL code snippets to: 1) Create triggers to validate employee salary updates and prevent reductions 2) Write a procedure to increase all employee salaries by 5% 3) Write procedures to get user input for an employee number and delete their record if salary is below a threshold, or calculate areas of geometric shapes like circles and triangles.

Uploaded by

Sam Sakhare
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
82 views

DBMS Rest

The document contains PL/SQL code snippets to: 1) Create triggers to validate employee salary updates and prevent reductions 2) Write a procedure to increase all employee salaries by 5% 3) Write procedures to get user input for an employee number and delete their record if salary is below a threshold, or calculate areas of geometric shapes like circles and triangles.

Uploaded by

Sam Sakhare
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 19

Sameer Sakhare

Roll No.: 45

5. Create the following triggers by considering EMP & Dept. table.


1. Stop the transaction if the salary entered by the user exceeds 10000 in the table EMP.

//trig1.sql

create or replace trigger sal_change1


before insert or update on emp2
for each row
when (new.sal>10000)
begin
RAISE_APPLICATION_ERROR(-20001,'THE SALARY GIVEN IS GREATER THAN 10000.');
END sal_change1;

SQL> @trig1
8 /

Trigger created.

SQL> insert into emp2 values(1,'Sam','Analyst','2','4-dec-1999',35000,NULL,4);


insert into emp2 values(1,'Sam','Analyst','2','4-dec-1999',35000,NULL,4)
*
ERROR at line 1:
ORA-20001: THE SALARY GIVEN IS GREATER THAN 10000.
ORA-06512: at "SCOTT.SAL_CHANGE1", line 2
ORA-04088: error during execution of trigger 'SCOTT.SAL_CHANGE1'
Sameer Sakhare
Roll No.: 45

2. Create a trigger for update of a column sal in table EMP which ensured that salary cannot

reduce.

SQL> select * from emp2;

ENO ENAME JOB MGR HIREDATE


---------- --------------- ---------- ---------- ---------------------------------------
3 Yajnesh Tester 2 10-DEC-20 04.00.00.000000 AM
4 Allan Salesman 1 12-FEB-20 05.00.00.000000 AM
7 Zakhaev Tester 6 20-MAR-20 07.00.00.000000 AM
9 Psycho Salesman 8 25-MAR-20 10.00.00.000000 AM
11 Pravin Training 10 17-JUL-20 06.00.00.000000 AM
13 Lokesh Salesman 2 25-NOV-20 09.00.00.000000 AM

6 rows selected.

//trig2.sql

create or replace trigger sal_change


before update on emp2
for each row
when (new.sal<old.sal)
begin
RAISE_APPLICATION_ERROR(-20001,'THE SALARY GIVEN IS LESS THAN OLD SALARY.');
END sal_change;

SQL> @trig2
8 /
Trigger created.

SQL> update emp2 set sal=200 where eno='9';


update emp2 set sal=200 where eno='9'
*
ERROR at line 1:
ORA-20001: THE SALARY GIVEN IS LESS THAN OLD SALARY.
ORA-06512: at "SCOTT.SAL_CHANGE", line 2
ORA-04088: error during execution of trigger 'SCOTT.SAL_CHANGE'
Sameer Sakhare
Roll No.: 45

3. Create a trigger that prints the change in salary every time sal of employee is changed.

//trig3.sql
create or replace trigger print_salary

before delete or insert or update on emp2


for each row when(new.eno>0)

begin
dbms_output.put(:old.sal);

dbms_output.put(:new.sal);
dbms_output.put(:new.sal - :old.sal);

endprint_salary;

//trig4.sql
create or replace trigger after_ins_emp

after insert on emp2


for each row

when (new.sal>25000)
begin

:new.sal:=2000;
END after_ins_emp;

SQL> Insert into emp2 values(1,'Sam','Analyst','2','4-dec-1999',10000,NULL,4);

1 row created.

SQL> select * from emp2;

ENO ENAME JOB MGR HIREDATE


---------- --------------- ---------- ---------- -------------------------------------
1 Sam Analyst 2 04-DEC-99 12.00.00.000000 AM
3 Yajnesh Tester 2 10-DEC-20 04.00.00.000000 AM
4 Allan Salesman 1 12-FEB-20 05.00.00.000000 AM
7 Zakhaev Tester 6 20-MAR-20 07.00.00.000000 AM
9 Psycho Salesman 8 25-MAR-20 10.00.00.000000 AM
11 Pravin Training 10 17-JUL-20 06.00.00.000000 AM
13 Lokesh Salesman 2 25-NOV-20 09.00.00.000000 AM

7 rows selected.
Sameer Sakhare
Roll No.: 45

6. Write down the PL/SQL code for the following

1. Write a PLSQL code to increase salary of an employee by 5%.

//pls1.sql

DECLARE var_rows number(5);


BEGIN
UPDATE emp2
SET sal = sal + (sal*0.05);
IF SQL%NOTFOUND THEN
dbms_output.put_line('None of the salaries were updated');
ELSIF SQL%FOUND THEN
var_rows := SQL%ROWCOUNT;
dbms_output.put_line('Salaries for ' || var_rows || ' employees are updated');
END IF;
END;

SQL> @pls1;
12 /
Salaries for 15 employees are updated

PL/SQL procedure successfully completed.

SQL> select * from emp2;

ENO ENAME JOB MGR HIREDATE


---------- --------------- ---------- ---------- ---------------------------------------------
1 Sam Analyst 2 04-DEC-99 12.00.00.000000 AM
2 Ashutosh Programmer 1 08-APR-20 01.00.00.000000 AM
3 Yajnesh Tester 2 10-DEC-20 04.00.00.000000 AM
4 Allan Salesman 1 12-FEB-20 05.00.00.000000 AM
5 Nomad Manager 02-JAN-00 12.00.00.000000 AM
6 Romit Designer 2 15-OCT-20 01.00.00.000000 AM
7 Zakhaev Tester 6 20-MAR-20 07.00.00.000000 AM
8 Ancy Programmer 1 09-MAY-20 04.00.00.000000 AM
9 Psycho Salesman 8 25-MAR-20 10.00.00.000000 AM
10 Sameer Designer 6 14-JAN-00 12.00.00.000000 AM
11 Pravin Training 10 17-JUL-20 06.00.00.000000 AM

ENO ENAME JOB MGR HIREDATE


---------- --------------- ---------- ---------- ---------------------------------------------
12 Yerli Analyst 1 11-SEP-20 08.00.00.000000 AM
13 Lokesh Salesman 2 25-NOV-20 09.00.00.000000 AM
14 Ezio Manager 10-JUL-99 12.00.00.000000 AM
15 Altair Programmer 12 08-AUG-20 03.00.00.000000 AM

15 rows selected.
Sameer Sakhare
Roll No.: 45

2. Write PLSQL script to obtain an empno from user. If his salary is less than 900, then delete

record from table.


//pls2.sql
declare
empno number(10);
begin
empno:=&empno;
delete from emp2 where SAL>20000 and EMPNO='&EMPNO';
end;

SQL> select * from emp2;

ENO ENAME JOB MGR HIREDATE


---------- --------------- ---------- ---------- -------------------------------------
1 Sam Analyst 2 04-DEC-99 12.00.00.000000 AM
2 Ashutosh Programmer 1 08-APR-20 01.00.00.000000 AM
3 Yajnesh Tester 2 10-DEC-20 04.00.00.000000 AM
4 Allan Salesman 1 12-FEB-20 05.00.00.000000 AM
5 Nomad Manager 02-JAN-00 12.00.00.000000 AM
6 Romit Designer 2 15-OCT-20 01.00.00.000000 AM
7 Zakhaev Tester 6 20-MAR-20 07.00.00.000000 AM
8 Ancy Programmer 1 09-MAY-20 04.00.00.000000 AM
9 Psycho Salesman 8 25-MAR-20 10.00.00.000000 AM
10 Sameer Designer 6 14-JAN-00 12.00.00.000000 AM
11 Pravin Training 10 17-JUL-20 06.00.00.000000 AM

ENO ENAME JOB MGR HIREDATE


---------- --------------- ---------- ---------- -------------------------------------
12 Yerli Analyst 1 11-SEP-20 08.00.00.000000 AM
13 Lokesh Salesman 2 25-NOV-20 09.00.00.000000 AM
14 Ezio Manager 10-JUL-99 12.00.00.000000 AM
15 Altair Programmer 12 08-AUG-20 03.00.00.000000 AM

15 rows selected.

SQL> @pls2;
7 /
Enter value for empno: 9
old 4: empno:=&empno;
new 4: empno:=9;
Enter value for empno: 9
old 5: delete from emp2 where SAL>20000 and EMPNO='&EMPNO';
new 5: delete from emp2 where SAL>20000 and EMPNO='9';

PL/SQL procedure successfully completed.


Sameer Sakhare
Roll No.: 45

3. Write PLSQL script to find out the area of circle and area of triangle (1/2*b*h & hero’s formula).

Circle:
SQL> declare
2 rad number;
3 area number;
4 begin
5 rad := &r;
6 area := 3.14 * rad* rad;
7 DBMS_oUTPUT.PUT_LINE('Area of circle is : '||area);
8 end;
9 /

Output:
Enter value for r: 5
old 5: rad := &r;
new 5: rad := 5;
Area of circle is : 78.5
PL/SQL procedure successfully completed.

Traingle:
SQL> declare
2 b number;
3 h number;
4 area number;
5 begin
6 b := &base;
7 h := &hight;
8 area := 0.5 * b* h;
9 DBMS_oUTPUT.PUT_LINE('Area of Triangle is : '||area);
10 end;
11 /

Output:
Enter value for base: 10
old 6: b := &base;
new 6: b := 10;
Enter value for hight: 5
old 7: h := &hight;
new 7: h := 5;
Area of Triangle is : 25
PL/SQL procedure successfully completed.
Sameer Sakhare
Roll No.: 45

Triangle [ Hero’s Formula ]:


SQL> declare
2 b number;
3 a number;
4 c number;
5 s number;
6 area float;
7 begin
8 a:=&a1;
9 b:=&b1;
10 c:=&c1;
11 s :=a+b+c/2;
12 area := sqrt(s*(s-a)*(s-b)*(s-c));
13 DBMS_oUTPUT.PUT_LINE('Area of Triangle is : '||area);
14 end;
15 /

Output:
Enter value for a1: 2
old 8: a:=&a1;
new 8: a:=2;
Enter value for b1: 3
old 9: b:=&b1;
new 9: b:=3;
Enter value for c1: 5
old 10: c:=&c1;
new 10: c:=5;
Area of Triangle is : 21.54210992451760747443979300582098494332
PL/SQL procedure successfully completed.
SQL> spool off
Sameer Sakhare
Roll No.: 45

4. Write PLSQL script to find out the percentage & grade of a student . User should be able to input

marks in 5 subjects.

//pls4.sql

DECLARE
m1 Number(2);
m2 Number(2);
m3 Number(2);
m4 Number(2);
m5 Number(2);
total Number(4);
perc Number(2);
grade varchar2(2);
BEGIN
m1:=&Marks1;
m2:=&Marks2;
m3:=&Marks3;
m4:=&Marks4;
m5:=&Marks5;
total:=m1+m2+m3+m4+m5;
perc:=total/5;
IF perc>90
THEN
grade:='A+';
ELSIF perc>80 AND perc<90
THEN
grade:='A';
ELSIF perc>70 AND perc<80
THEN
grade:='B+';
ELSIF perc>60 AND perc<70
THEN
grade:='B';
ELSIF perc>50 AND perc<60
THEN
grade:='C+';
ELSIF perc>35 AND perc<50
THEN
grade:='C';
ELSIF perc<35
THEN
grade:='D';
END IF;
DBMS_OUTPUT.PUT_LINE('Percentage : '||perc);
Sameer Sakhare
Roll No.: 45

DBMS_OUTPUT.PUT_LINE('Grade : '||grade);
END;
SQL> @pls4
43 /
Enter value for marks1: 70
old 11: m1:=&Marks1;
new 11: m1:=70;
Enter value for marks2: 82
old 12: m2:=&Marks2;
new 12: m2:=82;
Enter value for marks3: 75
old 13: m3:=&Marks3;
new 13: m3:=75;
Enter value for marks4: 89
old 14: m4:=&Marks4;
new 14: m4:=89;
Enter value for marks5: 69
old 15: m5:=&Marks5;
new 15: m5:=69;
Percentage : 77
Grade : B+

PL/SQL procedure successfully completed.


Sameer Sakhare
Roll No.: 45

5. Write PLSQL script to print the table of a number.

//pls5.sql
DECLARE
num Number(2);
i Number(2);
res Number(3);
BEGIN
num:=&Number;
DBMS_OUTPUT.PUT_LINE('Tables of '||num||':');
FOR i IN 1..10
LOOP
res:=num*i;
DBMS_OUTPUT.PUT_LINE(num||'*'||i||'='||res);
END LOOP;
END;

SQL> @pls5
15 /
Enter value for number: 6
old 6: num:=&Number;
new 6: num:=6;
Tables of 6:
6*1=6
6*2=12
6*3=18
6*4=24
6*5=30
6*6=36
6*7=42
6*8=48
6*9=54
6*10=60

PL/SQL procedure successfully completed.


Sameer Sakhare
Roll No.: 45

6. Write PLSQL script to perform mathematical operation on 2 numbers . User should be able to

input 2 numbers along with the operator to be used.

DECLARE
num1 number(3);
num2 number(3);
num3 number(3);
chvarchar(2);

BEGIN

num1:=&number1;
num2:=&number2;
ch:='&choice';

if(ch='+')
then
num3:=num1+num2;

elsif(ch='-')
then
num3:=num1-num2;

elsif(ch='/')
then
num3:=num1/num2;

elsif(ch='*')
then
num3:=num1*num2;

else
DBMS_OUTPUT.PUT_LINE('Invalid Choice');

END IF;

DBMS_OUTPUT.PUT_LINE('Answer = '||num3);

END;
/
Sameer Sakhare
Roll No.: 45

SQL> @pls6
Enter value for number1: 5
old 10: num1:=&number1;
new 10: num1:=5;
Enter value for number2: 8
old 11: num2:=&number2;
new 11: num2:=8;
Enter value for choice: +
old 12: ch:='&choice';
new 12: ch:='+';
Answer = 13

PL/SQL procedure successfully completed.


Sameer Sakhare
Roll No.: 45

7. Write PLSQL scripts to find the largest of 2,3 numbers.

2 Numbers
DECLARE
b number;
a number;
BEGIN
a:=&a1;
b:=&b1;
if a > b
then
DBMS_oUTPUT.PUT_LINE('Max between two is : '||a);
else
DBMS_oUTPUT.PUT_LINE('Max between two is : '||b);
end if;
end;
/

SQL> @pls7
Enter value for a1: 5
old 5: a:=&a1;
new 5: a:=5;
Enter value for b1: 9
old 6: b:=&b1;
new 6: b:=9;
Max between two is : 9

PL/SQL procedure successfully completed.

3 Numbers

DECLARE
b number;
a number;
c number;

BEGIN
a:=&a1;
b:=&b1;
c:=&c1;

if a > b
then
DBMS_OUTPUT.PUT_LINE('Max between three is : ' ||a);
elsif b > c
then
Sameer Sakhare
Roll No.: 45

DBMS_OUTPUT.PUT_LINE('Max between three is : ' ||b);


elsif c > a
then
DBMS_OUTPUT.PUT_LINE('Max between three is : ' ||c);
end if;
end;

SQL> @pls8
22 /
Enter value for a1: 21
old 7: a:=&a1;
new 7: a:=21;
Enter value for b1: 66
old 8: b:=&b1;
new 8: b:=66;
Enter value for c1: 55
old 9: c:=&c1;
new 9: c:=55;
Max between three is : 66

PL/SQL procedure successfully completed.


Sameer Sakhare
Roll No.: 45

8. Write down a PL/SQL code to INSERT, UPDATE, DELETE and QUERY data in tablesof your

database.

SQL> select * from dept2;

DEPTNO DNAME LOCATION


---------- --------------- -------------------------
1 HR Mumbai
2 Design Pune
3 Sales Banglore
4 Coding Chennai
5 Testing Delhi
6 Purchase Gujrat
7 Support Punjab

7 rows selected.

INSERT
// ins.sql
Declare

DID varchar2(10);
DNAME varchar2(10);
DLOC varchar2(10);

Begin

DID := '&DID';
DNAME := '&DNAME';
DLOC := '&DLOC';
insert into dept2
values (DID,DNAME,DLOC) ;
end;

SQL>@ins
12 /
Enter value for did: 8
old 6: DID := '&DID';
new 6: DID := '8';
Enter value for dname: Finance
old 7: DNAME := '&DNAME';
new 7: DNAME := 'Finance';
Enter value for dloc: Madras
old 8: DLOC := '&DLOC';
new 8: DLOC := 'Madras';
Sameer Sakhare
Roll No.: 45

PL/SQL procedure successfully completed.


SQL> select * from dept2;

DEPTNO DNAME LOCATION


---------- --------------- -------------------------
1 HR Mumbai
2 Design Pune
3 Sales Banglore
4 Coding Chennai
5 Testing Delhi
6 Purchase Gujrat
7 Support Punjab
8 Finance Madras

8 rows selected.

UPDATE
//upd.sql

Declare

DID varchar2(10);

Begin

UPDATE dept2
SET deptno='10'
WHERE dname='Finance';
end;

SQL> @upd
8 /
PL/SQL procedure successfully completed.

SQL> select * from dept2;

DEPTNO DNAME LOCATION


---------- --------------- -------------------------
1 HR Mumbai
2 Design Pune
3 Sales Banglore
4 Coding Chennai
5 Testing Delhi
6 Purchase Gujrat
7 Support Punjab
10 Finance Madras

8 rows selected.
Sameer Sakhare
Roll No.: 45

DELETE
//del.sql

declare
DID varchar2(10);
begin
DELETE from dept2
WHERE deptno='10';
end;

SQL>@del
7 /

PL/SQL procedure successfully completed.

SQL> select * from dept2;

DEPTNO DNAME LOCATION


---------- --------------- -------------------------
1 HR Mumbai
2 Design Pune
3 Sales Banglore
4 Coding Chennai
5 Testing Delhi
6 Purchase Gujrat
7 Support Punjab

7 rows selected.
Sameer Sakhare
Roll No.: 45

10.Write down the SQL commands for the following

1. To grant all privileges to user m13 on table employee.

UserLogin: m46
SQL> grant all on employee to m54;

Grant succeeded.
UserLogin: m54

SQL> select * from m46.employee;


EMPNO ENAME JOB SAL COMM MGR DEPTID

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


101 Shraddha Salesman 5000 1200 1 1

104 Ketan Clerk 25000 1200 1 1

2. To grant all privileges to user m48 on table EMPLOYEE1 with grant option
UserLogin: m54

SQL> grant all on m46.employee1 to m39 with grant option;


Grant succeeded.

UserLogin: m39
SQL> select * from m46.employee1;

EMPNO ENAME JOB SAL COMM MGR DEPTID


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

101 Shraddha Salesman 5000 1200 1 1


102 Sandhya Salesman 25000 1200 1 1

104 Ketan Clerk 25000 1200 1 1

3. Grant SELECT, UPDATE,DELETE on EMPLOYEE1 to m13


UserLogin:m46

SQL> grant select, update, delete on employee1 to m54;


Grant succeeded.

UserLogin:m54
SQL> select * from m46.employee1;

EMPNO ENAME JOB SAL COMM MGR DEPTID


Sameer Sakhare
Roll No.: 45

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

101 Shraddha Salesman 5000 1200 1 1


102 Sandhya Salesman 25000 1200 1 1

104 Ketan Clerk 25000 1200 1 1


SQL> update employee1

2 set MGR='2'
3 where EMPNO='102';

1 row updated.
SQL> select * from m46.employee1;

EMPNO ENAME JOB SAL COMM MGR DEPTID


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

101 Shraddha Salesman 5000 1200 1 1


102 Sandhya Salesman 25000 1200 2 1

SQL> delete from m46.employee1

2 where empno='102';
1 row deleted

SQL> select * from m46.employee1;


EMPNO ENAME JOB SAL COMM MGR DEPTID

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


101 Shraddha Salesman 5000 1200 1

4. To Revoke all privileges to user m13 on table EMPLOYEE1.

UserLogin:m46
SQL> revoke all on employee1 from m54;

Revoke succeeded.

5. To Revoke SELECT, UPDATE, DELETE on EMPLOYEE1 from m13.


UserLogin:m46

SQL> revoke select, update, insert on employee1 from m54;


Revoke succeeded.

You might also like