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

Sagardbms

Uploaded by

nainwalrohan
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)
8 views

Sagardbms

Uploaded by

nainwalrohan
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
You are on page 1/ 18

Advance Databases Lab

Assignment

Bachelor of Computer Applications

6754132uiytSubmited by
Sagar pundir 500125549

University of Petroleum & Energy Studies


Bidholi, Via Prem Nagar, Dehradun

EXPERIMENT-01

Q1-Write a PL/SQL code to accept the value of A, B & C display which is greater.
CODE:

BEGIN
DECLARE greatest INT;
IF A > B AND A > C THEN
SET greatest = A;
ELSEIF B > A AND B > C THEN
SET greatest = B;
ELSE
SET greatest = C;
END IF;
RETURN greatest;
END

Q2-Using PL/SQL Statements create a simple loop that display message “Welcome to
PL/SQL Programming” 20 mes.
CODE:
DELIMITER $$

CREATE PROCEDURE PrintMessageTwentyTimes()


BEGIN
DECLARE counter INT DEFAULT 1;
my_loop: LOOP
IF counter > 20 THEN
LEAVE my_loop;
END IF;

-- Replace 'Your message here' with the message you want to print
SELECT 'Your message here';
SET counter = counter + 1;
END LOOP my_loop;
END $$
DELIMITER ;

Q3- Write a PL/SQL code block to find the factorial of a number.


CODE:
DELIMITER $$

CREATE PROCEDURE CalculateFactorial(IN num INT, OUT result BIGINT)


BEGIN
DECLARE i INT DEFAULT 1;
SET result = 1;
WHILE i <= num DO
SET result = result * i;
SET i = i + 1;
END WHILE;
END $$

DELIMITER ;

Q4-Write a PL/SQL program to generate Fibonacci series.

CODE:
DELIMITER $$
CREATE PROCEDURE GenerateFibonacci(IN num INT)
BEGIN
DECLARE a INT DEFAULT 0;
DECLARE b INT DEFAULT 1;
DECLARE temp INT;
DECLARE counter INT DEFAULT 1;
SELECT a;
WHILE counter < num DO
SELECT b;
SET temp = b;
SET b = a + b;
SET a = temp;
SET counter = counter + 1;
END WHILE;
END $$

DELIMITER ;

Q5-Write a PL/SQL code to find the sum of first N numbers.


CODE:
DELIMITER $$

CREATE PROCEDURE SumOfFirstNNumbers(IN n INT, OUT sum_result INT)


BEGIN
DECLARE i INT DEFAULT 1;
SET sum_result = 0;
WHILE i <= n DO
SET sum_result = sum_result + i;
SET i = i + 1;
END WHILE;
END $$

DELIMITER ;

EXPERIMENT-02
Q1- Write a PL/SQL code to accept the value of A, B & C display which is greater using func
ons.
CODE:
DELIMITER $$

CREATE FUNCTION FindGreatest(a INT, b INT, c INT) RETURNS VARCHAR(50)


BEGIN
DECLARE greatest_msg VARCHAR(50);

IF a >= b AND a >= c THEN


SET greatest_msg = CONCAT('The greatest number is ', a);
ELSEIF b >= a AND b >= c THEN
SET greatest_msg = CONCAT('The greatest number is ', b);
ELSE
SET greatest_msg = CONCAT('The greatest number is ', c);
END IF;

RETURN greatest_msg;
END $$

DELIMITER ;

Q2- Using PL/SQL Statements and func ons create a simple loop that display message
“Welcome to PL/SQL Programming” 20 mes.
CODE:
DELIMITER $$

CREATE FUNCTION PrintMessageTwentyTimes(msg VARCHAR(255)) RETURNS


VARCHAR(8000) BEGIN
DECLARE counter INT DEFAULT 1;
DECLARE result VARCHAR(8000) DEFAULT '';

my_loop: LOOP
IF counter > 20 THEN
LEAVE my_loop;
END IF;
-- Concatenate the message to the result
SET result = CONCAT(result, msg, '\n');
SET counter = counter + 1;
END LOOP my_loop;

RETURN result;
END $$

DELIMITER ;

Q3- Write a PL/SQL code block to find the factorial of a number using func ons.
CODE:
DELIMITER $$

CREATE FUNCTION Factorial(num INT) RETURNS BIGINT


BEGIN
DECLARE result BIGINT DEFAULT 1;
DECLARE i INT DEFAULT 1;

WHILE i <= num DO


SET result = result * i;
SET i = i + 1;
END WHILE;
RETURN result;
END $$

DELIMITER ;

Q4- Write a PL/SQL program to generate Fibonacci series using func ons.
CODE:
DELIMITER $$

CREATE FUNCTION Fibonacci(n INT) RETURNS INT


BEGIN
DECLARE a INT DEFAULT 0;
DECLARE b INT DEFAULT 1;
DECLARE temp INT;
DECLARE i INT DEFAULT 1;

IF n = 1 THEN
RETURN a;
ELSEIF n = 2 THEN
RETURN b;
END IF;

WHILE i < n - 1 DO
SET temp = b;
SET b = a + b;
SET a = temp;
SET i = i + 1;
END WHILE;

RETURN b;
END $$

DELIMITER ;

Q5- Write a PL/SQL code to find the sum of first N numbers using func ons.
CODE:
DELIMITER $$

CREATE FUNCTION SumOfFirstN(n INT) RETURNS INT


