Oracle Procedure 100 Examples

1. Simple Procedure with No Parameters

Description: This procedure prints a simple greeting using DBMS_OUTPUT.

CREATE OR REPLACE PROCEDURE greet
AS
BEGIN
  DBMS_OUTPUT.PUT_LINE('Hello, World!');
END greet;
/

2. Procedure with IN Parameter

Description: This procedure accepts a name and prints a personalized greeting.

CREATE OR REPLACE PROCEDURE greet_name(p_name IN VARCHAR2)
AS
BEGIN
  DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END greet_name;
/

3. Procedure with IN and OUT Parameters

Description: This procedure adds two numbers and returns the result through an OUT parameter.

CREATE OR REPLACE PROCEDURE add_numbers(p_num1 IN NUMBER, p_num2 IN NUMBER, p_sum OUT NUMBER)
AS
BEGIN
  p_sum := p_num1 + p_num2;
END add_numbers;
/

4. Procedure with IN, OUT, and IN OUT Parameters

Description: This procedure calculates area and also updates the unit text.

CREATE OR REPLACE PROCEDURE calculate_area(p_length IN NUMBER, p_width IN NUMBER, p_area OUT NUMBER, p_unit IN OUT VARCHAR2)
AS
BEGIN
  p_area := p_length * p_width;
  p_unit := 'square ' || p_unit;
END calculate_area;
/

5. Procedure with Default Parameter Values

Description: This procedure uses a default value when no name is provided.

CREATE OR REPLACE PROCEDURE greet_with_default(p_name IN VARCHAR2 DEFAULT 'Guest')
AS
BEGIN
  DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END greet_with_default;
/

6. Procedure with Named Notation

Description: This procedure multiplies two numbers and returns the product.

CREATE OR REPLACE PROCEDURE multiply_numbers(p_num1 IN NUMBER, p_num2 IN NUMBER, p_product OUT NUMBER)
AS
BEGIN
  p_product := p_num1 * p_num2;
END multiply_numbers;
/

7. Procedure with Positional Notation

Description: This anonymous block shows a procedure call using positional arguments.

BEGIN
  multiply_numbers(5, 10, :product);
END;
/

8. Procedure to Insert into a Table

Description: This procedure inserts a new employee row into the employees table.

CREATE OR REPLACE PROCEDURE insert_employee(p_emp_id IN NUMBER, p_emp_name IN VARCHAR2)
AS
BEGIN
  INSERT INTO employees(emp_id, emp_name) VALUES (p_emp_id, p_emp_name);
END insert_employee;
/

9. Procedure to Update a Table

Description: This procedure updates an employee name for a matching employee ID.

CREATE OR REPLACE PROCEDURE update_employee_name(p_emp_id IN NUMBER, p_emp_name IN VARCHAR2)
AS
BEGIN
  UPDATE employees SET emp_name = p_emp_name WHERE emp_id = p_emp_id;
END update_employee_name;
/

10. Procedure to Delete from a Table

Description: This procedure deletes an employee row based on employee ID.

CREATE OR REPLACE PROCEDURE delete_employee(p_emp_id IN NUMBER)
AS
BEGIN
  DELETE FROM employees WHERE emp_id = p_emp_id;
END delete_employee;
/

11. Procedure with Exception Handling

Description: This procedure handles division-by-zero errors gracefully.

CREATE OR REPLACE PROCEDURE safe_divide(p_num1 IN NUMBER, p_num2 IN NUMBER, p_result OUT NUMBER)
AS
BEGIN
  p_result := p_num1 / p_num2;
EXCEPTION
  WHEN ZERO_DIVIDE THEN
    DBMS_OUTPUT.PUT_LINE('Cannot divide by zero');
END safe_divide;
/

12. Procedure with CURSOR FOR LOOP

Description: This procedure loops through employees using a cursor FOR loop and prints each row.

CREATE OR REPLACE PROCEDURE list_employees
AS
  CURSOR emp_cursor IS SELECT emp_id, emp_name FROM employees;
BEGIN
  FOR emp_record IN emp_cursor LOOP
    DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.emp_id || ', Name: ' || emp_record.emp_name);
  END LOOP;
END list_employees;
/

13. Procedure with Explicit Cursor

Description: This procedure fetches one employee name using an explicit cursor.

CREATE OR REPLACE PROCEDURE fetch_employee(p_emp_id IN NUMBER, p_emp_name OUT VARCHAR2)
AS
  CURSOR emp_cursor IS SELECT emp_name FROM employees WHERE emp_id = p_emp_id;
  emp_record emp_cursor%ROWTYPE;
BEGIN
  OPEN emp_cursor;
  FETCH emp_cursor INTO emp_record;
  p_emp_name := emp_record.emp_name;
  CLOSE emp_cursor;
END fetch_employee;
/

14. Procedure with Cursor and Parameters

Description: This procedure lists employees for a given department.

CREATE OR REPLACE PROCEDURE fetch_employee_by_dept(p_dept_id IN NUMBER)
AS
  CURSOR emp_cursor IS SELECT emp_id, emp_name FROM employees WHERE dept_id = p_dept_id;
BEGIN
  FOR emp_record IN emp_cursor LOOP
    DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.emp_id || ', Name: ' || emp_record.emp_name);
  END LOOP;
END fetch_employee_by_dept;
/

15. Procedure with Dynamic SQL

Description: This procedure builds SQL dynamically to count rows in a given table.

CREATE OR REPLACE PROCEDURE execute_dynamic_sql(p_table_name IN VARCHAR2)
AS
  l_sql VARCHAR2(200);
BEGIN
  l_sql := 'SELECT COUNT(*) FROM ' || p_table_name;
  EXECUTE IMMEDIATE l_sql INTO :row_count;
END execute_dynamic_sql;
/

16. Procedure to Create a Table Dynamically

Description: This procedure creates a table using dynamic SQL.

CREATE OR REPLACE PROCEDURE create_table_dynamic(p_table_name IN VARCHAR2)
AS
  l_sql VARCHAR2(200);
BEGIN
  l_sql := 'CREATE TABLE ' || p_table_name || ' (id NUMBER, name VARCHAR2(50))';
  EXECUTE IMMEDIATE l_sql;
END create_table_dynamic;
/

17. Procedure with Bulk Collect

Description: This procedure bulk collects employee IDs into a collection.

CREATE OR REPLACE PROCEDURE bulk_collect_employees(p_emp_ids OUT SYS.ODCINUMBERLIST)
AS
  TYPE emp_table IS TABLE OF employees.emp_id%TYPE;
  l_emp_ids emp_table;
BEGIN
  SELECT emp_id BULK COLLECT INTO l_emp_ids FROM employees;
  p_emp_ids := l_emp_ids;
END bulk_collect_employees;
/

18. Procedure to Handle Null Values

