0% found this document useful (0 votes)
11 views24 pages

SQL and PL/SQL Experiment Guide

Uploaded by

k6728074
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views24 pages

SQL and PL/SQL Experiment Guide

Uploaded by

k6728074
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

CONTENTS

PAGE
[Link] DATE NAME OF THE EXPERIMENT SIGNATURE
NO
`1 SQL-DDL COMMANDS

2 SQL-DDM COMMANDS

3 SQL-TCL COMMANDS

4 PL/SQL-FIBONACCI SERIES

5 PL/SQL-FACTORIAL

6 PL/SQL-STRING REVERSE

7 PL/SQL-SUM OF SERIES

8 PL/SQL-TRIGGER

CURSOR-STUDENTS MARK ANALYSIS


9
USING CURSOR

APPLICATION-LIBRARY
10
MANAGEMENT SYSTEM

APPLICATION-STUDENT MARK
11
ANALYSIS
1. DDL Commands

--Create table

CREATE TABLE Students ( id NUMBER(4) PRIMARY KEY, name VARCHAR2(20),age NUMBER(3));

-- Alter table: add a column

ALTER TABLE Students

ADD (grade

VARCHAR2(2));

--Rename table

ALTER TABLE Students

RENAME TO Learners;

--Truncate data later if needed

TRUNCATE TABLE Learners;

--Drop table

DROP TABLE Learners;


OUTPUT:

Table created.

Table altered.

Table renamed.

Table truncated(fast remove data).

Table dropped
2. DML COMMAND

--Create for data operations

CREATE TABLE Employees (emp_id NUMBER(3) PRIMARY KEY, ename


VARCHAR2(15),salary NUMBER(7,2));

--Insert rows

INSERT INTO Employees VALUES (101, 'Alice', 50000);

INSERT INTO Employees VALUES (102, 'Bob', 60000);

--Update salary

UPDATE Employees

SET salary = salary * 1.10

WHERE emp_id = 101;

--Delete row

DELETE FROM Employees

WHERE emp_id = 102;

--Select results

SELECT * FROM Employees;

OUTPUT :

EMP_ID ENAME SALARY


101 Alice 55000.00
3. TCL COMMAND

BEGIN

--Update salary for all employees

UPDATE Employees

SET salary = salary + 1000;

SAVEPOINT sp1;

--Delete someone

DELETE FROM Employees WHERE emp_id = 101;

--Oops, rollback delete only

ROLLBACK TO sp1;

--Commit the raise

COMMIT;

END;

OUTPUT :

EMP_ID ENAME SALARY


101 Alice 56000.00
[Link]/SQL

[Link] SERIES

DECLARE

a NUMBER := 0;

b NUMBER := 1;

temp NUMBER;

n NUMBER := 10; -- Change as needed

i NUMBER;

BEGIN

DBMS_OUTPUT.PUT_LINE('Fibonacci series:');

DBMS_OUTPUT.PUT_LINE(a);

DBMS_OUTPUT.PUT_LINE(b);

FOR i IN 2..n LOOP

temp := a + b;

a := b;

b := temp;

DBMS_OUTPUT.PUT_LINE(temp);

END LOOP;

END;

/
OUTPUT:

Fibonacci series:

13

21

34

55
5. FACTORIAL

DECLARE

f NUMBER := 1;

n NUMBER := 5; -- Compute 5!

BEGIN

FOR i IN 1..n LOOP

f:=f*i;

END LOOP;

DBMS_OUTPUT.PUT_LINE('Factorial of '||n||' is '||f);

END;

OUTPUT :

Factorial of 5 is 120
6. STRING REVERSE

DECLARE

input_str VARCHAR2(100) := 'Oracle';

rev VARCHAR2(100) := ";

BEGIN

FOR I IN REVERSE 1..LENGTH(input_str) LOOP

rev := rev || SUBSTR(input_str, i, 1);

END LOOP;

DBMS_OUTPUT.PUT_LINE('Original: ' || input_str);

DBMS_OUTPUT.PUT_LINE('Reversed: ' || rev);

END;

Output :

Original: Oracle

Reversed: elcarO
7. SUM OF SERIES

DECLARE

n NUMBER := 10;

total NUMBER := 0;

BEGIN

FOR i IN 1..n LOOP

total: total + i;

END LOOP:

DBMS_OUTPUT.PUT_LINE('Sum of 1..'||n||' = '"||total);

END;

OUTPUT :

Sum of 1…10=55
8. Trigger

First, set up tables:

CREATE TABLE employees (emp_id NUMBER PRIMARY KEY,ename


VARCHAR2(50),salary NUMBER);

CREATE TABLE emp_audit (emp_id NUMBER,ename VARCHAR2(50),action time


TIMESTAMP,action_type VARCHAR2(10));

Then create a trigger:

CREATE OR REPLACE TRIGGER trg_emp_insert

AFTER INSERT ON employees

FOR EACH ROW

BEGIN

INSERT INTO emp_audit(emp id, ename, action time, action type)

VALUES(:NEW.emp_id, :[Link], SYSTIMESTAMP, INSERT);

END;

Testing the trigger:

INSERT INTO employees VALUES (1, 'Alice', 50000);

COMMIT;

SELECT * FROM emp_audit;

OUTPUT:

EMP_ID ENAME ACTION/_TIME ACTION/_TYPE


2025-06-10
1 Alice INSERT
14:23:45.123456
[Link]

9. Student Mark Analysis Using Cursor

Table Setup

CREATE TABLE students

( regno NUMBER PRIMARY

KEY, name VARCHAR2(50),

mark1 NUMBER,

mark2 NUMBER,

mark3 NUMBER);

INSERT INTO students VALUES (1, 'Ram', 40, 55, 65);

INSERT INTO students VALUES (2, 'Sita', 80, 90, 85);

INSERT INTO students VALUES (3, 'Gopal', 35, 45, 25);

--add more rows as needed

COMMIT;

SET SERVEROUTPUT ON;

DECLARE

CURSOR stud_cur IS

SELECT regno, name, mark1, mark2, mark3 FROM students;

v_reg [Link]%TYPE;
v_name [Link]%TYPE;

v_m1 students.mark1%TYPE;

v_m2 students.mark2%TYPE;

v_m3 students.mark3%TYPE;

v_total NUMBER;

v_avg NUMBER;

v_grade VARCHAR2(10);

BEGIN

OPEN stud_cur;

LOOP

FETCH stud cur INTO v reg, v name, v ml, v m2, v m3;

EXIT WHEN stud cur%NOTFOUND:

v total:=v_m1+v_m2 + v_m3;

v_avg :=v_total/3;

-- Assign grade based on average

IF v_avg<40 THEN

v_grade := 'FAIL';

ELSIF v_avg < 50

THEN
v_grade := 'C';

ELSIF v_avg < 60 THEN

v_grade := 'B';

ELSIF v_avg < 80 THEN v_grade := 'A';

ELSE

v_grade := 'HONOURS';

END IF;

DBMS_OUTPUT.PUT_LINE(

'RegNo: '||v_reg ||

'| Name: '||v_name ||

'| Total: '||v_total ||

'| Avg: '||ROUND(v_avg,2) ||

'| Grade: '||v_grade

);

END LOOP;

CLOSE stud_cur;

END;

/
Output:

RegNo: 1| Name: Ram | Total: 160 | Avg: 53.33 |Grade: B

RegNo: 2 | Name: Sita | Total: 255 | Avg: 85.00 |Grade: HONOURS

RegNo: 3 |Name:Gopal | Total: 105 |Avg: 35.00 | Grade: FAIL


IV APPLICATION

10. Library Management System

--Create Books, Authors, Branches, Copies, Borrowing tables

CREATE TABLE BOOK

( Book_id INT PRIMARY

KEY, Title VARCHAR(100),

Publisher VARCHAR(50),

Pub_Year YEAR

);

CREATE TABLE BOOK_AUTHORS (

Book_id INT,

Author_Name VARCHAR(50),

PRIMARY KEY (Book_id, Author_Name),

FOREIGN KEY (Book_id) REFERENCES BOOK(Book_id)

);

CREATE TABLE LIBRARY_BRANCH (

Branch_id INT PRIMARY KEY,

Branch_Name VARCHAR(50),

Address VARCHAR(100) );

CREATE TABLE BOOK_COPIES (


Book_id INT,

Branch_id INT,

No_of_Copies INT,

PRIMARY KEY (Book_id, Branch_id),

FOREIGN KEY (Book_id) REFERENCES BOOK(Book_id),

FOREIGN KEY (Branch_id) REFERENCES LIBRARY_BRANCH(Branch_id) );

CREATE TABLE BOOK_LENDING (

Book_id INT,

Branch_id INT,

Card_No INT,

Date_Out DATE,

Due_Date DATE,

PRIMARY KEY (Book_id, Branch_id, Card_No, Date_Out),

FOREIGN KEY (Book_id, Branch_id) REFERENCES BOOK_ COPIES(Book_id,


Branch_id) );

--Sample Data

INSERT INTO BOOK VALUES

(1, ‘Database Systems’, ‘OXFORD’, 2018),

(2, ‘Introduction to Algorithms’, ‘MIT Press’, 2020);

INSERT INTO BOOK_AUTHORS VALUES

(1, ‘Raghu Ramakrishnan’),

(2, ‘Thomas Cormen’);


INSERT INTO LIBRARY_BRANCH VALUES

(10, ‘Main Branch’, ‘Chennai’),

(20, ‘East Branch’, ‘Tambaram’);

INSERT INTO BOOK_COPIES VALUES

(1, 10, 5),

(2, 10, 3),

(1, 20, 2);

INSERT INTO BOOK_LENDING VALUES

(1, 10, 1001, ‘2025-06-01’,’2025-06-15’),

(2, 10, 1002, ‘2025-06-03’,’2025-06-17’);

List all books and their authors:

SELECT [Link], a.Author_Name

FROM BOOK b

JOIN BOOK_AUTHORS a ON b.Book_id = a.Book_id;

Count available copies per branch:

SELECT lb.Branch_Name, b. Title, bc.No_of_Copies

FROM BOOK_COPIES bc

JOIN LIBRARY_BRANCH 1b ON bc. Branch_id=lb.Branch_id

JOIN BOOK b ON bc.Book_id = b.Book_id;


OUTPUT:

Title Author_name
Database systems Raghu Ramakrishnan
Introduction to Thomas Cormen
Algorithms

Branch_Name Title No_Of_Copies


Main Branch Database systems 5
Main Branch Introduction to 3
Algorithms
East Branch Database System 2
11. STUDENT MARK ANALYSIS

CREATE TABLE STDMARKS (Roll_No INT,Student_Name VARCHAR(30),Subject


VARCHAR(30),Marks INT);

INSERT INTO STDMARKS VALUES

(1,’RAVI’,’C++’,75),

(1, ‘RAVI’,’ORACLE’,84),

(1,’RAVI, ‘JAVA’,95),

(1.’RAVI,’OS’,62),

(2,’VIVEK’,’C++’,46),

(2,’VIVEK’,’ORACLE’,70).

(2,’VIVEK’,’JAVA’,55),

(2,’VIVEK’, ‘OS’,56),

(3,’RAJ’,’C++’,82),

(3,’RAJ’, ‘ORACLE’,84),

(3,’RAJ, ‘JAVA’,74),

(3,’RAJ’, ‘OS’,92);

Average marks per student:

SELECT Roll_No, Student_Name, AVG(Marks) AS Avg_Marks

FROM STDMARKS

GROUP BY Roll_No, Student_Name;

Top scorer by subject:


WITH MaxMarks AS (

SELECT Subject, MAX(Marks) AS MaxMark

FROM STDMARKS

GROUP BY Subject

SELECT s. Student_Name, [Link], [Link]

FROM MaxMarks mm

JOIN STDMARKS m ON [Link] = [Link] AND [Link] = [Link];

JOIN STDMARKS s ON [Link] No = m.Roll_No AND [Link] =[Link];


OUTPUT:

Student_Name Subject Marks


RAVI JAVA 95
RAJ OS 92
RAJ C++ 82
RAJ ORACLE 84

Roll_No Student_Name Avg_Marks


1 RAVI 79.00
2 VIVEK 56.75
3 RAJ 83.00

You might also like