BEGIN
DECLARE sum_result INT DEFAULT 0;
DECLARE i INT DEFAULT 1;

WHILE i <= n DO
SET sum_result = sum_result + i;
SET i = i + 1;
END WHILE;

RETURN sum_result;
END $$
DELIMITER ;
22Experiment 3: To understand the concepts of implicit and explicit cursor.

Q. Using implicit cursor update the salary by an increase of 10% for all the records in
EMPLOYEES table, and finally display how many records have been updated. If no records
exist display the message “No Change”.

Code:
DELIMITER $$

CREATE PROCEDURE update_employee_salaries()

BEGIN

-- Update salary by 10% for all employees

UPDATE EMPLOYEES

SET SALARY = SALARY * 1.10;

IF ROW_COUNT() > 0 THEN

SELECT CONCAT(ROW_COUNT(), ' records have been updated.');

ELSE

SELECT 'No Change';

END IF;

END$$

DELIMITER ;

Output :
Using explicit cursor fetch the employee name, employee_id and salary of all the records
from EMPLOYEES table.

Code :
DELIMITER $$

CREATE PROCEDURE fetch_employee_details()

BEGIN

DECLARE v_emp_id INT;

DECLARE v_emp_name VARCHAR(50);

DECLARE v_salary DECIMAL(10, 2);

DECLARE done INT DEFAULT 0;

-- Declare a cursor to fetch employee details

DECLARE emp_cursor CURSOR FOR

SELECT EMPLOYEE_ID, FIRST_NAME, SALARY FROM EMPLOYEES;

-- Declare a handler to exit when no more rows are available

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- Open the
cursor
OPEN emp_cursor;

-- Loop through each record

read_loop: LOOP

FETCH emp_cursor INTO v_emp_id, v_emp_name, v_salary;

IF done = 1 THEN

LEAVE read_loop;

END IF;

-- Display the employee details


SELECT v_emp_id AS 'Employee ID', v_emp_name AS 'Employee Name', v_salary AS 'Salary';

END LOOP;

CLOSE emp_cursor;

END$$

DELIMITER ;

Output :

Using explicit cursor Insert the records from EMPLOYEES table for the columns
employee_id, Last_Name and salary for those records whose salary exceeds 2500 into a
new table TEMP_EMP.

Code :
DELIMITER $$

CREATE PROCEDURE insert_into_temp_emp()

BEGIN

DECLARE v_emp_id INT;


DECLARE v_last_name VARCHAR(50);

DECLARE v_salary DECIMAL(10, 2);

DECLARE done INT DEFAULT 0;

-- Declare a cursor to fetch employee details for those with a salary > 2500

DECLARE emp_cursor CURSOR FOR

SELECT EMPLOYEE_ID, LAST_NAME, SALARY FROM EMPLOYEES WHERE SALARY > 2500;

-- Declare a handler to exit when no more rows are available

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- Open the cursor

OPEN emp_cursor;

-- Loop through each record and insert into TEMP_EMP

read_loop: LOOP

FETCH emp_cursor INTO v_emp_id, v_last_name, v_salary;

IF done = 1 THEN

LEAVE read_loop;

END IF;

-- Insert the record into TEMP_EMP table

INSERT INTO TEMP_EMP (EMPLOYEE_ID, LAST_NAME, SALARY)

VALUES (v_emp_id, v_last_name, v_salary);

END LOOP;

-- Close the cursor

CLOSE emp_cursor;

END$$
DELIMITER ;

Output :

Exp 4 :

Q1- Create a row level trigger for the customers table that would fire for INSERT or UPDATE
or DELETE opera 7yuz 8zxzzbwons performed on the CUSTOMERS table. This trigger will
display the salary difference between the old values and new values.
CODE:
CREATE TABLE CUSTOMERS (
ID INT PRIMARY KEY,
NAME VARCHAR(50),
AGE INT,
ADDRESS VARCHAR(100),
SALARY DECIMAL(10, 2)
);

INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY) VALUES


(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Kota', 2000.00),
(4, 'Chaitali', 25, 'Mumbai', 6500.00),
(5, 'Hardik', 27, 'Bhopal', 8500.00),
(6, 'Komal', 22, 'MP', 4500.00);

COMMIT;

CREATE OR REPLACE TRIGGER SALARY_DIFF_TRIGGER


AFTER INSERT OR UPDATE OR DELETE ON CUSTOMERS
FOR EACH ROW
DECLARE
salary_difference DECIMAL(10, 2);
BEGIN
IF INSERTING THEN
DBMS_OUTPUT.PUT_LINE('New record inserted with Salary: '
|| :NEW.SALARY); ELSIF UPDATING THEN
salary_difference := :NEW.SALARY - :OLD.SALARY;
DBMS_OUTPUT.PUT_LINE('Salary changed. Difference: ' || salary_difference);
ELSIF DELETING THEN
DBMS_OUTPUT.PUT_LINE('Record deleted with Salary: '
|| :OLD.SALARY); END IF;
END;
/
INSERT INTO CUSTOMERS (ID, NAME, AGE, ADDRESS, SALARY) VALUES (7, 'Amit', 30, 'Pune',
3000.00);

UPDATE CUSTOMERS SET SALARY = 5000.00 WHERE ID = 1;

DELETE FROM CUSTOMERS WHERE ID = 2;

COMMIT;

Exp 5 :

You might also like