Description: This procedure checks whether a value is null and prints the result.

CREATE OR REPLACE PROCEDURE check_null_value(p_value IN VARCHAR2)
AS
BEGIN
  IF p_value IS NULL THEN
    DBMS_OUTPUT.PUT_LINE('Value is NULL');
  ELSE
    DBMS_OUTPUT.PUT_LINE('Value: ' || p_value);
  END IF;
END check_null_value;
/

19. Procedure to Reverse a String

Description: This procedure reverses the input string and returns the reversed value.

CREATE OR REPLACE PROCEDURE reverse_string(p_input IN VARCHAR2, p_output OUT VARCHAR2)
AS
BEGIN
  p_output := REVERSE(p_input);
END reverse_string;
/

20. Procedure to Generate Fibonacci Sequence

Description: This procedure generates a Fibonacci sequence up to the requested count.

CREATE OR REPLACE PROCEDURE fibonacci_sequence(p_n IN NUMBER, p_result OUT VARCHAR2)
AS
  v_a NUMBER := 0;
  v_b NUMBER := 1;
  v_fib NUMBER;
  v_seq VARCHAR2(100) := '0, 1';
BEGIN
  FOR i IN 3..p_n LOOP
    v_fib := v_a + v_b;
    v_seq := v_seq || ', ' || v_fib;
    v_a := v_b;
    v_b := v_fib;
  END LOOP;
  p_result := v_seq;
END fibonacci_sequence;
/

21. Procedure to Calculate Factorial

Description: This procedure calculates factorial using a loop.

CREATE OR REPLACE PROCEDURE calculate_factorial(p_num IN NUMBER, p_fact OUT NUMBER)
AS
  v_fact NUMBER := 1;
BEGIN
  FOR i IN 1..p_num LOOP
    v_fact := v_fact * i;
  END LOOP;
  p_fact := v_fact;
END calculate_factorial;
/

22. Procedure with PL/SQL Table

Description: This procedure demonstrates a PL/SQL associative array.

CREATE OR REPLACE PROCEDURE process_table
AS
  TYPE num_table IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
  v_nums num_table;
BEGIN
  v_nums(1) := 10;
  v_nums(2) := 20;
  v_nums(3) := 30;
  FOR i IN 1..v_nums.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE('Element ' || i || ': ' || v_nums(i));
  END LOOP;
END process_table;
/

23. Procedure to Calculate Sum of Array Elements

Description: This procedure sums all numbers in a numeric list.

CREATE OR REPLACE PROCEDURE sum_array_elements(p_nums IN SYS.ODCINUMBERLIST, p_sum OUT NUMBER)
AS
  v_sum NUMBER := 0;
BEGIN
  FOR i IN 1..p_nums.COUNT LOOP
    v_sum := v_sum + p_nums(i);
  END LOOP;
  p_sum := v_sum;
END sum_array_elements;
/

24. Procedure to Find Maximum Value in Array

Description: This procedure finds the largest number in a numeric list.

CREATE OR REPLACE PROCEDURE find_max_in_array(p_nums IN SYS.ODCINUMBERLIST, p_max OUT NUMBER)
AS
  v_max NUMBER := p_nums(1);
BEGIN
  FOR i IN 2..p_nums.COUNT LOOP
    IF p_nums(i) > v_max THEN
      v_max := p_nums(i);
    END IF;
  END LOOP;
  p_max := v_max;
END find_max_in_array;
/

25. Procedure to Sort Array

Description: This procedure sorts a numeric list in ascending order.

CREATE OR REPLACE PROCEDURE sort_array(p_nums IN OUT SYS.ODCINUMBERLIST)
AS
BEGIN
  FOR i IN 1..p_nums.COUNT LOOP
    FOR j IN i+1..p_nums.COUNT LOOP
      IF p_nums(i) > p_nums(j) THEN
        p_nums(i) := p_nums(i) + p_nums(j);
        p_nums(j) := p_nums(i) - p_nums(j);
        p_nums(i) := p_nums(i) - p_nums(j);
      END IF;
    END LOOP;
  END LOOP;
END sort_array;
/

26. Procedure to Count Words in a String

Description: This procedure counts words using a regular expression.

CREATE OR REPLACE PROCEDURE count_words(p_str IN VARCHAR2, p_word_count OUT NUMBER)
AS
BEGIN
  p_word_count := REGEXP_COUNT(p_str, '\S+');
END count_words;
/

27. Procedure to Reverse an Array

Description: This procedure reverses the order of numbers in a list.

CREATE OR REPLACE PROCEDURE reverse_array(p_nums IN OUT SYS.ODCINUMBERLIST)
AS
  v_temp NUMBER;
BEGIN
  FOR i IN 1..p_nums.COUNT/2 LOOP
    v_temp := p_nums(i);
    p_nums(i) := p_nums(p_nums.COUNT - i + 1);
    p_nums(p_nums.COUNT - i + 1) := v_temp;
  END LOOP;
END reverse_array;
/

28. Procedure to Calculate GCD

Description: This procedure computes the greatest common divisor using repeated modulo.

CREATE OR REPLACE PROCEDURE calculate_gcd(p_num1 IN NUMBER, p_num2 IN NUMBER, p_gcd OUT NUMBER)
AS
BEGIN
  WHILE p_num2 != 0 LOOP
    p_gcd := p_num1 MOD p_num2;
    p_num1 := p_num2;
    p_num2 := p_gcd;
  END LOOP;
  p_gcd := p_num1;
END calculate_gcd;
/

29. Procedure to Calculate LCM

Description: This procedure calculates the least common multiple using the GCD.

CREATE OR REPLACE PROCEDURE calculate_lcm(p_num1 IN NUMBER, p_num2 IN NUMBER, p_lcm OUT NUMBER)
AS
  v_gcd NUMBER;
BEGIN
  calculate_gcd(p_num1, p_num2, v_gcd);
  p_lcm := (p_num1 * p_num2) / v_gcd;
END calculate_lcm;
/

30. Procedure to Generate Prime Numbers

Description: This procedure builds a list of prime numbers up to a requested limit.

CREATE OR REPLACE PROCEDURE generate_primes(p_n IN NUMBER, p_primes OUT SYS.ODCINUMBERLIST)
AS
  v_count NUMBER := 0;
BEGIN
  FOR i IN 2..p_n LOOP
    IF MOD(i, 2) = 0 THEN
      CONTINUE;
    END IF;
    v_count := 0;
    FOR j IN 2..SQRT(i) LOOP
      IF MOD(i, j) = 0 THEN
        v_count := 1;
        EXIT;
      END IF;
    END LOOP;
    IF v_count = 0 THEN
      p_primes.EXTEND;
      p_primes(p_primes.COUNT) := i;
    END IF;
  END LOOP;
END generate_primes;
/

31. Procedure to Convert Celsius to Fahrenheit

