Advertisement
User_codes

Untitled

Sep 29th, 2024 (edited)
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 22.56 KB | None | 0 0
  1. ----------PRACTICAL 1
  2.  
  3. (1)Plsql block FOR IF THEN ELSIF
  4. DECLARE
  5. var NUMBER(3) := 50;
  6. BEGIN
  7. IF (var = 10) THEN
  8. DBMS_OUTPUT.put_line('Value of var is 10');
  9. ELSIF (var = 20) THEN
  10. DBMS_OUTPUT.put_line('Value of var is 20');
  11. ELSIF (var = 30) THEN
  12. DBMS_OUTPUT.put_line('Value of var is 30');
  13. ELSE
  14. DBMS_OUTPUT.put_line('None of the above condition is true.');
  15. END IF;
  16. DBMS_OUTPUT.put_line('Exact value of var is: '|| var);
  17. END;
  18.  
  19.  
  20. (2)PL/SQL Block FOR FOR LOOP:
  21. DECLARE
  22. BEGIN
  23.     FOR var IN REVERSE 1..10 LOOP
  24.         DBMS_OUTPUT.PUT_LINE(var);
  25.     END LOOP;
  26. END;
  27.  
  28.  
  29. (3)REVERSE FOR LOOP:
  30.  
  31. DECLARE
  32. BEGIN
  33.     FOR var IN REVERSE 1..10 LOOP
  34.         DBMS_OUTPUT.PUT_LINE(var);
  35.     END LOOP;
  36. END;
  37.  
  38.  
  39. (4)PL/SQL Block FOR WHILE LOOP:
  40.  
  41. DECLARE
  42.     num NUMBER := 1;
  43. BEGIN
  44.     WHILE num <= 10 LOOP
  45.         DBMS_OUTPUT.PUT_LINE(num);
  46.         num := num + 1;
  47.     END LOOP;
  48. END;
  49.  
  50.  
  51. (5)PL/SQL FOR EXIT LOOP:
  52.  
  53. DECLARE
  54.     num NUMBER := 1;
  55. BEGIN
  56.     LOOP
  57.         DBMS_OUTPUT.PUT_LINE(num);
  58.         IF num = 10 THEN
  59.             EXIT;
  60.         END IF;
  61.         num := num + 1;
  62.     END LOOP;
  63. END;
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ---------------------PRACTICAL2----------------
  71.  
  72. PL/SQL Programs
  73.  
  74. 1. WRITE a PL/SQL block TO accept marks OF a candidate AND find the result OF the candidate.
  75.  
  76. Code:
  77.  
  78.  DECLARE
  79.  
  80.  marks NUMBER;
  81.  BEGIN
  82.  marks := &marks;
  83.  IF marks >= 50 THEN
  84.  DBMS_OUTPUT.PUT_LINE('Pass');
  85.  ELSE
  86.  DBMS_OUTPUT.PUT_LINE('Fail');
  87.  END IF;
  88.  END;
  89.  
  90. 2. WRITE a PL/SQL program TO CHECK whether a given NUMBER IS POSITIVE, negative OR zero.
  91. Code:
  92.  DECLARE
  93.  num NUMBER;
  94.  BEGIN
  95.  num := &num;
  96.  IF num > 0 THEN
  97.  DBMS_OUTPUT.PUT_LINE('Positive');
  98.  ELSIF num < 0 THEN
  99.  DBMS_OUTPUT.PUT_LINE('Negative');
  100.  ELSE
  101.  DBMS_OUTPUT.PUT_LINE('Zero');
  102. END IF;
  103.  
  104.  END;
  105.  
  106.  
  107.  
  108. 3. WRITE a PL/SQL program TO CHECK whether a NUMBER IS even OR odd.
  109.  
  110. Code:
  111.  
  112.  DECLARE
  113.  
  114.  num NUMBER;
  115.  
  116.  BEGIN
  117.  
  118.  num := &num;
  119.  
  120.  IF MOD(num, 2) = 0 THEN
  121.  
  122.  DBMS_OUTPUT.PUT_LINE('Even');
  123.  
  124.  ELSE
  125.  
  126.  DBMS_OUTPUT.PUT_LINE('Odd');
  127.  
  128.  END IF;
  129.  
  130.  END;
  131.  
  132.  
  133.  
  134. 4. WRITE a PL/SQL program TO CONVERT a temperature IN scale Fahrenheit TO Celsius AND vice versa.
  135.  
  136. Code:
  137.  
  138.  DECLARE
  139.  
  140.  temp_f NUMBER;
  141.  
  142.  temp_c NUMBER;
  143.  
  144.  BEGIN
  145.  
  146.  temp_f := &temp_f;
  147.  
  148.  temp_c := (temp_f - 32) * 5/9;
  149.  DBMS_OUTPUT.PUT_LINE('Celsius: ' || temp_c);
  150.  END;
  151.  
  152. 5. WRITE a program IN PL/SQL TO print addition OF 1st n numbers.
  153.  
  154. Code:
  155.  
  156.  DECLARE
  157.  
  158.  n NUMBER;
  159.  
  160.  SUM NUMBER := 0;
  161.  
  162.  BEGIN
  163.  
  164.  n := &n;
  165.  
  166.  FOR i IN 1..n LOOP
  167.  
  168.  SUM := SUM + i;
  169.  
  170.  END LOOP;
  171.  
  172.  DBMS_OUTPUT.PUT_LINE('Sum: ' || SUM);
  173.  
  174.  END;
  175.  
  176.  
  177.  
  178. 6. WRITE a program IN PL/SQL TO print the prime numbers BETWEEN 1 TO 50.
  179.  
  180. Code:
  181.  
  182.  DECLARE
  183.  
  184.  i NUMBER;
  185.  
  186.  j NUMBER;
  187.  
  188.  is_prime BOOLEAN;
  189.  
  190.  BEGIN
  191.  
  192.  FOR i IN 2..50 LOOP
  193.  
  194.  is_prime := TRUE;
  195.  
  196.  FOR j IN 2..i-1 LOOP
  197.  
  198.  IF MOD(i, j) = 0 THEN
  199.  
  200.  is_prime := FALSE;
  201. EXIT;
  202.  
  203.  END IF;
  204.  
  205.  END LOOP;
  206.  
  207.  IF is_prime THEN
  208.  
  209.  DBMS_OUTPUT.PUT_LINE(i || ' is prime');
  210.  
  211.  END IF;
  212.  END LOOP;
  213.  END;
  214.  
  215. 7. WRITE a program IN PL/SQL TO CHECK whether a NUMBER IS prime OR NOT using GOTO statement
  216. WITH FOR LOOP.
  217. Code:
  218.  DECLARE
  219.  num NUMBER;
  220.  i NUMBER;
  221.  BEGIN
  222.  num := &num;
  223.  IF num <= 1 THEN
  224.  DBMS_OUTPUT.PUT_LINE('Not prime');
  225.  GOTO end_loop;
  226.  END IF;
  227.  FOR i IN 2..num-1 LOOP
  228.  IF MOD(num, i) = 0 THEN
  229.  DBMS_OUTPUT.PUT_LINE('Not prime');
  230.  GOTO end_loop;
  231.  END IF;
  232.  END LOOP;
  233.  
  234.  DBMS_OUTPUT.PUT_LINE('Prime');
  235.  
  236.  <<end_loop>>
  237.  
  238.  NULL;
  239.  
  240.  END;
  241.  
  242.  
  243.  
  244.  
  245. -------------------PRACTICAL 3---------------
  246.  
  247.  
  248.  ADAVANCED DATABASE MANAGEMENT SYSTEM PRACTICALS
  249.  
  250. Aim:-
  251. Practical Based ON PL/SQL Datatypes
  252.  
  253.  
  254. (1) Basic datatype
  255. NUMBER: Used TO store numeric VALUES.
  256. DECLARE
  257.   v_number NUMBER := 12345;
  258. BEGIN
  259.   DBMS_OUTPUT.PUT_LINE('Number: ' || v_number);
  260. END;
  261.  
  262. VARCHAR2: Used TO store variable-LENGTH character strings.
  263. DECLARE
  264.   v_name VARCHAR2(50) := 'John Doe';
  265. BEGIN
  266.   DBMS_OUTPUT.PUT_LINE('Name: ' || v_name);
  267. END;
  268. CHAR: Used TO store fixed-LENGTH character strings.
  269. DECLARE
  270.   v_fixed_name CHAR(10) := 'John';
  271. BEGIN
  272.   DBMS_OUTPUT.PUT_LINE('Fixed Name: ' || v_fixed_name);
  273. END;
  274. DATE: Used TO store DATE AND TIME VALUES.
  275. DECLARE
  276.   v_date DATE := SYSDATE;
  277. BEGIN
  278.   DBMS_OUTPUT.PUT_LINE('Date: ' || TO_CHAR(v_date, 'DD-MON-YYYY HH24:MI:SS'));
  279. END;
  280.  
  281.  
  282.  
  283. PROGRAM: Used CREATE a Program BY using above datatypes (NUMBER, CHAR, VARCHAR2, DATE)
  284. DECLARE
  285.     my_number NUMBER := 100;
  286.     my_char CHAR(10) := 'A';
  287.     my_varchar2 VARCHAR2(50) := 'Hello, PL/SQL!';
  288.     my_date DATE := SYSDATE;
  289. BEGIN
  290.     DBMS_OUTPUT.PUT_LINE('Number: ' || my_number);
  291.     DBMS_OUTPUT.PUT_LINE('Char: ' || my_char);
  292.     DBMS_OUTPUT.PUT_LINE('Varchar2: ' || my_varchar2);
  293.     DBMS_OUTPUT.PUT_LINE('Date: ' || my_date);
  294. END;
  295.  
  296. Taking Input FROM Users.
  297. SQL> SET SERVEROUTPUT ON;
  298. SQL> DECLARE
  299.       -- taking input for variable a
  300.       a NUMBER := &a;      
  301.       -- taking input for variable b
  302.       b VARCHAR2(30) := ‘&b’;    
  303.   BEGIN
  304.       NULL;
  305.   END;
  306.   /
  307. BOOLEAN: Used TO store TRUE, FALSE, OR NULL.
  308. DECLARE
  309.   v_flag BOOLEAN := TRUE;
  310. BEGIN
  311.   IF v_flag THEN
  312.     DBMS_OUTPUT.PUT_LINE('Flag is TRUE');
  313.   ELSE
  314.     DBMS_OUTPUT.PUT_LINE('Flag is FALSE');
  315.   END IF;
  316. END;
  317.  
  318. COMPOSITE DATATYPES:- These Datatypes can hold multiple VALUES.
  319. RECORD: Used TO store a collection OF related data items.
  320. DECLARE
  321.   TYPE Employee IS RECORD (
  322.     emp_id NUMBER,
  323.     emp_name VARCHAR2(50),
  324.     emp_salary NUMBER
  325.   );
  326.   v_emp Employee;
  327. BEGIN
  328.   v_emp.emp_id := 101;
  329.   v_emp.emp_name := 'John Doe';
  330.   v_emp.emp_salary := 50000;
  331.   DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_emp.emp_id);
  332.   DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp.emp_name);
  333.   DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_emp.emp_salary);
  334. END;
  335.  
  336. TABLE: Used TO store a collection OF VALUES, LIKE arrays.
  337. DECLARE
  338.   TYPE NumberTable IS TABLE OF NUMBER;
  339.   v_numbers NumberTable := NumberTable(1, 2, 3, 4, 5);
  340. BEGIN
  341.   FOR i IN v_numbers.FIRST .. v_numbers.LAST LOOP
  342.     DBMS_OUTPUT.PUT_LINE('Number: ' || v_numbers(i));
  343.   END LOOP;
  344. END;
  345. -----------------------------3--------------------------
  346. 1: Basic Data TYPE
  347.     1. DECLARE Variables: WRITE a PL/SQL block TO DECLARE variables FOR each OF the following                   data types AND assign them appropriate VALUES:
  348.  
  349. Code:-
  350. DECLARE
  351.     my_number NUMBER := 12345;
  352.     my_char CHAR(10) := 'A';
  353.     my_varchar2 VARCHAR2(50) := 'Hello, PL/SQL!';
  354.     my_boolean BOOLEAN := TRUE;
  355.     my_date DATE := SYSDATE;
  356.     TYPE EmployeeRecord IS RECORD (
  357.         emp_id NUMBER,
  358.         emp_name VARCHAR2(50),
  359.         emp_salary NUMBER
  360.     );
  361.     v_emp EmployeeRecord;
  362.     TYPE NumberTable IS TABLE OF NUMBER;
  363.     v_numbers NumberTable := NumberTable(1, 2, 3, 4, 5);
  364. BEGIN
  365.     v_emp.emp_id := 101;
  366.     v_emp.emp_name := 'John Doe';
  367.     v_emp.emp_salary := 50000;
  368.  
  369.     DBMS_OUTPUT.PUT_LINE('Number: ' || my_number);
  370.     DBMS_OUTPUT.PUT_LINE('Char: ' || my_char);
  371.     DBMS_OUTPUT.PUT_LINE('Varchar2: ' || my_varchar2);
  372.     DBMS_OUTPUT.PUT_LINE('Boolean: ' || CASE WHEN my_boolean THEN 'TRUE' ELSE 'FALSE' END);
  373.     DBMS_OUTPUT.PUT_LINE('Date: ' || TO_CHAR(my_date, 'DD-MON-YYYY HH24:MI:SS'));
  374.  
  375.     DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_emp.emp_id);
  376.     DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp.emp_name);
  377.     DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_emp.emp_salary);
  378.  
  379.     FOR i IN v_numbers.FIRST .. v_numbers.LAST LOOP
  380.         DBMS_OUTPUT.PUT_LINE('Number: ' || v_numbers(i));
  381.     END LOOP;
  382. END;
  383. /
  384.  
  385.  
  386. 2: DATE Manipulation
  387.  
  388. CODE:-
  389.  
  390. DECLARE
  391.     date1 DATE := SYSDATE;
  392.     date2 DATE := TO_DATE('2024-01-01', 'YYYY-MM-DD');
  393.     days_diff NUMBER;
  394. BEGIN
  395.     days_diff := date1 - date2;
  396.     DBMS_OUTPUT.PUT_LINE('Days between dates: ' || days_diff);
  397.     DBMS_OUTPUT.PUT_LINE('Formatted current date: ' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
  398. END;
  399. /
  400. 3: BOOLEAN Logic
  401.  
  402. CODE:-
  403. DECLARE
  404.     bool1 BOOLEAN := TRUE;
  405.     bool2 BOOLEAN := FALSE;
  406. BEGIN
  407.     IF bool1 AND bool2 THEN
  408.         DBMS_OUTPUT.PUT_LINE('Both are TRUE');
  409.     ELSE
  410.         DBMS_OUTPUT.PUT_LINE('At least one is FALSE');
  411.     END IF;
  412.     -- Boolean operation example
  413.     DECLARE
  414.         result BOOLEAN := TRUE AND FALSE;
  415.     BEGIN
  416.         DBMS_OUTPUT.PUT_LINE('Result of TRUE AND FALSE: ' || CASE WHEN result THEN 'TRUE' ELSE 'FALSE' END);
  417.     END;
  418. END;
  419. /
  420.  
  421. -----------------------PRACTICAL4-----------------------
  422.  
  423. Practical Based ON PL/SQL Variables.
  424.  
  425. Code: - Basic Variable Declaration.
  426.  
  427. DECLARE
  428.     my_variable NUMBER := 10;
  429. BEGIN
  430.     my_variable := my_variable + 20;
  431.     DBMS_OUTPUT.PUT_LINE('The value of my_variable is: ' || my_variable);
  432. END;
  433.  
  434.  
  435.  
  436.  
  437. Code: - Calculating Area OF Circle.
  438.  
  439. DECLARE
  440.     v_radius NUMBER := 5;  -- Radius of the circle
  441.     v_area NUMBER;         -- Variable to store the area
  442. BEGIN
  443.     v_area := 3.14 * v_radius * v_radius;  -- Calculate the area
  444.     DBMS_OUTPUT.PUT_LINE('The area of the circle with radius ' || v_radius || ' is ' || v_area);
  445. END;
  446. /
  447.  
  448. Code: - Determining Even AND Odd NUMBER.
  449.  
  450. DECLARE
  451.     v_number NUMBER := 7;  -- The number to check
  452.     v_result VARCHAR2(10); -- Variable to store the result
  453. BEGIN
  454.     IF MOD(v_number, 2) = 0 THEN
  455.         v_result := 'Even';
  456.     ELSE
  457.         v_result := 'Odd';
  458.     END IF;
  459.    
  460.     DBMS_OUTPUT.PUT_LINE('The number ' || v_number || ' is ' || v_result);
  461. END;
  462. /
  463.  
  464.  
  465.  
  466.  
  467. Code: - Swapping two numbers.
  468.  
  469. DECLARE
  470.     v_a NUMBER := 10;  -- First number
  471.     v_b NUMBER := 20;  -- Second number
  472.     v_temp NUMBER;     -- Temporary variable for swapping
  473. BEGIN
  474.     -- Output original values
  475.     DBMS_OUTPUT.PUT_LINE('Before swapping:');
  476.     DBMS_OUTPUT.PUT_LINE('v_a: ' || v_a);
  477.     DBMS_OUTPUT.PUT_LINE('v_b: ' || v_b);
  478.    
  479.     -- Swap the values
  480.     v_temp := v_a;
  481.     v_a := v_b;
  482.     v_b := v_temp;
  483.    
  484.     -- Output swapped values
  485.     DBMS_OUTPUT.PUT_LINE('After swapping:');
  486.     DBMS_OUTPUT.PUT_LINE('v_a: ' || v_a);
  487.     DBMS_OUTPUT.PUT_LINE('v_b: ' || v_b);
  488. END;
  489. /
  490.  
  491.  
  492. Code: - Calculate Compound Interest
  493.     Formula FOR compound interest: A = P * (1 + r/n) ^ (n*t), WHERE:
  494.     A IS the amount
  495.     P IS the principal
  496.     r IS the annual interest rate
  497.     n IS the NUMBER OF times interest IS compounded per YEAR
  498.     t IS the TIME IN YEAR
  499. DECLARE
  500.     -- Declare variables
  501.     principal NUMBER := 1000;       -- Principal amount
  502.     rate NUMBER := 0.05;            -- Annual interest rate (5%)
  503.     years NUMBER := 5;               -- Number of years
  504.     times_compounded NUMBER := 4;   -- Compounded quarterly
  505.    
  506.     -- Declare variable to store the final amount
  507.     amount NUMBER;
  508. BEGIN
  509.     -- Calculate compound interest
  510.     amount := principal * POWER((1 + rate / times_compounded), (times_compounded * years));
  511.    
  512.     -- Output the result
  513.     DBMS_OUTPUT.PUT_LINE('Principal: ' || principal);
  514.     DBMS_OUTPUT.PUT_LINE('Rate of Interest: ' || rate);
  515.     DBMS_OUTPUT.PUT_LINE('Number of Years: ' || years);
  516.     DBMS_OUTPUT.PUT_LINE('Amount after Compound Interest: ' || amount);
  517. END;
  518. /
  519.  
  520. ---------------------PRACTICAL5-------------------------
  521.  
  522.                
  523.  
  524. Aim: Practical based ON PL/SQL Executable statements.
  525. 1: Variable Assignment AND Conditional Logic
  526. Code:
  527. DECLARE
  528.     v_score NUMBER := 85; -- Student's score
  529.     v_result VARCHAR2(10); -- Variable to store result
  530. BEGIN
  531.     -- Check if the score is greater than or equal to 50 to determine pass or fail
  532.     IF v_score >= 50 THEN
  533.         v_result := 'Pass';
  534.     ELSE
  535.         v_result := 'Fail';
  536.     END IF;
  537.    
  538.     -- Output the result
  539.     DBMS_OUTPUT.PUT_LINE('The student has: ' || v_result);
  540. END;
  541. /
  542.  
  543.  
  544. 2: Using Loops AND Conditional Statements
  545. Code:
  546. DECLARE
  547.     v_number NUMBER := 5; -- Number to calculate factorial for
  548.     v_factorial NUMBER := 1; -- Variable to store the result
  549. BEGIN
  550.     -- Calculate factorial using a loop
  551.     FOR i IN 1..v_number LOOP
  552.         v_factorial := v_factorial * i;
  553.     END LOOP;
  554.    
  555.     -- Output the result
  556.     DBMS_OUTPUT.PUT_LINE('The factorial of ' || v_number || ' is ' || v_factorial);
  557. END;
  558. /
  559.  
  560.  
  561. 3. Calculating AND Checking Employee Bonus
  562. Code:
  563. DECLARE
  564.     v_salary NUMBER := 5000;            -- Employee salary
  565.     v_bonus NUMBER;                     -- Bonus to be calculated
  566.     v_threshold NUMBER := 1000;         -- Threshold for bonus check
  567. BEGIN
  568.     -- Calculate bonus as 10% of the salary
  569.     v_bonus := v_salary * 0.10;
  570.  
  571.     -- Output the calculated bonus
  572.     DBMS_OUTPUT.PUT_LINE('Calculated Bonus: ' || v_bonus);
  573.  
  574.     -- Check if the bonus exceeds the threshold
  575.     IF v_bonus > v_threshold THEN
  576.         DBMS_OUTPUT.PUT_LINE('Bonus exceeds the threshold.');
  577.     ELSE
  578.         DBMS_OUTPUT.PUT_LINE('Bonus does not exceed the threshold.');
  579.     END IF;
  580. END;
  581. /
  582. ------------------PRACTICAL NO-6---------------
  583.  
  584. Aim: Practical based ON PL/SQL EXCEPTION Handling.
  585.  
  586. Handling ZERO_DIVIDE EXCEPTION WITH USER Input
  587.  
  588. Code:
  589. DECLARE
  590.     v_num1 NUMBER;
  591.     v_num2 NUMBER;
  592.     v_result NUMBER;
  593. BEGIN
  594.     -- Accept two numbers as input
  595.     v_num1 := &Enter_First_Number;
  596.     v_num2 := &Enter_Second_Number;
  597.  
  598.     -- Attempt to divide the numbers
  599.     v_result := v_num1 / v_num2;
  600.  
  601.     DBMS_OUTPUT.PUT_LINE('Result: ' || v_result);
  602. EXCEPTION
  603.     WHEN ZERO_DIVIDE THEN
  604.         DBMS_OUTPUT.PUT_LINE('Error: Division by zero is not allowed.');
  605. END;
  606. /
  607.  
  608.  
  609.  
  610. Handling ZERO_DIVIDE EXCEPTION WITH USER Input
  611.  
  612. Code:
  613. (A)
  614. DECLARE
  615.   v_num1 NUMBER := 1000000000000000;
  616.   v_num2 NUMBER := 1000000000000000;
  617.   v_result NUMBER;
  618. BEGIN
  619.   -- Attempt to multiply two large numbers
  620.   v_result := v_num1 * v_num2;
  621.  
  622.   -- Output the result
  623.   DBMS_OUTPUT.PUT_LINE('Result: ' || v_result);
  624.  
  625. EXCEPTION
  626.   -- Handle numeric overflow
  627.   WHEN VALUE_ERROR THEN
  628.     DBMS_OUTPUT.PUT_LINE('Error: Numeric value is too large.');
  629.  
  630.   -- Handle any other exceptions
  631.   WHEN OTHERS THEN
  632.     DBMS_OUTPUT.PUT_LINE('Error: An unexpected error occurred.');
  633. END;
  634. /
  635.  
  636.  
  637. (B)     VALUE Error
  638. DECLARE
  639.     v_small_number NUMBER(3);
  640. BEGIN
  641.     -- Attempt to assign a value that's too large for the declared variable
  642.     v_small_number := 9999; -- This should cause a VALUE_ERROR
  643.  
  644.     DBMS_OUTPUT.PUT_LINE('Small Number: ' || v_small_number);
  645. EXCEPTION
  646.     WHEN VALUE_ERROR THEN
  647.         DBMS_OUTPUT.PUT_LINE('Error: Value exceeds the allowed precision.');
  648. END;
  649. /
  650.  
  651.  
  652.  
  653. (Q)Combining Multiple Exceptions.
  654.  
  655. Code:
  656. DECLARE
  657.     v_num1 NUMBER := 100;
  658.     v_num2 NUMBER := 0;
  659.     v_result NUMBER;
  660. BEGIN
  661.     -- Attempt to divide numbers and handle exceptions
  662.     v_result := v_num1 / v_num2;
  663.  
  664.     DBMS_OUTPUT.PUT_LINE('Result: ' || v_result);
  665. EXCEPTION
  666.     WHEN ZERO_DIVIDE THEN
  667.         DBMS_OUTPUT.PUT_LINE('Error: Division by zero detected.');
  668.     WHEN VALUE_ERROR THEN
  669.         DBMS_OUTPUT.PUT_LINE('Error: A value error occurred.');
  670.     WHEN OTHERS THEN
  671.         DBMS_OUTPUT.PUT_LINE('An unexpected error occurred: ' || SQLERRM);
  672. END;
  673. /
  674.  
  675.  
  676.  
  677. (Q)Using Raise_Application_Error.
  678.  
  679. Code:
  680. DECLARE
  681.     v_emp_salary NUMBER := 3000;
  682. BEGIN
  683.     -- Check if the salary is below the threshold
  684.     IF v_emp_salary < 5000 THEN
  685.         RAISE_APPLICATION_ERROR(-20001, 'Salary is below the acceptable minimum.');
  686.     END IF;
  687.  
  688.     DBMS_OUTPUT.PUT_LINE('Salary is acceptable.');
  689. EXCEPTION
  690.     WHEN OTHERS THEN
  691.         DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
  692. END;
  693. /
  694.  
  695.  
  696. ------------------PRACTICAL NO 7---------------
  697. Aim: Practical based ON PL/SQL Cursors.
  698. Code: Creation OF tables, inserting records, AND using a CURSOR TO process the records.
  699.  
  700.  
  701.  
  702. -- Create departments table
  703. CREATE TABLE departments (
  704.    department_id NUMBER PRIMARY KEY,
  705.    department_name VARCHAR2(50)
  706. );
  707.  
  708. -- Create employees table
  709. CREATE TABLE employees (
  710.    employee_id NUMBER PRIMARY KEY,
  711.    first_name VARCHAR2(50),
  712.    last_name VARCHAR2(50),
  713.    department_id NUMBER,
  714.    salary NUMBER,
  715.    FOREIGN KEY (department_id) REFERENCES departments(department_id)
  716. );
  717.  
  718. -- Insert records into departments table
  719. INSERT INTO departments (department_id, department_name) VALUES (10, 'Sales');
  720. INSERT INTO departments (department_id, department_name) VALUES (20, 'Marketing');
  721. INSERT INTO departments (department_id, department_name) VALUES (30, 'Human Resources');
  722.  
  723. -- Insert records into employees table
  724. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (1, 'John', 'Doe', 10, 60000);
  725. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (2, 'Jane', 'Smith', 10, 65000);
  726. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (3, 'Michael', 'Johnson', 20, 70000);
  727. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (4, 'Emily', 'Davis', 30, 72000);
  728. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (5, 'William', 'Brown', 20, 75000);
  729.  
  730. COMMIT;
  731.  
  732. DECLARE
  733.    -- Define a cursor to fetch employee details for a specific department
  734.    CURSOR emp_cursor IS
  735.       SELECT employee_id, first_name, last_name, salary
  736.       FROM employees
  737.       WHERE department_id = 10; -- Change this ID to fetch for a different department
  738.    
  739.    -- Define variables to hold fetched data
  740.    v_employee_id employees.employee_id%TYPE;
  741.    v_first_name employees.first_name%TYPE;
  742.    v_last_name employees.last_name%TYPE;
  743.    v_salary employees.salary%TYPE;
  744. BEGIN
  745.    -- Open the cursor
  746.    OPEN emp_cursor;
  747.    
  748.    -- Fetch and process each record from the cursor
  749.    LOOP
  750.       FETCH emp_cursor INTO v_employee_id, v_first_name, v_last_name, v_salary;
  751.      
  752.       -- Exit the loop if no more records
  753.       EXIT WHEN emp_cursor%NOTFOUND;
  754.      
  755.       -- Display employee details
  756.       DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_id ||
  757.                            ', Name: ' || v_first_name || ' ' || v_last_name ||
  758.                            ', Salary: ' || v_salary);
  759.    END LOOP;
  760.    
  761.    -- Close the cursor
  762.    CLOSE emp_cursor;
  763. END;
  764. /
  765.  
  766.  
  767.  
  768.  
  769.  
  770. -----------------PRACTICAL NO 8----------------
  771. Aim: Practical based ON PL/SQL Stored PROCEDURE.
  772. Code: Stored PROCEDURE inserts a NEW employee INTO the employees TABLE.
  773.    
  774. --Creating a Stored Procedure to Retrieve Employee Details
  775.  
  776. CREATE TABLE employees (
  777.     employee_id    NUMBER PRIMARY KEY,
  778.     employee_name  VARCHAR2(100),
  779.     salary         NUMBER(10, 2),
  780.     department_id  NUMBER
  781. );
  782.  
  783.  
  784. INSERT INTO employees (employee_id, employee_name, salary, department_id) VALUES (101, 'John Doe', 50000, 10);
  785. INSERT INTO employees (employee_id, employee_name, salary, department_id) VALUES (102, 'Jane Smith', 60000, 20);
  786. INSERT INTO employees (employee_id, employee_name, salary, department_id) VALUES (103, 'Michael Johnson', 55000, 10);
  787. INSERT INTO employees (employee_id, employee_name, salary, department_id) VALUES (104, 'Emily Davis', 70000, 30);
  788. INSERT INTO employees (employee_id, employee_name, salary, department_id) VALUES (105, 'William Brown', 65000, 20);
  789.  
  790.  
  791. CREATE OR REPLACE PROCEDURE get_employee_details (
  792.     p_employee_id IN employees.employee_id%TYPE
  793. ) IS
  794.     v_employee_name employees.employee_name%TYPE;
  795.     v_salary        employees.salary%TYPE;
  796. BEGIN
  797.     SELECT employee_name, salary
  798.     INTO v_employee_name, v_salary
  799.     FROM employees
  800.     WHERE employee_id = p_employee_id;
  801.    
  802.     DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
  803.     DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary);
  804. EXCEPTION
  805.     WHEN NO_DATA_FOUND THEN
  806.         DBMS_OUTPUT.PUT_LINE('No employee found with ID: ' || p_employee_id);
  807.     WHEN OTHERS THEN
  808.         DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
  809. END;
  810. /
  811.  
  812.  
  813. BEGIN
  814.     get_employee_details(101);
  815. END;
  816. /
  817. --Creating a Stored Procedure to Delete an Employee
  818.  
  819. CREATE OR REPLACE PROCEDURE delete_employee (
  820.     p_employee_id IN employees.employee_id%TYPE
  821. ) IS
  822. BEGIN
  823.     DELETE FROM employees WHERE employee_id = p_employee_id;
  824.  
  825.     IF SQL%ROWCOUNT = 0 THEN
  826.         DBMS_OUTPUT.PUT_LINE('No employee found with ID: ' || p_employee_id);
  827.     ELSE
  828.         DBMS_OUTPUT.PUT_LINE('Employee deleted successfully with ID: ' || p_employee_id);
  829.     END IF;
  830.  
  831.     COMMIT;
  832. EXCEPTION
  833.     WHEN OTHERS THEN
  834.         DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
  835.         ROLLBACK;
  836. END;
  837. /
  838. BEGIN
  839.     delete_employee(103);
  840. END;
  841. /
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850. -----------------PRACTICAL NO 9----------------
  851. Aim: Practical based ON PL/SQL Functions.
  852. Code:
  853. CREATE TABLE departments (
  854.    department_id NUMBER PRIMARY KEY,
  855.    department_name VARCHAR2(50),
  856.    manager_id NUMBER,
  857.    location_id NUMBER
  858. );
  859. INSERT INTO departments (department_id, department_name, manager_id, location_id) VALUES (10, 'Administration', 200, 1700);
  860. INSERT INTO departments (department_id, department_name, manager_id, location_id) VALUES (20, 'Marketing', 201, 1800);
  861. INSERT INTO departments (department_id, department_name, manager_id, location_id) VALUES (30, 'Purchasing', 202, 1900);
  862. INSERT INTO departments (department_id, department_name, manager_id, location_id) VALUES (40, 'Human Resources', 203, 2000);
  863.  
  864.  
  865. COMMIT;
  866. CREATE TABLE employees (
  867.   employee_id NUMBER PRIMARY KEY,
  868.   first_name VARCHAR2(50),
  869.   last_name VARCHAR2(50),
  870.   department_id NUMBER,
  871.   salary NUMBER
  872. );
  873. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (101, 'John', 'Doe', 10, 60000);
  874. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (102, 'Jane', 'Smith', 20, 70000);
  875. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (103, 'Michael', 'Johnson', 10, 65000);
  876. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (104, 'Mary', 'Brown', 30, 75000);
  877. INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (105, 'William', 'Davis', 20, 72000);
  878.  
  879. COMMIT;
  880.  
  881.  
  882. CREATE OR REPLACE FUNCTION calculate_total_salary (
  883.    p_department_id IN departments.department_id%TYPE
  884. ) RETURN NUMBER
  885. IS
  886.    v_total_salary NUMBER := 0;
  887. BEGIN
  888.    -- Calculate the total salary for the given department
  889.    SELECT SUM(salary)
  890.    INTO v_total_salary
  891.    FROM employees
  892.    WHERE department_id = p_department_id;
  893.  
  894.    -- Return the total salary
  895.    RETURN NVL(v_total_salary, 0);
  896. END calculate_total_salary;
  897. /
  898.  
  899. DECLARE
  900.    v_total_salary NUMBER;
  901. BEGIN
  902.    v_total_salary := calculate_total_salary(10);
  903.    DBMS_OUTPUT.PUT_LINE('Total Salary for Department 10: ' || v_total_salary);
  904. END;
  905. /
  906.  
  907.  
  908. ----------------PRACTICAL NO 10----------------
  909. Aim: Practical based ON PL/SQL Triggers.
  910. Code:
  911. -- Create employees table
  912. CREATE TABLE employees (
  913.    employee_id NUMBER PRIMARY KEY,
  914.    first_name VARCHAR2(50),
  915.    last_name VARCHAR2(50),
  916.    salary NUMBER
  917. );
  918.  
  919. -- Create audit_log table
  920. CREATE TABLE audit_log (
  921.    log_id NUMBER PRIMARY KEY,
  922.    employee_id NUMBER,
  923.    action VARCHAR2(50),
  924.    old_salary NUMBER,
  925.    new_salary NUMBER,
  926.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement