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