Description: This procedure converts temperature from Celsius to Fahrenheit.

CREATE OR REPLACE PROCEDURE celsius_to_fahrenheit(p_celsius IN NUMBER, p_fahrenheit OUT NUMBER)
AS
BEGIN
  p_fahrenheit := (p_celsius * 9/5) + 32;
END celsius_to_fahrenheit;
/

32. Procedure to Convert Fahrenheit to Celsius

Description: This procedure converts temperature from Fahrenheit to Celsius.

CREATE OR REPLACE PROCEDURE fahrenheit_to_celsius(p_fahrenheit IN NUMBER, p_celsius OUT NUMBER)
AS
BEGIN
  p_celsius := (p_fahrenheit - 32) * 5/9;
END fahrenheit_to_celsius;
/

33. Procedure to Find Sum of Digits

Description: This procedure adds the digits of a number.

CREATE OR REPLACE PROCEDURE sum_of_digits(p_num IN NUMBER, p_sum OUT NUMBER)
AS
  v_digit NUMBER;
BEGIN
  p_sum := 0;
  WHILE p_num > 0 LOOP
    v_digit := p_num MOD 10;
    p_sum := p_sum + v_digit;
    p_num := p_num / 10;
  END LOOP;
END sum_of_digits;
/

34. Procedure to Find Product of Digits

Description: This procedure multiplies the digits of a number.

CREATE OR REPLACE PROCEDURE product_of_digits(p_num IN NUMBER, p_product OUT NUMBER)
AS
  v_digit NUMBER;
BEGIN
  p_product := 1;
  WHILE p_num > 0 LOOP
    v_digit := p_num MOD 10;
    p_product := p_product * v_digit;
    p_num := p_num / 10;
  END LOOP;
END product_of_digits;
/

35. Procedure to Find the Nth Fibonacci Number

Description: This procedure returns a single Fibonacci value for the requested position.

CREATE OR REPLACE PROCEDURE nth_fibonacci(p_n IN NUMBER, p_fib OUT NUMBER)
AS
  v_a NUMBER := 0;
  v_b NUMBER := 1;
  v_temp NUMBER;
BEGIN
  IF p_n = 1 THEN
    p_fib := v_a;
  ELSIF p_n = 2 THEN
    p_fib := v_b;
  ELSE
    FOR i IN 3..p_n LOOP
      v_temp := v_a + v_b;
      v_a := v_b;
      v_b := v_temp;
    END LOOP;
    p_fib := v_b;
  END IF;
END nth_fibonacci;
/

36. Procedure to Reverse a Number

Description: This procedure reverses the digits of a number.

CREATE OR REPLACE PROCEDURE reverse_number(p_num IN NUMBER, p_reverse OUT NUMBER)
AS
  v_digit NUMBER;
BEGIN
  p_reverse := 0;
  WHILE p_num > 0 LOOP
    v_digit := p_num MOD 10;
    p_reverse := (p_reverse * 10) + v_digit;
    p_num := p_num / 10;
  END LOOP;
END reverse_number;
/

37. Procedure to Check Palindrome Number

Description: This procedure checks whether a number is the same forwards and backwards.

CREATE OR REPLACE PROCEDURE check_palindrome_number(p_num IN NUMBER, p_is_palindrome OUT BOOLEAN)
AS
  v_reverse NUMBER;
BEGIN
  reverse_number(p_num, v_reverse);
  IF v_reverse = p_num THEN
    p_is_palindrome := TRUE;
  ELSE
    p_is_palindrome := FALSE;
  END IF;
END check_palindrome_number;
/

38. Procedure to Calculate Power of a Number

Description: This procedure raises a number to a given exponent.

CREATE OR REPLACE PROCEDURE power_of_number(p_base IN NUMBER, p_exponent IN NUMBER, p_power OUT NUMBER)
AS
  v_result NUMBER := 1;
BEGIN
  FOR i IN 1..p_exponent LOOP
    v_result := v_result * p_base;
  END LOOP;
  p_power := v_result;
END power_of_number;
/

39. Procedure to Check Armstrong Number

Description: This procedure checks whether the number equals the sum of its digits raised to the digit count.

CREATE OR REPLACE PROCEDURE check_armstrong_number(p_num IN NUMBER, p_is_armstrong OUT BOOLEAN)
AS
  v_sum NUMBER := 0;
  v_digit NUMBER;
  v_temp NUMBER := p_num;
  v_len NUMBER := LENGTH(TO_CHAR(p_num));
BEGIN
  WHILE v_temp > 0 LOOP
    v_digit := v_temp MOD 10;
    v_sum := v_sum + POWER(v_digit, v_len);
    v_temp := v_temp / 10;
  END LOOP;
  IF v_sum = p_num THEN
    p_is_armstrong := TRUE;
  ELSE
    p_is_armstrong := FALSE;
  END IF;
END check_armstrong_number;
/

40. Procedure to Check Perfect Number

Description: This procedure checks whether the sum of proper divisors equals the number.

CREATE OR REPLACE PROCEDURE check_perfect_number(p_num IN NUMBER, p_is_perfect OUT BOOLEAN)
AS
  v_sum NUMBER := 0;
BEGIN
  FOR i IN 1..p_num/2 LOOP
    IF p_num MOD i = 0 THEN
      v_sum := v_sum + i;
    END IF;
  END LOOP;
  IF v_sum = p_num THEN
    p_is_perfect := TRUE;
  ELSE
    p_is_perfect := FALSE;
  END IF;
END check_perfect_number;
/

41. Procedure to Calculate Simple Interest

Description: This procedure calculates simple interest using principal, rate, and time.

CREATE OR REPLACE PROCEDURE calculate_simple_interest(p_principal IN NUMBER, p_rate IN NUMBER, p_time IN NUMBER, p_si OUT NUMBER)
AS
BEGIN
  p_si := (p_principal * p_rate * p_time) / 100;
END calculate_simple_interest;
/

42. Procedure to Calculate Compound Interest

Description: This procedure calculates compound interest using the power function.

CREATE OR REPLACE PROCEDURE calculate_compound_interest
(p_principal IN NUMBER, p_rate IN NUMBER, p_time IN NUMBER, p_ci OUT NUMBER)
AS
BEGIN
  p_ci := p_principal * POWER((1 + p_rate / 100), p_time) - p_principal;
END calculate_compound_interest;
/

43. Procedure to Calculate Area of Circle

Description: This procedure calculates the area of a circle from the radius.

CREATE OR REPLACE PROCEDURE calculate_area_of_circle(p_radius IN NUMBER, p_area OUT NUMBER)
AS
BEGIN
  p_area := 3.14 * p_radius * p_radius;
END calculate_area_of_circle;
/

44. Procedure to Calculate Perimeter of Circle

Description: This procedure calculates the circumference of a circle.

