Professional Documents
Culture Documents
1. Write a PL/SQL stored Procedure for following requirements and call the
procedure in appropriate PL/SQL block. 1. Borrower(Rollin, Name, DateofIssue,
NameofBook, Status) 2. Fine(Roll_no,Date,Amt) Accept roll_no &name of book from
user. Check the number of days (from date of issue), if days are between 15 to 30
then fine amount will be Rs 5per day. If no. of days>30, per day fine will be Rs
50 per day & for days less than 30, Rs. 5 per day. After submitting the book,
status will change from I to R. If condition of fine is true, then details will be
stored into fine table.
CREATE TABLE Borrower298
(
rollin INT PRIMARY KEY,
Name VARCHAR(50),
DateofIssue DATE,
NameofBook VARCHAR(50),
status VARCHAR(50)
);
SELECT SYSDATE, DateofIssue INTO cdate, idate FROM Borrower298 WHERE rollin =
mroll AND NameofBook = bookname;
/
Output:
Table dropped.
Table dropped.
Table created.
SQL>
SQL> CREATE TABLE Fine298
2 (
3 Roll_no INT PRIMARY KEY,
4 currdate DATE,
5 Amt NUMBER(10)
6 );
Table created.
SQL>
SQL> INSERT INTO Borrower298 VALUES(1,'Sneha','12-jan-24','DSA','I');
1 row created.
1 row created.
1 row created.
1 row created.
SQL> CREATE OR REPLACE PROCEDURE calfine(day_count IN INT, fine OUT INT)
2 IS
3 BEGIN
4 IF day_count BETWEEN 15 AND 30 THEN
5 fine := 5 * day_count;
6 ELSIF day_count > 30 THEN
7 fine := 50 * day_count;
8 ELSE
9 fine := 5 * day_count;
10 END IF;
11 END calfine;
12 /
Procedure created.
SQL> DECLARE
2 mroll INT;
3 idate DATE;
4 cdate DATE;
5 bookname VARCHAR(50);
6 day_count INT;
7 fine INT;
8 BEGIN
9 mroll := &rollin;
10 bookname := '&NameofBook'; -- Using single quotes for VARCHAR variables
11
12 SELECT SYSDATE, DateofIssue INTO cdate, idate FROM Borrower298 WHERE
rollin = mroll AND NameofBook = bookname;
13
14 day_count := TRUNC(cdate) - TRUNC(idate);
15 DBMS_OUTPUT.PUT_LINE('day_count: ' || day_count);
16
17 calfine(day_count, fine);
18 DBMS_OUTPUT.PUT_LINE('day_count: ' || day_count);
19 DBMS_OUTPUT.PUT_LINE('fine: ' || fine);
20
21 INSERT INTO Fine298 VALUES(mroll, cdate, fine);
22 UPDATE Borrower298 SET status = 'R' WHERE rollin = mroll AND NameofBook =
bookname;
23 END;
24 /
Enter value for rollin: 1
old 9: mroll := &rollin;
new 9: mroll := 1;
Enter value for nameofbook: DSA
old 10: bookname := '&NameofBook'; -- Using single quotes for VARCHAR
variables
new 10: bookname := 'DSA'; -- Using single quotes for VARCHAR variables
SQL> /
Enter value for rollin: 2
old 9: mroll := &rollin;
new 9: mroll := 2;
Enter value for nameofbook: DBMS
old 10: bookname := '&NameofBook'; -- Using single quotes for VARCHAR
variables
new 10: bookname := 'DBMS'; -- Using single quotes for VARCHAR variables
PL/SQL procedure successfully completed.
SQL> /
Enter value for rollin: 3
old 9: mroll := &rollin;
new 9: mroll := 3;
Enter value for nameofbook: MA
old 10: bookname := '&NameofBook'; -- Using single quotes for VARCHAR
variables
new 10: bookname := 'MA'; -- Using single quotes for VARCHAR variables
DECLARE
macc INT;
mbranch VARCHAR(20);
mres VARCHAR(20);
BEGIN
macc:= &acc_no;
mbranch:='&branch_name';
mres:=fun(macc, mbranch);
DBMS_OUTPUT.PUT_LINE(mres);
END;
/
Output:
CREATE TABLE acc_details298
2 (
3 acc_no INT PRIMARY KEY,
4 branch_name VARCHAR(10),
5 status VARCHAR(10)
6 );
Table created.
SQL>
SQL> CREATE TABLE active_account
2 (
3 accno INT PRIMARY KEY,
4 branchname VARCHAR(10)
5 );
Table created.
SQL>
SQL> INSERT INTO acc_details298 VALUES(1234, 'Akurdi','A');
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
SQL> CREATE OR REPLACE FUNCTION fun(macc INT, mbranch VARCHAR)
2 RETURN VARCHAR
3 IS
4 mstatus VARCHAR(10);
5 BEGIN
6 SELECT status INTO mstatus FROM acc_details298 WHERE acc_no=macc AND
branch_name=mbranch;
7 IF mstatus='A'
8 THEN
9 INSERT INTO active_account VALUES (macc,mbranch);
10 RETURN 'Account is active';
11 ELSE
12 RETURN 'Account is Inactive';
13 END IF;
14 EXCEPTION
15 WHEN NO_DATA_FOUND THEN
16 RETURN 'ACCOUNT NO NOT FOUND';
17 END FUN;
18 /
Function created.
SQL>
SQL> DECLARE
2 macc INT;
3 mbranch VARCHAR(20);
4 mres VARCHAR(20);
5 BEGIN
6 macc:=&acc_no;
7 mbranch:='&branch_name';
8 mres:=fun(macc, mbranch);
9 DBMS_OUTPUT.PUT_LINE(mres);
10 END;
11 /
Enter value for acc_no: 1234
old 6: macc:=&acc_no;
new 6: macc:=1234;
Enter value for branch_name: Akurdi
old 7: mbranch:='&branch_name';
new 7: mbranch:='Akurdi';
Account is active
SQL> /
Enter value for acc_no: 1004
old 6: macc:=&acc_no;
new 6: macc:=1004;
Enter value for branch_name: Nashik
old 7: mbranch:='&branch_name';
new 7: mbranch:='Nashik';
Account is Inactive
ACCNO BRANCHNAME
---------- ----------
1234 Akurdi
3. Write a Stored Procedure namely proc_Grade for the categorization of student. If
marks scored by students in examination is <=1500 and marks>=990 then student will
be placed in distinction category if marks scored are between 989 and900 category
is first class, if marks 899 and 825 category is Higher Second Class Write a PL/SQL
block for using procedure created with above requirement. Stud_Marks(name,
total_marks) Result(Roll,Name, Class)
CREATE TABLE stud_marks
(
roll INT PRIMARY KEY,
name VARCHAR(20),
marks INT
);
CREATE TABLE Result
(
rollno INT PRIMARY KEY,
name VARCHAR(20),
class VARCHAR(10)
);
INSERT INTO stud_marks VALUES(1,'Rohan',1400);
INSERT INTO stud_marks VALUES(2,'Rahul',900);
INSERT INTO stud_marks VALUES(3,'Ahaan',850);
SELECT marks INTO mmarks FROM stud_marks WHERE roll = mroll AND name = mname;
DECLARE
mroll INT;
mname VARCHAR(20);
BEGIN
mroll:= &roll;
mname:= '&name';
proc_grade(mroll, mname);
END;
/
Output:
SQL> CREATE TABLE stud_marks
2 (
3 roll INT PRIMARY KEY,
4 name VARCHAR(20),
5 marks INT
6 );
Table created.
Table created.
1 row created.
1 row created.
1 row created.
SQL> CREATE OR REPLACE PROCEDURE proc_grade(mroll IN INT, mname IN VARCHAR)
2 IS
3 mmarks INT;
4 cat VARCHAR(100);
5 BEGIN
6 cat := '';
7
8 SELECT marks INTO mmarks FROM stud_marks WHERE roll = mroll AND name =
mname;
9
10 IF mmarks >= 990 AND mmarks <= 1500 THEN
11 cat := 'Distinction';
12 ELSIF mmarks >= 900 AND mmarks <= 989 THEN
13 cat := 'First class';
14 ELSIF mmarks >= 825 AND mmarks <= 899 THEN
15 cat := 'Second class';
16 ELSE
17 cat := 'Passed';
18 END IF;
19 DBMS_OUTPUT.PUT_LINE(cat);
20 INSERT INTO Result VALUES(mroll, mname, cat);
21 END proc_grade;
22 /
Procedure created.
SQL>
SQL> DECLARE
2 mroll INT;
3 mname VARCHAR(20);
4 BEGIN
5 mroll:= &roll;
6 mname:= '&name';
7 proc_grade(mroll, mname);
8 END;
9 /
Enter value for roll: 1
old 5: mroll:= &roll;
new 5: mroll:= 1;
Enter value for name: Rohan
old 6: mname:= '&name';
new 6: mname:= 'Rohan';
Distinction
SQL> /
Enter value for roll: 2
old 5: mroll:= &roll;
new 5: mroll:= 2;
Enter value for name: Rahul
old 6: mname:= '&name';
new 6: mname:= 'Rahul';
First class
ROLLNO NAME
---------- --------------------
CLASS
--------------------------------------------------------------------------------
1 Rohan
Distinction
2 Rahul
First class