CREATE OR REPLACE PROCEDURE calculate_perimeter_of_circle(p_radius IN NUMBER, p_perimeter OUT NUMBER)
AS
BEGIN
  p_perimeter := 2 * 3.14 * p_radius;
END calculate_perimeter_of_circle;
/

45. Procedure to Calculate Area of Rectangle

Description: This procedure calculates the area of a rectangle.

CREATE OR REPLACE PROCEDURE calculate_area_of_rectangle(p_length IN NUMBER, p_breadth IN NUMBER, p_area OUT NUMBER)
AS
BEGIN
  p_area := p_length * p_breadth;
END calculate_area_of_rectangle;
/

46. Procedure to Calculate Perimeter of Rectangle

Description: This procedure calculates the perimeter of a rectangle.

CREATE OR REPLACE PROCEDURE calculate_perimeter_of_rectangle(p_length IN NUMBER, p_breadth IN NUMBER, p_perimeter OUT NUMBER)
AS
BEGIN
  p_perimeter := 2 * (p_length + p_breadth);
END calculate_perimeter_of_rectangle;
/

47. Procedure to Calculate Area of Triangle

Description: This procedure calculates the area of a triangle using base and height.

CREATE OR REPLACE PROCEDURE calculate_area_of_triangle(p_base IN NUMBER, p_height IN NUMBER, p_area OUT NUMBER)
AS
BEGIN
  p_area := 0.5 * p_base * p_height;
END calculate_area_of_triangle;
/

48. Procedure to Calculate Perimeter of Triangle

Description: This procedure adds the three sides to compute triangle perimeter.

CREATE OR REPLACE PROCEDURE calculate_perimeter_of_triangle(p_a IN NUMBER, p_b IN NUMBER, p_c IN NUMBER, p_perimeter OUT NUMBER)
AS
BEGIN
  p_perimeter := p_a + p_b + p_c;
END calculate_perimeter_of_triangle;
/

49. Procedure to Calculate Area of Square

Description: This procedure computes the area of a square from one side length.

CREATE OR REPLACE PROCEDURE calculate_area_of_square(p_side IN NUMBER, p_area OUT NUMBER)
AS
BEGIN
  p_area := p_side * p_side;
END calculate_area_of_square;
/

50. Procedure to Calculate Perimeter of Square

Description: This procedure computes the perimeter of a square.

CREATE OR REPLACE PROCEDURE calculate_perimeter_of_square(p_side IN NUMBER, p_perimeter OUT NUMBER)
AS
BEGIN
  p_perimeter := 4 * p_side;
END calculate_perimeter_of_square;
/

51. Procedure to Check Leap Year

Description: This procedure checks whether a year is a leap year.

CREATE OR REPLACE PROCEDURE check_leap_year(p_year IN NUMBER, p_is_leap OUT BOOLEAN)
AS
BEGIN
  IF MOD(p_year, 4) = 0 AND (MOD(p_year, 100) != 0 OR MOD(p_year, 400) = 0) THEN
    p_is_leap := TRUE;
  ELSE
    p_is_leap := FALSE;
  END IF;
END check_leap_year;
/

52. Procedure to Calculate Sum of First N Natural Numbers

Description: This procedure uses the arithmetic series formula to compute the sum.

CREATE OR REPLACE PROCEDURE sum_of_natural_numbers(p_n IN NUMBER, p_sum OUT NUMBER)
AS
BEGIN
  p_sum := (p_n * (p_n + 1)) / 2;
END sum_of_natural_numbers;
/

53. Procedure to Calculate Sum of Squares of First N Natural Numbers

Description: This procedure computes the sum of squares using a closed-form formula.

CREATE OR REPLACE PROCEDURE sum_of_squares(p_n IN NUMBER, p_sum OUT NUMBER)
AS
BEGIN
  p_sum := (p_n * (p_n + 1) * (2 * p_n + 1)) / 6;
END sum_of_squares;
/

54. Procedure to Calculate Sum of Cubes of First N Natural Numbers

Description: This procedure calculates the sum of cubes using the square-of-sum identity.

CREATE OR REPLACE PROCEDURE sum_of_cubes(p_n IN NUMBER, p_sum OUT NUMBER)
AS
BEGIN
  p_sum := POWER((p_n * (p_n + 1) / 2), 2);
END sum_of_cubes;
/

55. Procedure to Convert Binary to Decimal

Description: This procedure converts a binary string to its decimal value.

CREATE OR REPLACE PROCEDURE binary_to_decimal(p_binary IN VARCHAR2, p_decimal OUT NUMBER)
AS
  v_len NUMBER := LENGTH(p_binary);
  v_decimal NUMBER := 0;
BEGIN
  FOR i IN 1..v_len LOOP
    IF SUBSTR(p_binary, v_len - i + 1, 1) = '1' THEN
      v_decimal := v_decimal + POWER(2, i-1);
    END IF;
  END LOOP;
  p_decimal := v_decimal;
END binary_to_decimal;
/

56. Procedure to Convert Decimal to Binary

Description: This procedure converts a decimal number to a binary string.

CREATE OR REPLACE PROCEDURE decimal_to_binary(p_decimal IN NUMBER, p_binary OUT VARCHAR2)
AS
  v_remainder NUMBER;
BEGIN
  p_binary := '';
  WHILE p_decimal > 0 LOOP
    v_remainder := MOD(p_decimal, 2);
    p_binary := TO_CHAR(v_remainder) || p_binary;
    p_decimal := p_decimal / 2;
  END LOOP;
END decimal_to_binary;
/

57. Procedure to Check Strong Number

Description: This procedure checks whether a number equals the sum of factorials of its digits.

CREATE OR REPLACE PROCEDURE check_strong_number(p_num IN NUMBER, p_is_strong OUT BOOLEAN)
AS
  v_temp NUMBER := p_num;
  v_sum NUMBER := 0;
  v_fact NUMBER;
  v_digit NUMBER;
BEGIN
  WHILE v_temp > 0 LOOP
    v_digit := v_temp MOD 10;
    v_fact := 1;
    FOR i IN 1..v_digit LOOP
      v_fact := v_fact * i;
    END LOOP;
    v_sum := v_sum + v_fact;
    v_temp := v_temp / 10;
  END LOOP;
  IF v_sum = p_num THEN
    p_is_strong := TRUE;
  ELSE
    p_is_strong := FALSE;
  END IF;
END check_strong_number;
/

58. Procedure to Check Automorphic Number

Description: This procedure checks whether the square ends with the same digits as the number.

CREATE OR REPLACE PROCEDURE check_automorphic_number(p_num IN NUMBER, p_is_automorphic OUT BOOLEAN)
AS
  v_square NUMBER := p_num * p_num;
BEGIN
  IF SUBSTR(TO_CHAR(v_square), -LENGTH(TO_CHAR(p_num))) = TO_CHAR(p_num) THEN
    p_is_automorphic := TRUE;
  ELSE
    p_is_automorphic := FALSE;
  END IF;
END check_automorphic_number;
/

59. Procedure to Check Harshad Number

Description: This procedure checks whether a number is divisible by the sum of its digits.

CREATE OR REPLACE PROCEDURE check_harshad_number(p_num IN NUMBER, p_is_harshad OUT BOOLEAN)
AS
  v_sum NUMBER := 0;
  v_digit NUMBER;
  v_temp NUMBER := p_num;
BEGIN
  WHILE v_temp > 0 LOOP
    v_digit := v_temp MOD 10;
    v_sum := v_sum + v_digit;
    v_temp := v_temp / 10;
  END LOOP;
  IF p_num MOD v_sum = 0 THEN
    p_is_harshad := TRUE;
  ELSE
    p_is_harshad := FALSE;
  END IF;
END check_harshad_number;
/

60. Procedure to Check Narcissistic Number

Description: This procedure checks whether a number equals the sum of its digits raised to digit count.

CREATE OR REPLACE PROCEDURE check_narcissistic_number(p_num IN NUMBER, p_is_narcissistic OUT BOOLEAN)
AS
  v_temp NUMBER := p_num;
  v_sum NUMBER := 0;
  v_digit NUMBER;
  v_len NUMBER := LENGTH(TO_CHAR(p_num));
BEGIN
  WHILE v_temp > 0 LOOP
    v_digit := v_temp MOD 10;
    v_sum := v_sum + POWER(v_digit, v_len);
    v_temp := v_temp / 10;
  END LOOP;
  IF v_sum = p_num THEN
    p_is_narcissistic := TRUE;
  ELSE
    p_is_narcissistic := FALSE;
  END IF;
END check_narcissistic_number;
/

61. Procedure to Check Happy Number

Description: This procedure checks whether repeated digit-square sums eventually reach 1.

CREATE OR REPLACE PROCEDURE check_happy_number(p_num IN NUMBER, p_is_happy OUT BOOLEAN)
AS
  v_sum NUMBER;
  v_digit NUMBER;
BEGIN
  LOOP
    v_sum := 0;
    WHILE p_num > 0 LOOP
      v_digit := p_num MOD 10;
      v_sum := v_sum + (v_digit * v_digit);
      p_num := p_num / 10;
    END LOOP;
    IF v_sum = 1 THEN
      p_is_happy := TRUE;
      EXIT;
    ELSIF v_sum = 4 THEN
      p_is_happy := FALSE;
      EXIT;
    ELSE
      p_num := v_sum;
    END IF;
  END LOOP;
END check_happy_number;
/

62. Procedure to Check Abundant Number

Description: This procedure checks whether the sum of proper divisors is greater than the number itself.

CREATE OR REPLACE PROCEDURE check_abundant_number(p_num IN NUMBER, p_is_abundant OUT BOOLEAN)
AS
  v_sum NUMBER := 0;
BEGIN
  FOR i IN 1..p_num/2 LOOP
    IF p_num MOD i = 0 THEN
      v_sum := v_sum + i;
    END IF;
  END LOOP;
  IF v_sum > p_num THEN
    p_is_abundant := TRUE;
  ELSE
    p_is_abundant := FALSE;
  END IF;
END check_abundant_number;
/

63. Procedure to Check Perfect Square

Description: This procedure checks whether a number is a perfect square.

CREATE OR REPLACE PROCEDURE check_perfect_square(p_num IN NUMBER, p_is_perfect_square OUT BOOLEAN)
AS
  v_sqrt NUMBER;
BEGIN
  v_sqrt := SQRT(p_num);
  IF v_sqrt = TRUNC(v_sqrt) THEN
    p_is_perfect_square := TRUE;
  ELSE
    p_is_perfect_square := FALSE;
  END IF;
END check_perfect_square;
/

64. Procedure to Check Perfect Cube

Description: This procedure checks whether a number is a perfect cube.

CREATE OR REPLACE PROCEDURE check_perfect_cube(p_num IN NUMBER, p_is_perfect_cube OUT BOOLEAN)
AS
  v_cube_root NUMBER;
BEGIN
  v_cube_root := ROUND(EXP(LN(p_num) / 3));
  IF v_cube_root * v_cube_root * v_cube_root = p_num THEN
    p_is_perfect_cube := TRUE;
  ELSE
    p_is_perfect_cube := FALSE;
  END IF;
END check_perfect_cube;
/

65. Procedure to Check Pythagorean Triplet

Description: This procedure checks whether three numbers satisfy the Pythagorean relation.

CREATE OR REPLACE PROCEDURE check_pythagorean_triplet(p_a IN NUMBER, p_b IN NUMBER, p_c IN NUMBER, p_is_triplet OUT BOOLEAN)
AS
BEGIN
  IF p_a * p_a + p_b * p_b = p_c * p_c THEN
    p_is_triplet := TRUE;
  ELSE
    p_is_triplet := FALSE;
  END IF;
END check_pythagorean_triplet;
/

66. Procedure to Check Amicable Numbers

Description: This procedure checks whether two numbers are amicable.

CREATE OR REPLACE PROCEDURE check_amicable_numbers(p_a IN NUMBER, p_b IN NUMBER, p_are_amicable OUT BOOLEAN)
AS
  v_sum_a NUMBER := 0;
  v_sum_b NUMBER := 0;
BEGIN
  FOR i IN 1..p_a-1 LOOP
    IF p_a MOD i = 0 THEN
      v_sum_a := v_sum_a + i;
    END IF;
  END LOOP;
  FOR i IN 1..p_b-1 LOOP
    IF p_b MOD i = 0 THEN
      v_sum_b := v_sum_b + i;
    END IF;
  END LOOP;
  IF v_sum_a = p_b AND v_sum_b = p_a THEN
    p_are_amicable := TRUE;
  ELSE
    p_are_amicable := FALSE;
  END IF;
END check_amicable_numbers;
/

67. Procedure to Generate Floyd's Triangle

Description: This procedure prints Floyd's triangle row by row.

CREATE OR REPLACE PROCEDURE floyds_triangle(p_rows IN NUMBER)
AS
  v_num NUMBER := 1;
BEGIN
  FOR i IN 1..p_rows LOOP
    FOR j IN 1..i LOOP
      DBMS_OUTPUT.PUT(v_num || ' ');
      v_num := v_num + 1;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END floyds_triangle;
/

68. Procedure to Generate Pascal's Triangle

Description: This procedure prints Pascal's triangle values using array logic.

CREATE OR REPLACE PROCEDURE pascals_triangle(p_rows IN NUMBER)
AS
  TYPE row_array IS VARRAY(100) OF NUMBER;
  v_array row_array;
BEGIN
  v_array := row_array();
  v_array.EXTEND(p_rows + 1);
  v_array(1) := 1;
  FOR i IN 1..p_rows LOOP
    FOR j IN REVERSE 2..i+1 LOOP
      v_array(j) := v_array(j) + v_array(j-1);
    END LOOP;
    FOR j IN 1..i+1 LOOP
      DBMS_OUTPUT.PUT(v_array(j) || ' ');
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END pascals_triangle;
/

69. Procedure to Generate Arithmetic Progression

Description: This procedure creates an arithmetic sequence and stores it in a collection.

CREATE OR REPLACE PROCEDURE generate_arithmetic_progression(p_a IN NUMBER, p_d IN NUMBER, p_n IN NUMBER, p_ap OUT SYS.ODCINUMBERLIST)
AS
  v_term NUMBER;
BEGIN
  FOR i IN 0..p_n-1 LOOP
    v_term := p_a + i * p_d;
    p_ap.EXTEND;
    p_ap(p_ap.COUNT) := v_term;
  END LOOP;
END generate_arithmetic_progression;
/

70. Procedure to Generate Geometric Progression

Description: This procedure creates a geometric sequence and stores it in a collection.

CREATE OR REPLACE PROCEDURE generate_geometric_progression(p_a IN NUMBER, p_r IN NUMBER, p_n IN NUMBER, p_gp OUT SYS.ODCINUMBERLIST)
AS
  v_term NUMBER;
BEGIN
  FOR i IN 0..p_n-1 LOOP
    v_term := p_a * POWER(p_r, i);
    p_gp.EXTEND;
    p_gp(p_gp.COUNT) := v_term;
  END LOOP;
END generate_geometric_progression;
/

71. Procedure to Calculate HCF

Description: This procedure calculates the highest common factor using modulo logic.

CREATE OR REPLACE PROCEDURE calculate_hcf(p_num1 IN NUMBER, p_num2 IN NUMBER, p_hcf OUT NUMBER)
AS
BEGIN
  WHILE p_num2 != 0 LOOP
    p_hcf := p_num1 MOD p_num2;
    p_num1 := p_num2;
    p_num2 := p_hcf;
  END LOOP;
  p_hcf := p_num1;
END calculate_hcf;
/

72. Procedure to Calculate LCM

Description: This procedure calculates the least common multiple using HCF.

CREATE OR REPLACE PROCEDURE calculate_lcm(p_num1 IN NUMBER, p_num2 IN NUMBER, p_lcm OUT NUMBER)
AS
  v_hcf NUMBER;
BEGIN
  calculate_hcf(p_num1, p_num2, v_hcf);
  p_lcm := (p_num1 * p_num2) / v_hcf;
END calculate_lcm;
/

73. Procedure to Print Multiplication Table

Description: This procedure prints a multiplication table for the given number.

CREATE OR REPLACE PROCEDURE print_multiplication_table(p_num IN NUMBER)
AS
BEGIN
  FOR i IN 1..10 LOOP
    DBMS_OUTPUT.PUT_LINE(p_num || ' * ' || i || ' = ' || p_num * i);
  END LOOP;
END print_multiplication_table;
/

74. Procedure to Calculate Nth Prime Number

Description: This procedure returns the Nth prime number.

CREATE OR REPLACE PROCEDURE nth_prime(p_n IN NUMBER, p_prime OUT NUMBER)
AS
  v_count NUMBER := 0;
  v_num NUMBER := 2;
  v_is_prime BOOLEAN;
BEGIN
  LOOP
    v_is_prime := TRUE;
    FOR i IN 2..SQRT(v_num) LOOP
      IF v_num MOD i = 0 THEN
        v_is_prime := FALSE;
        EXIT;
      END IF;
    END LOOP;
    IF v_is_prime THEN
      v_count := v_count + 1;
    END IF;
    IF v_count = p_n THEN
      p_prime := v_num;
      EXIT;
    END IF;
    v_num := v_num + 1;
  END LOOP;
END nth_prime;
/

75. Procedure to Check Perfect Number in a Range

Description: This procedure collects perfect numbers within a requested range.

CREATE OR REPLACE PROCEDURE check_perfect_number_in_range(p_start IN NUMBER, p_end IN NUMBER, p_result OUT SYS.ODCINUMBERLIST)
AS
  v_sum NUMBER;
BEGIN
  FOR v_num IN p_start..p_end LOOP
    v_sum := 0;
    FOR i IN 1..v_num/2 LOOP
      IF v_num MOD i = 0 THEN
        v_sum := v_sum + i;
      END IF;
    END LOOP;
    IF v_sum = v_num THEN
      p_result.EXTEND;
      p_result(p_result.COUNT) := v_num;
    END IF;
  END LOOP;
END check_perfect_number_in_range;
/

76. Procedure to Check Armstrong Number in a Range

Description: This procedure finds all Armstrong numbers in the given range.

CREATE OR REPLACE PROCEDURE check_armstrong_number_in_range(p_start IN NUMBER, p_end IN NUMBER, p_result OUT SYS.ODCINUMBERLIST)
AS
  v_sum NUMBER;
  v_digit NUMBER;
  v_temp NUMBER;
  v_len NUMBER;
BEGIN
  FOR v_num IN p_start..p_end LOOP
    v_temp := v_num;
    v_sum := 0;
    v_len := LENGTH(TO_CHAR(v_num));
    WHILE v_temp > 0 LOOP
      v_digit := v_temp MOD 10;
      v_sum := v_sum + POWER(v_digit, v_len);
      v_temp := v_temp / 10;
    END LOOP;
    IF v_sum = v_num THEN
      p_result.EXTEND;
      p_result(p_result.COUNT) := v_num;
    END IF;
  END LOOP;
END check_armstrong_number_in_range;
/

77. Procedure to Print Right Triangle Pattern

Description: This procedure prints a right-aligned triangle of asterisks.

CREATE OR REPLACE PROCEDURE print_right_triangle(p_rows IN NUMBER)
AS
BEGIN
  FOR i IN 1..p_rows LOOP
    FOR j IN 1..i LOOP
      DBMS_OUTPUT.PUT('*');
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END print_right_triangle;
/

78. Procedure to Print Inverted Triangle Pattern

Description: This procedure prints an inverted triangle of asterisks.

CREATE OR REPLACE PROCEDURE print_inverted_triangle(p_rows IN NUMBER)
AS
BEGIN
  FOR i IN REVERSE 1..p_rows LOOP
    FOR j IN 1..i LOOP
      DBMS_OUTPUT.PUT('*');
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END print_inverted_triangle;
/

79. Procedure to Print Pyramid Pattern

Description: This procedure prints a pyramid star pattern.

CREATE OR REPLACE PROCEDURE print_pyramid(p_rows IN NUMBER)
AS
BEGIN
  FOR i IN 1..p_rows LOOP
    FOR j IN 1..p_rows-i LOOP
      DBMS_OUTPUT.PUT(' ');
    END LOOP;
    FOR j IN 1..(2*i-1) LOOP
      DBMS_OUTPUT.PUT('*');
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END print_pyramid;
/

80. Procedure to Print Diamond Pattern

Description: This procedure prints a diamond made of asterisks.

CREATE OR REPLACE PROCEDURE print_diamond(p_rows IN NUMBER)
AS
BEGIN
  FOR i IN 1..p_rows LOOP
    FOR j IN 1..p_rows-i LOOP
      DBMS_OUTPUT.PUT(' ');
    END LOOP;
    FOR j IN 1..(2*i-1) LOOP
      DBMS_OUTPUT.PUT('*');
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
  FOR i IN REVERSE 1..p_rows-1 LOOP
    FOR j IN 1..p_rows-i LOOP
      DBMS_OUTPUT.PUT(' ');
    END LOOP;
    FOR j IN 1..(2*i-1) LOOP
      DBMS_OUTPUT.PUT('*');
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END print_diamond;
/

81. Procedure to Check Krishnamurthy Number

Description: This procedure checks whether a number equals the sum of factorials of its digits.

CREATE OR REPLACE PROCEDURE check_krishnamurthy_number(p_num IN NUMBER, p_is_krishnamurthy OUT BOOLEAN)
AS
  v_sum NUMBER := 0;
  v_digit NUMBER;
  v_fact NUMBER;
BEGIN
  FOR i IN 1..LENGTH(TO_CHAR(p_num)) LOOP
    v_digit := p_num MOD 10;
    v_fact := 1;
    FOR j IN 1..v_digit LOOP
      v_fact := v_fact * j;
    END LOOP;
    v_sum := v_sum + v_fact;
    p_num := p_num / 10;
  END LOOP;
  IF v_sum = p_num THEN
    p_is_krishnamurthy := TRUE;
  ELSE
    p_is_krishnamurthy := FALSE;
  END IF;
END check_krishnamurthy_number;
/

82. Procedure to Check Special Number

Description: This procedure checks a number using digit sum and product logic.

CREATE OR REPLACE PROCEDURE check_special_number(p_num IN NUMBER, p_is_special OUT BOOLEAN)
AS
  v_sum NUMBER := 0;
  v_product NUMBER := 1;
  v_digit NUMBER;
BEGIN
  WHILE p_num > 0 LOOP
    v_digit := p_num MOD 10;
    v_sum := v_sum + v_digit;
    v_product := v_product * v_digit;
    p_num := p_num / 10;
  END LOOP;
  IF v_sum + v_product = p_num THEN
    p_is_special := TRUE;
  ELSE
    p_is_special := FALSE;
  END IF;
END check_special_number;
/

83. Procedure to Calculate Sum of Odd Numbers

Description: This procedure calculates the sum of the first N odd numbers.

CREATE OR REPLACE PROCEDURE sum_of_odd_numbers(p_n IN NUMBER, p_sum OUT NUMBER)
AS
BEGIN
  p_sum := 0;
  FOR i IN 1..p_n LOOP
    p_sum := p_sum + (2 * i - 1);
  END LOOP;
END sum_of_odd_numbers;
/

84. Procedure to Calculate Sum of Even Numbers

Description: This procedure calculates the sum of the first N even numbers.

CREATE OR REPLACE PROCEDURE sum_of_even_numbers(p_n IN NUMBER, p_sum OUT NUMBER)
AS
BEGIN
  p_sum := 0;
  FOR i IN 1..p_n LOOP
    p_sum := p_sum + (2 * i);
  END LOOP;
END sum_of_even_numbers;
/

85. Procedure to Print Hollow Square Pattern

Description: This procedure prints a hollow square using asterisks.

CREATE OR REPLACE PROCEDURE print_hollow_square(p_size IN NUMBER)
AS
BEGIN
  FOR i IN 1..p_size LOOP
    FOR j IN 1..p_size LOOP
      IF i = 1 OR i = p_size OR j = 1 OR j = p_size THEN
        DBMS_OUTPUT.PUT('*');
      ELSE
        DBMS_OUTPUT.PUT(' ');
      END IF;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END print_hollow_square;
/

86. Procedure to Convert Decimal to Hexadecimal

Description: This procedure converts a decimal number into hexadecimal notation.

CREATE OR REPLACE PROCEDURE decimal_to_hexadecimal(p_decimal IN NUMBER, p_hexadecimal OUT VARCHAR2)
AS
  v_remainder NUMBER;
BEGIN
  p_hexadecimal := '';
  WHILE p_decimal > 0 LOOP
    v_remainder := MOD(p_decimal, 16);
    p_hexadecimal := CASE
      WHEN v_remainder < 10 THEN TO_CHAR(v_remainder)
      ELSE CHR(55 + v_remainder)
    END || p_hexadecimal;
    p_decimal := p_decimal / 16;
  END LOOP;
END decimal_to_hexadecimal;
/

87. Procedure to Convert Hexadecimal to Decimal

Description: This procedure converts a hexadecimal string into a decimal number.

CREATE OR REPLACE PROCEDURE hexadecimal_to_decimal(p_hexadecimal IN VARCHAR2, p_decimal OUT NUMBER)
AS
  v_len NUMBER := LENGTH(p_hexadecimal);
  v_decimal NUMBER := 0;
  v_digit NUMBER;
BEGIN
  FOR i IN 1..v_len LOOP
    v_digit := CASE
      WHEN SUBSTR(p_hexadecimal, i, 1) BETWEEN '0' AND '9' THEN TO_NUMBER(SUBSTR(p_hexadecimal, i, 1))
      ELSE ASCII(SUBSTR(p_hexadecimal, i, 1)) - 55
    END;
    v_decimal := v_decimal + v_digit * POWER(16, v_len - i);
  END LOOP;
  p_decimal := v_decimal;
END hexadecimal_to_decimal;
/

88. Procedure to Convert Binary to Octal

Description: This procedure converts a binary value to octal by way of decimal conversion.

CREATE OR REPLACE PROCEDURE binary_to_octal(p_binary IN VARCHAR2, p_octal OUT VARCHAR2)
AS
  v_decimal NUMBER;
BEGIN
  binary_to_decimal(p_binary, v_decimal);
  decimal_to_octal(v_decimal, p_octal);
END binary_to_octal;
/

89. Procedure to Convert Octal to Binary

Description: This procedure converts octal to binary by way of decimal conversion.

CREATE OR REPLACE PROCEDURE octal_to_binary(p_octal IN VARCHAR2, p_binary OUT VARCHAR2)
AS
  v_decimal NUMBER;
BEGIN
  octal_to_decimal(p_octal, v_decimal);
  decimal_to_binary(v_decimal, p_binary);
END octal_to_binary;
/

90. Procedure to Convert Decimal to Octal

Description: This procedure converts a decimal number into octal notation.

CREATE OR REPLACE PROCEDURE decimal_to_octal(p_decimal IN NUMBER, p_octal OUT VARCHAR2)
AS
  v_remainder NUMBER;
BEGIN
  p_octal := '';
  WHILE p_decimal > 0 LOOP
    v_remainder := MOD(p_decimal, 8);
    p_octal := TO_CHAR(v_remainder) || p_octal;
    p_decimal := p_decimal / 8;
  END LOOP;
END decimal_to_octal;
/

91. Procedure to Convert Octal to Decimal

Description: This procedure converts an octal string into decimal form.

CREATE OR REPLACE PROCEDURE octal_to_decimal(p_octal IN VARCHAR2, p_decimal OUT NUMBER)
AS
  v_len NUMBER := LENGTH(p_octal);
  v_decimal NUMBER := 0;
  v_digit NUMBER;
BEGIN
  FOR i IN 1..v_len LOOP
    v_digit := TO_NUMBER(SUBSTR(p_octal, i, 1));
    v_decimal := v_decimal + v_digit * POWER(8, v_len - i);
  END LOOP;
  p_decimal := v_decimal;
END octal_to_decimal;
/

92. Procedure to Check Prime Number

Description: This procedure checks whether a number is prime.

CREATE OR REPLACE PROCEDURE check_prime_number(p_num IN NUMBER, p_is_prime OUT BOOLEAN)
AS
BEGIN
  p_is_prime := TRUE;
  FOR i IN 2..SQRT(p_num) LOOP
    IF p_num MOD i = 0 THEN
      p_is_prime := FALSE;
      EXIT;
    END IF;
  END LOOP;
END check_prime_number;
/

93. Procedure to Find Factorial of a Number

Description: This procedure calculates factorial using a loop.

CREATE OR REPLACE PROCEDURE find_factorial(p_num IN NUMBER, p_factorial OUT NUMBER)
AS
  v_fact NUMBER := 1;
BEGIN
  FOR i IN 1..p_num LOOP
    v_fact := v_fact * i;
  END LOOP;
  p_factorial := v_fact;
END find_factorial;
/

94. Procedure to Swap Two Numbers

Description: This procedure swaps two numeric values using IN OUT parameters.

CREATE OR REPLACE PROCEDURE swap_numbers(p_num1 IN OUT NUMBER, p_num2 IN OUT NUMBER)
AS
  v_temp NUMBER;
BEGIN
  v_temp := p_num1;
  p_num1 := p_num2;
  p_num2 := v_temp;
END swap_numbers;
/

95. Procedure to Calculate Sum of First N Primes

Description: This procedure sums the first N prime numbers.

CREATE OR REPLACE PROCEDURE sum_of_first_n_primes(p_n IN NUMBER, p_sum OUT NUMBER)
AS
  v_sum NUMBER := 0;
  v_count NUMBER := 0;
  v_num NUMBER := 2;
  v_is_prime BOOLEAN;
BEGIN
  LOOP
    v_is_prime := TRUE;
    FOR i IN 2..SQRT(v_num) LOOP
      IF v_num MOD i = 0 THEN
        v_is_prime := FALSE;
        EXIT;
      END IF;
    END LOOP;
    IF v_is_prime THEN
      v_sum := v_sum + v_num;
      v_count := v_count + 1;
    END IF;
    EXIT WHEN v_count = p_n;
    v_num := v_num + 1;
  END LOOP;
  p_sum := v_sum;
END sum_of_first_n_primes;
/

96. Procedure to Generate Fibonacci Series

Description: This procedure stores a Fibonacci sequence in a collection.

CREATE OR REPLACE PROCEDURE generate_fibonacci_series(p_n IN NUMBER, p_series OUT SYS.ODCINUMBERLIST)
AS
  v_a NUMBER := 0;
  v_b NUMBER := 1;
  v_fib NUMBER;
BEGIN
  p_series.EXTEND;
  p_series(p_series.COUNT) := v_a;
  p_series.EXTEND;
  p_series(p_series.COUNT) := v_b;
  FOR i IN 3..p_n LOOP
    v_fib := v_a + v_b;
    p_series.EXTEND;
    p_series(p_series.COUNT) := v_fib;
    v_a := v_b;
    v_b := v_fib;
  END LOOP;
END generate_fibonacci_series;
/

97. Procedure to Reverse an Integer

Description: This procedure reverses the digits of an integer.

CREATE OR REPLACE PROCEDURE reverse_integer(p_num IN NUMBER, p_reverse OUT NUMBER)
AS
  v_digit NUMBER;
BEGIN
  p_reverse := 0;
  WHILE p_num > 0 LOOP
    v_digit := p_num MOD 10;
    p_reverse := p_reverse * 10 + v_digit;
    p_num := p_num / 10;
  END LOOP;
END reverse_integer;
/

98. Procedure to Print Pascal's Triangle

Description: This procedure prints Pascal's triangle using an array structure.

CREATE OR REPLACE PROCEDURE print_pascals_triangle(p_rows IN NUMBER)
AS
  TYPE row_array IS VARRAY(100) OF NUMBER;
  v_array row_array := row_array();
BEGIN
  v_array.EXTEND(p_rows + 1);
  v_array(1) := 1;
  FOR i IN 1..p_rows LOOP
    FOR j IN REVERSE 2..i+1 LOOP
      v_array(j) := v_array(j) + v_array(j-1);
    END LOOP;
    FOR j IN 1..i+1 LOOP
      DBMS_OUTPUT.PUT(v_array(j) || ' ');
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END print_pascals_triangle;
/

99. Procedure to Print Floyd's Triangle

Description: This procedure prints Floyd's triangle again in a compact form.

CREATE OR REPLACE PROCEDURE print_floyds_triangle(p_rows IN NUMBER)
AS
  v_num NUMBER := 1;
BEGIN
  FOR i IN 1..p_rows LOOP
    FOR j IN 1..i LOOP
      DBMS_OUTPUT.PUT(v_num || ' ');
      v_num := v_num + 1;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END print_floyds_triangle;
/

100. Procedure to Calculate Sum of First N Odd Numbers

Description: This procedure calculates the sum of the first N odd numbers.

CREATE OR REPLACE PROCEDURE sum_of_first_n_odd_numbers(p_n IN NUMBER, p_sum OUT NUMBER)
AS
BEGIN
  p_sum := 0;
  FOR i IN 1..p_n LOOP
    p_sum := p_sum + (2 * i - 1);
  END LOOP;
END sum_of_first_n_odd_numbers;
/

Note: Several examples are illustrative and may need small adjustments before running in a real Oracle environment.

No comments:

Post a Comment