Oracle PL/SQL Function 100 programs

Basic PL/SQL Function Examples

1. Simple Function to Add Two Numbers

CREATE OR REPLACE FUNCTION add_numbers (a NUMBER, b NUMBER) RETURN NUMBER IS
BEGIN
    RETURN a + b;
END;
/

2. Function to Calculate Area of a Circle

CREATE OR REPLACE FUNCTION area_of_circle (radius NUMBER) RETURN NUMBER IS
BEGIN
    RETURN 3.14159 * radius * radius;
END;
/

3. Function to Get Employee Full Name

CREATE OR REPLACE FUNCTION get_full_name (emp_id NUMBER) RETURN VARCHAR2 IS
    first_name VARCHAR2(50);
    last_name VARCHAR2(50);
    full_name VARCHAR2(100);
BEGIN
    SELECT first_name, last_name
    INTO first_name, last_name
    FROM employees
    WHERE employee_id = emp_id;

    full_name := first_name || ' ' || last_name;
    RETURN full_name;
END;
/

4. Function to Calculate Factorial

CREATE OR REPLACE FUNCTION factorial (n NUMBER) RETURN NUMBER IS
    result NUMBER := 1;
BEGIN
    FOR i IN 1..n LOOP
        result := result * i;
    END LOOP;
    RETURN result;
END;
/

5. Function to Check if Number is Even

CREATE OR REPLACE FUNCTION is_even (n NUMBER) RETURN BOOLEAN IS
BEGIN
    RETURN MOD(n, 2) = 0;
END;
/

6. Function to Convert Celsius to Fahrenheit

CREATE OR REPLACE FUNCTION celsius_to_fahrenheit (celsius NUMBER) RETURN NUMBER IS
BEGIN
    RETURN (celsius * 9/5) + 32;
END;
/

7. Function to Calculate Age from Date of Birth

CREATE OR REPLACE FUNCTION calculate_age (dob DATE) RETURN NUMBER IS
BEGIN
    RETURN FLOOR(MONTHS_BETWEEN(SYSDATE, dob) / 12);
END;
/

8. Function to Get Department Name

CREATE OR REPLACE FUNCTION get_department_name (dept_id NUMBER) RETURN VARCHAR2 IS
    dept_name VARCHAR2(100);
BEGIN
    SELECT department_name
    INTO dept_name
    FROM departments
    WHERE department_id = dept_id;

    RETURN dept_name;
END;
/

9. Function to Calculate Simple Interest

CREATE OR REPLACE FUNCTION calculate_interest
(
    principal NUMBER,
    rate NUMBER,
    time NUMBER
) RETURN NUMBER IS
BEGIN
    RETURN (principal * rate * time) / 100;
END;
/

10. Function to Reverse a String

CREATE OR REPLACE FUNCTION reverse_string (input_str VARCHAR2) RETURN VARCHAR2 IS
    reversed_str VARCHAR2(4000);
BEGIN
    FOR i IN REVERSE 1..LENGTH(input_str) LOOP
        reversed_str := reversed_str || SUBSTR(input_str, i, 1);
    END LOOP;
    RETURN reversed_str;
END;
/

Number and String Functions

11. Function to Get the Maximum of Two Numbers

CREATE OR REPLACE FUNCTION max_of_two (a NUMBER, b NUMBER) RETURN NUMBER IS
BEGIN
    IF a > b THEN
        RETURN a;
    ELSE
        RETURN b;
    END IF;
END;
/

12. Function to Get the Minimum of Two Numbers

CREATE OR REPLACE FUNCTION min_of_two (a NUMBER, b NUMBER) RETURN NUMBER IS
BEGIN
    IF a < b THEN
        RETURN a;
    ELSE
        RETURN b;
    END IF;
END;
/

13. Function to Calculate Power of a Number

CREATE OR REPLACE FUNCTION power_of (base NUMBER, exponent NUMBER) RETURN NUMBER IS
    result NUMBER := 1;
BEGIN
    FOR i IN 1..exponent LOOP
        result := result * base;
    END LOOP;
    RETURN result;
END;
/

14. Function to Convert String to Upper Case

CREATE OR REPLACE FUNCTION to_upper_case (input_str VARCHAR2) RETURN VARCHAR2 IS
BEGIN
    RETURN UPPER(input_str);
END;
/

15. Function to Convert String to Lower Case

CREATE OR REPLACE FUNCTION to_lower_case (input_str VARCHAR2) RETURN VARCHAR2 IS
BEGIN
    RETURN LOWER(input_str);
END;
/

Employee and Database Functions

16. Function to Count Number of Employees in a Department

CREATE OR REPLACE FUNCTION count_employees_in_dept (dept_id NUMBER) RETURN NUMBER IS
    emp_count NUMBER;
BEGIN
    SELECT COUNT(*)
    INTO emp_count
    FROM employees
    WHERE department_id = dept_id;

    RETURN emp_count;
END;
/

17. Function to Get Employee Salary

CREATE OR REPLACE FUNCTION get_salary (emp_id NUMBER) RETURN NUMBER IS
    salary NUMBER;
BEGIN
    SELECT salary
    INTO salary
    FROM employees
    WHERE employee_id = emp_id;

    RETURN salary;
END;
/

18. Function to Check if Number is Prime

CREATE OR REPLACE FUNCTION is_prime (n NUMBER) RETURN BOOLEAN IS
BEGIN
    IF n < 2 THEN
        RETURN FALSE;
    END IF;

    FOR i IN 2..FLOOR(SQRT(n)) LOOP
        IF MOD(n, i) = 0 THEN
            RETURN FALSE;
        END IF;
    END LOOP;

    RETURN TRUE;
END;
/

19. Function to Get Last Day of the Month

CREATE OR REPLACE FUNCTION get_last_day (input_date DATE) RETURN DATE IS
BEGIN
    RETURN LAST_DAY(input_date);
END;
/

20. Function to Get First Day of the Month

CREATE OR REPLACE FUNCTION get_first_day (input_date DATE) RETURN DATE IS
BEGIN
    RETURN TRUNC(input_date, 'MM');
END;
/

Mathematical and Conversion Functions

21. Function to Calculate Square Root

CREATE OR REPLACE FUNCTION calculate_square_root (n NUMBER) RETURN NUMBER IS
BEGIN
    RETURN SQRT(n);
END;
/

22. Function to Calculate Compound Interest

CREATE OR REPLACE FUNCTION calculate_compound_interest
(
    principal NUMBER,
    rate NUMBER,
    time NUMBER
) RETURN NUMBER IS
BEGIN
    RETURN principal * POWER((1 + rate / 100), time) - principal;
END;
/

23. Function to Get Employee's Manager Name

CREATE OR REPLACE FUNCTION get_manager_name (emp_id NUMBER) RETURN VARCHAR2 IS
    manager_id NUMBER;
    manager_name VARCHAR2(100);
BEGIN
    SELECT manager_id
    INTO manager_id
    FROM employees
    WHERE employee_id = emp_id;

    SELECT first_name || ' ' || last_name
    INTO manager_name
    FROM employees
    WHERE employee_id = manager_id;

    RETURN manager_name;
END;
/

24. Function to Convert Number to String

CREATE OR REPLACE FUNCTION number_to_string (n NUMBER) RETURN VARCHAR2 IS
BEGIN
    RETURN TO_CHAR(n);
END;
/

25. Function to Convert String to Number

CREATE OR REPLACE FUNCTION string_to_number (input_str VARCHAR2) RETURN NUMBER IS
BEGIN
    RETURN TO_NUMBER(input_str);
END;
/

26. Function to Check Leap Year

CREATE OR REPLACE FUNCTION is_leap_year (year NUMBER) RETURN BOOLEAN IS
BEGIN
    RETURN MOD(year, 4) = 0
       AND (MOD(year, 100) != 0 OR MOD(year, 400) = 0);
END;
/

27. Function to Get Employee Job Title

CREATE OR REPLACE FUNCTION get_job_title (emp_id NUMBER) RETURN VARCHAR2 IS
    job_title VARCHAR2(100);
BEGIN
    SELECT job_id
    INTO job_title
    FROM employees
    WHERE employee_id = emp_id;

    RETURN job_title;
END;
/

28. Function to Calculate Gross Salary

CREATE OR REPLACE FUNCTION calculate_gross_salary
(
    salary NUMBER,
    bonus NUMBER
) RETURN NUMBER IS
BEGIN
    RETURN salary + bonus;
END;
/

29. Function to Calculate Net Salary

CREATE OR REPLACE FUNCTION calculate_net_salary
(
    gross_salary NUMBER,
    tax NUMBER
) RETURN NUMBER IS
BEGIN
    RETURN gross_salary - tax;
END;
/

30. Function to Check if String Contains a Substring

CREATE OR REPLACE FUNCTION contains_substring
(
    main_str VARCHAR2,
    sub_str VARCHAR2
) RETURN BOOLEAN IS
BEGIN
    RETURN INSTR(main_str, sub_str) > 0;
END;
/

Advanced PL/SQL Function Examples

31. Function to Get Employee Age

CREATE OR REPLACE FUNCTION get_employee_age (emp_id NUMBER) RETURN NUMBER IS
    dob DATE;
BEGIN
    SELECT date_of_birth INTO dob
    FROM employees
    WHERE employee_id = emp_id;

    RETURN calculate_age(dob);
END;
/

32. Function to Calculate Length of String

CREATE OR REPLACE FUNCTION string_length (input_str VARCHAR2) RETURN NUMBER IS
BEGIN
    RETURN LENGTH(input_str);
END;
/

33. Function to Find Greatest of Three Numbers

CREATE OR REPLACE FUNCTION greatest_of_three
(
    a NUMBER,
    b NUMBER,
    c NUMBER
) RETURN NUMBER IS
BEGIN
    RETURN GREATEST(a, b, c);
END;
/

34. Function to Find Least of Three Numbers

CREATE OR REPLACE FUNCTION least_of_three
(
    a NUMBER,
    b NUMBER,
    c NUMBER
) RETURN NUMBER IS
BEGIN
    RETURN LEAST(a, b, c);
END;
/

35. Function to Convert Number to Binary

CREATE OR REPLACE FUNCTION number_to_binary (n NUMBER) RETURN VARCHAR2 IS
    binary_str VARCHAR2(100);
    v_num NUMBER := n;
BEGIN
    IF v_num = 0 THEN
        RETURN '0';
    END IF;

    WHILE v_num > 0 LOOP
        binary_str := MOD(v_num, 2) || binary_str;
        v_num := FLOOR(v_num / 2);
    END LOOP;

    RETURN binary_str;
END;
/

36. Function to Convert Binary to Number

CREATE OR REPLACE FUNCTION binary_to_number (binary_str VARCHAR2) RETURN NUMBER IS
    result NUMBER := 0;
BEGIN
    FOR i IN 1..LENGTH(binary_str) LOOP
        result := result * 2 + TO_NUMBER(SUBSTR(binary_str, i, 1));
    END LOOP;
    RETURN result;
END;
/

37. Function to Get Department Manager Name

CREATE OR REPLACE FUNCTION get_dept_manager_name (dept_id NUMBER) RETURN VARCHAR2 IS
    manager_id NUMBER;
    manager_name VARCHAR2(100);
BEGIN
    SELECT manager_id INTO manager_id
    FROM departments
    WHERE department_id = dept_id;

    SELECT first_name || ' ' || last_name INTO manager_name
    FROM employees
    WHERE employee_id = manager_id;

    RETURN manager_name;
END;
/

38. Function to Count Number of Departments

CREATE OR REPLACE FUNCTION count_departments RETURN NUMBER IS
    dept_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO dept_count FROM departments;
    RETURN dept_count;
END;
/

39. Function to Check if a String is Palindrome

CREATE OR REPLACE FUNCTION is_palindrome (input_str VARCHAR2) RETURN BOOLEAN IS
BEGIN
    RETURN input_str = reverse_string(input_str);
END;
/

40. Function to Calculate Employee's Years of Service

CREATE OR REPLACE FUNCTION years_of_service (emp_id NUMBER) RETURN NUMBER IS
    hire_date DATE;
BEGIN
    SELECT hire_date INTO hire_date
    FROM employees
    WHERE employee_id = emp_id;

    RETURN FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date) / 12);
END;
/

Conversion and Employee Utility Functions

41. Function to Convert Number to Hexadecimal

CREATE OR REPLACE FUNCTION number_to_hexadecimal (n NUMBER) RETURN VARCHAR2 IS
BEGIN
    RETURN TO_CHAR(n, 'XXXX');
END;
/

42. Function to Convert Hexadecimal to Number

CREATE OR REPLACE FUNCTION hexadecimal_to_number (hex_str VARCHAR2) RETURN NUMBER IS
BEGIN
    RETURN TO_NUMBER(hex_str, 'XXXX');
END;
/

43. Function to Get Employee Hire Date

CREATE OR REPLACE FUNCTION get_hire_date (emp_id NUMBER) RETURN DATE IS
    hire_date DATE;
BEGIN
    SELECT hire_date INTO hire_date
    FROM employees
    WHERE employee_id = emp_id;

    RETURN hire_date;
END;
/

44. Function to Calculate Fibonacci Series up to N Terms

CREATE OR REPLACE FUNCTION fibonacci (n NUMBER) RETURN VARCHAR2 IS
    a NUMBER := 0;
    b NUMBER := 1;
    c NUMBER;
    fib_series VARCHAR2(4000) := '0';
BEGIN
    FOR i IN 2..n LOOP
        c := a + b;
        a := b;
        b := c;
        fib_series := fib_series || ', ' || TO_CHAR(c);
    END LOOP;
    RETURN fib_series;
END;
/

45. Function to Check if Employee Exists

CREATE OR REPLACE FUNCTION employee_exists (emp_id NUMBER) RETURN BOOLEAN IS
    emp_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO emp_count
    FROM employees
    WHERE employee_id = emp_id;

    RETURN emp_count > 0;
END;
/

46. Function to Calculate Sum of Digits

CREATE OR REPLACE FUNCTION sum_of_digits (n NUMBER) RETURN NUMBER IS
    sum_value NUMBER := 0;
    v_num NUMBER := n;
BEGIN
    WHILE v_num > 0 LOOP
        sum_value := sum_value + MOD(v_num, 10);
        v_num := FLOOR(v_num / 10);
    END LOOP;
    RETURN sum_value;
END;
/

47. Function to Get Employee Email

CREATE OR REPLACE FUNCTION get_email (emp_id NUMBER) RETURN VARCHAR2 IS
    email VARCHAR2(100);
BEGIN
    SELECT email INTO email
    FROM employees
    WHERE employee_id = emp_id;

    RETURN email;
END;
/

48. Function to Check if a Year is a Leap Year

CREATE OR REPLACE FUNCTION check_leap_year (year NUMBER) RETURN BOOLEAN IS
BEGIN
    RETURN MOD(year, 4) = 0
       AND (MOD(year, 100) != 0 OR MOD(year, 400) = 0);
END;
/

49. Function to Find Greatest Common Divisor (GCD)

CREATE OR REPLACE FUNCTION gcd (a NUMBER, b NUMBER) RETURN NUMBER IS
    x NUMBER := ABS(a);
    y NUMBER := ABS(b);
    temp NUMBER;
BEGIN
    WHILE y != 0 LOOP
        temp := y;
        y := MOD(x, y);
        x := temp;
    END LOOP;

    RETURN x;
END;
/

50. Function to Calculate Least Common Multiple (LCM)

CREATE OR REPLACE FUNCTION lcm (a NUMBER, b NUMBER) RETURN NUMBER IS
BEGIN
    RETURN ABS(a * b) / gcd(a, b);
END;
/

Employee and Business Functions

51. Function to Get Employee's Department Name

CREATE OR REPLACE FUNCTION get_emp_department_name (emp_id NUMBER) RETURN VARCHAR2 IS
    dept_name VARCHAR2(100);
BEGIN
    SELECT d.department_name
    INTO dept_name
    FROM employees e
    JOIN departments d
      ON e.department_id = d.department_id
    WHERE e.employee_id = emp_id;

    RETURN dept_name;
END;
/

52. Function to Calculate Sum of Natural Numbers

CREATE OR REPLACE FUNCTION sum_of_natural_numbers (n NUMBER) RETURN NUMBER IS
BEGIN
    RETURN (n * (n + 1)) / 2;
END;
/

53. Function to Get Employee's Job Title

CREATE OR REPLACE FUNCTION get_emp_job_title (emp_id NUMBER) RETURN VARCHAR2 IS
    job_title VARCHAR2(100);
BEGIN
    SELECT job_id INTO job_title
    FROM employees
    WHERE employee_id = emp_id;

    RETURN job_title;
END;
/

54. Function to Convert Decimal to Binary

CREATE OR REPLACE FUNCTION decimal_to_binary (n NUMBER) RETURN VARCHAR2 IS
    binary_str VARCHAR2(100);
    v_num NUMBER := n;
BEGIN
    IF v_num = 0 THEN
        RETURN '0';
    END IF;

    WHILE v_num > 0 LOOP
        binary_str := MOD(v_num, 2) || binary_str;
        v_num := FLOOR(v_num / 2);
    END LOOP;

    RETURN binary_str;
END;
/

55. Function to Calculate Employee Bonus

CREATE OR REPLACE FUNCTION calculate_employee_bonus (emp_id NUMBER) RETURN NUMBER IS
    salary NUMBER;
    bonus NUMBER;
BEGIN
    SELECT salary INTO salary
    FROM employees
    WHERE employee_id = emp_id;

    bonus := salary * 0.1;
    RETURN bonus;
END;
/

56. Function to Convert Binary to Decimal

CREATE OR REPLACE FUNCTION binary_to_decimal (binary_str VARCHAR2) RETURN NUMBER IS
    result NUMBER := 0;
BEGIN
    FOR i IN 1..LENGTH(binary_str) LOOP
        result := result * 2 + TO_NUMBER(SUBSTR(binary_str, i, 1));
    END LOOP;
    RETURN result;
END;
/

57. Function to Calculate Employee's Retirement Age

CREATE OR REPLACE FUNCTION retirement_age (emp_id NUMBER) RETURN NUMBER IS
    dob DATE;
BEGIN
    SELECT date_of_birth INTO dob
    FROM employees
    WHERE employee_id = emp_id;

    RETURN 65 - calculate_age(dob);
END;
/

58. Function to Get Employee's Contact Information

CREATE OR REPLACE FUNCTION get_contact_info (emp_id NUMBER) RETURN VARCHAR2 IS
    phone VARCHAR2(20);
    email VARCHAR2(100);
BEGIN
    SELECT phone_number, email
    INTO phone, email
    FROM employees
    WHERE employee_id = emp_id;

    RETURN 'Phone: ' || phone || ', Email: ' || email;
END;
/

59. Function to Calculate Employee's Total Compensation

CREATE OR REPLACE FUNCTION total_compensation (emp_id NUMBER) RETURN NUMBER IS
    salary NUMBER;
    bonus NUMBER;
BEGIN
    SELECT salary INTO salary
    FROM employees
    WHERE employee_id = emp_id;

    bonus := calculate_employee_bonus(emp_id);
    RETURN salary + bonus;
END;
/

60. Function to Convert Fahrenheit to Celsius

CREATE OR REPLACE FUNCTION fahrenheit_to_celsius (fahrenheit NUMBER) RETURN NUMBER IS
BEGIN
    RETURN (fahrenheit - 32) * 5/9;
END;
/

Date, Service and Utility Functions

61. Function to Get Employee's Address

CREATE OR REPLACE FUNCTION get_address (emp_id NUMBER) RETURN VARCHAR2 IS
    address VARCHAR2(200);
BEGIN
    SELECT address INTO address
    FROM employees
    WHERE employee_id = emp_id;

    RETURN address;
END;
/

62. Function to Calculate Length of Service

CREATE OR REPLACE FUNCTION length_of_service (emp_id NUMBER) RETURN NUMBER IS
    hire_date DATE;
BEGIN
    SELECT hire_date INTO hire_date
    FROM employees
    WHERE employee_id = emp_id;

    RETURN FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date) / 12);
END;
/

63. Function to Convert Date to Julian Day

CREATE OR REPLACE FUNCTION date_to_julian (input_date DATE) RETURN NUMBER IS
BEGIN
    RETURN TO_NUMBER(TO_CHAR(input_date, 'J'));
END;
/

64. Function to Calculate Simple Average

CREATE OR REPLACE FUNCTION simple_average (a NUMBER, b NUMBER) RETURN NUMBER IS
BEGIN
    RETURN (a + b) / 2;
END;
/

65. Function to Get Employee's Job Location

CREATE OR REPLACE FUNCTION get_job_location (emp_id NUMBER) RETURN VARCHAR2 IS
    location VARCHAR2(100);
BEGIN
    SELECT location_id INTO location
    FROM employees
    WHERE employee_id = emp_id;

    RETURN location;
END;
/

66. Function to Calculate Employee's Age Based on Hire Date

CREATE OR REPLACE FUNCTION age_based_on_hire_date (emp_id NUMBER) RETURN NUMBER IS
    hire_date DATE;
BEGIN
    SELECT hire_date INTO hire_date
    FROM employees
    WHERE employee_id = emp_id;

    RETURN calculate_age(hire_date);
END;
/

67. Function to Get Day of the Week

CREATE OR REPLACE FUNCTION day_of_week (input_date DATE) RETURN VARCHAR2 IS
BEGIN
    RETURN TO_CHAR(input_date, 'DAY');
END;
/

68. Function to Calculate Distance Between Two Points

CREATE OR REPLACE FUNCTION calculate_distance
(
    x1 NUMBER,
    y1 NUMBER,
    x2 NUMBER,
    y2 NUMBER
) RETURN NUMBER IS
BEGIN
    RETURN SQRT(POWER(x2 - x1, 2) + POWER(y2 - y1, 2));
END;
/

69. Function to Get Employee's Manager ID

CREATE OR REPLACE FUNCTION get_manager_id (emp_id NUMBER) RETURN NUMBER IS
    manager_id NUMBER;
BEGIN
    SELECT manager_id INTO manager_id
    FROM employees
    WHERE employee_id = emp_id;

    RETURN manager_id;
END;
/

70. Function to Calculate Number of Days Between Two Dates

CREATE OR REPLACE FUNCTION days_between_dates
(
    date1 DATE,
    date2 DATE
) RETURN NUMBER IS
BEGIN
    RETURN date2 - date1;
END;
/

Additional Conversion Functions

71. Function to Convert Kilometers to Miles

CREATE OR REPLACE FUNCTION kilometers_to_miles (kilometers NUMBER) RETURN NUMBER IS
BEGIN
    RETURN kilometers * 0.621371;
END;
/

72. Function to Get Employee's Birth Year

CREATE OR REPLACE FUNCTION get_birth_year (emp_id NUMBER) RETURN NUMBER IS
    dob DATE;
BEGIN
    SELECT date_of_birth INTO dob
    FROM employees
    WHERE employee_id = emp_id;

    RETURN EXTRACT(YEAR FROM dob);
END;
/

73. Function to Calculate Employee's Service Length in Months

CREATE OR REPLACE FUNCTION service_length_in_months (emp_id NUMBER) RETURN NUMBER IS
    hire_date DATE;
BEGIN
    SELECT hire_date INTO hire_date
    FROM employees
    WHERE employee_id = emp_id;

    RETURN MONTHS_BETWEEN(SYSDATE, hire_date);
END;
/

74. Function to Convert Miles to Kilometers

CREATE OR REPLACE FUNCTION miles_to_kilometers (miles NUMBER) RETURN NUMBER IS
BEGIN
    RETURN miles * 1.60934;
END;
/

75. Function to Calculate Employee's Service Length in Days

CREATE OR REPLACE FUNCTION service_length_in_days (emp_id NUMBER) RETURN NUMBER IS
    hire_date DATE;
BEGIN
    SELECT hire_date INTO hire_date
    FROM employees
    WHERE employee_id = emp_id;

    RETURN SYSDATE - hire_date;
END;
/

76. Function to Convert Number to Roman Numerals

CREATE OR REPLACE FUNCTION number_to_roman (n NUMBER) RETURN VARCHAR2 IS
    roman_str VARCHAR2(100) := '';
    v_num NUMBER := n;
BEGIN
    FOR rec IN (
        SELECT 1000 val, 'M' symb, 1 seq FROM dual UNION ALL
        SELECT 900, 'CM', 2 FROM dual UNION ALL
        SELECT 500, 'D', 3 FROM dual UNION ALL
        SELECT 400, 'CD', 4 FROM dual UNION ALL
        SELECT 100, 'C', 5 FROM dual UNION ALL
        SELECT 90, 'XC', 6 FROM dual UNION ALL
        SELECT 50, 'L', 7 FROM dual UNION ALL
        SELECT 40, 'XL', 8 FROM dual UNION ALL
        SELECT 10, 'X', 9 FROM dual UNION ALL
        SELECT 9, 'IX', 10 FROM dual UNION ALL
        SELECT 5, 'V', 11 FROM dual UNION ALL
        SELECT 4, 'IV', 12 FROM dual UNION ALL
        SELECT 1, 'I', 13 FROM dual
        ORDER BY seq
    ) LOOP
        WHILE v_num >= rec.val LOOP
            roman_str := roman_str || rec.symb;
            v_num := v_num - rec.val;
        END LOOP;
    END LOOP;

    RETURN roman_str;
END;
/

77. Function to Calculate Employee's Total Experience

CREATE OR REPLACE FUNCTION total_experience (emp_id NUMBER) RETURN NUMBER IS
    hire_date DATE;
BEGIN
    SELECT hire_date INTO hire_date
    FROM employees
    WHERE employee_id = emp_id;

    RETURN FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date) / 12);
END;
/

78. Function to Get Employee's Last Name

CREATE OR REPLACE FUNCTION get_last_name (emp_id NUMBER) RETURN VARCHAR2 IS
    last_name VARCHAR2(50);
BEGIN
    SELECT last_name INTO last_name
    FROM employees
    WHERE employee_id = emp_id;

    RETURN last_name;
END;
/

79. Function to Convert Time from 24-Hour to 12-Hour Format

CREATE OR REPLACE FUNCTION time_24_to_12 (time24 VARCHAR2) RETURN VARCHAR2 IS
BEGIN
    RETURN TO_CHAR(TO_DATE(time24, 'HH24:MI'), 'HH:MI AM');
END;
/

80. Function to Get Employee's First Name

CREATE OR REPLACE FUNCTION get_first_name (emp_id NUMBER) RETURN VARCHAR2 IS
    first_name VARCHAR2(50);
BEGIN
    SELECT first_name INTO first_name
    FROM employees
    WHERE employee_id = emp_id;

    RETURN first_name;
END;
/

Date, Time and Financial Functions

81. Function to Convert Time from 12-Hour to 24-Hour Format

CREATE OR REPLACE FUNCTION time_12_to_24 (time12 VARCHAR2) RETURN VARCHAR2 IS
BEGIN
    RETURN TO_CHAR(TO_DATE(time12, 'HH:MI AM'), 'HH24:MI');
END;
/

82. Function to Calculate Number of Working Days Between Two Dates

CREATE OR REPLACE FUNCTION working_days
(
    start_date DATE,
    end_date DATE
) RETURN NUMBER IS
    workdays NUMBER := 0;
    current_date_value DATE := start_date;
BEGIN
    WHILE current_date_value <= end_date LOOP
        IF TO_CHAR(current_date_value, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH')
           NOT IN ('SAT', 'SUN') THEN
            workdays := workdays + 1;
        END IF;

        current_date_value := current_date_value + 1;
    END LOOP;

    RETURN workdays;
END;
/

83. Function to Calculate Number of Weekends Between Two Dates

CREATE OR REPLACE FUNCTION weekends
(
    start_date DATE,
    end_date DATE
) RETURN NUMBER IS
    weekend_count NUMBER := 0;
    current_date_value DATE := start_date;
BEGIN
    WHILE current_date_value <= end_date LOOP
        IF TO_CHAR(current_date_value, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH')
           IN ('SAT', 'SUN') THEN
            weekend_count := weekend_count + 1;
        END IF;

        current_date_value := current_date_value + 1;
    END LOOP;

    RETURN weekend_count;
END;
/

84. Function to Calculate Monthly Installment for Loan

CREATE OR REPLACE FUNCTION calculate_installment
(
    principal NUMBER,
    rate NUMBER,
    time NUMBER
) RETURN NUMBER IS
    monthly_rate NUMBER := rate / (12 * 100);
    numerator NUMBER;
    denominator NUMBER;
BEGIN
    numerator :=
        principal * monthly_rate * POWER((1 + monthly_rate), time);

    denominator :=
        POWER((1 + monthly_rate), time) - 1;

    RETURN numerator / denominator;
END;
/

85. Function to Get Employee's Job Grade

CREATE OR REPLACE FUNCTION get_job_grade (emp_id NUMBER) RETURN VARCHAR2 IS
    grade VARCHAR2(2);
BEGIN
    SELECT job_grade INTO grade
    FROM employees
    WHERE employee_id = emp_id;

    RETURN grade;
END;
/

86. Function to Convert String to Title Case

CREATE OR REPLACE FUNCTION to_title_case (input_str VARCHAR2) RETURN VARCHAR2 IS
BEGIN
    RETURN INITCAP(input_str);
END;
/

87. Function to Get Employee's Bonus Percentage

CREATE OR REPLACE FUNCTION get_bonus_percentage (emp_id NUMBER) RETURN NUMBER IS
    bonus_pct NUMBER;
BEGIN
    SELECT bonus_pct INTO bonus_pct
    FROM employees
    WHERE employee_id = emp_id;

    RETURN bonus_pct;
END;
/

88. Function to Get Employee's Department ID

CREATE OR REPLACE FUNCTION get_department_id (emp_id NUMBER) RETURN NUMBER IS
    dept_id NUMBER;
BEGIN
    SELECT department_id INTO dept_id
    FROM employees
    WHERE employee_id = emp_id;

    RETURN dept_id;
END;
/

89. Function to Calculate Number of Hours Between Two Dates

CREATE OR REPLACE FUNCTION hours_between_dates
(
    date1 DATE,
    date2 DATE
) RETURN NUMBER IS
BEGIN
    RETURN (date2 - date1) * 24;
END;
/

90. Function to Get Employee's Location ID

CREATE OR REPLACE FUNCTION get_location_id (emp_id NUMBER) RETURN NUMBER IS
    location_id NUMBER;
BEGIN
    SELECT location_id INTO location_id
    FROM employees
    WHERE employee_id = emp_id;

    RETURN location_id;
END;
/

Additional Utility Functions

91. Function to Convert Days to Hours

CREATE OR REPLACE FUNCTION days_to_hours (days NUMBER) RETURN NUMBER IS
BEGIN
    RETURN days * 24;
END;
/

92. Function to Convert Hours to Minutes

CREATE OR REPLACE FUNCTION hours_to_minutes (hours NUMBER) RETURN NUMBER IS
BEGIN
    RETURN hours * 60;
END;
/

93. Function to Get Employee's Commission Percentage

CREATE OR REPLACE FUNCTION get_commission_pct (emp_id NUMBER) RETURN NUMBER IS
    commission_pct NUMBER;
BEGIN
    SELECT commission_pct INTO commission_pct
    FROM employees
    WHERE employee_id = emp_id;

    RETURN commission_pct;
END;
/

94. Function to Convert Minutes to Seconds

CREATE OR REPLACE FUNCTION minutes_to_seconds (minutes NUMBER) RETURN NUMBER IS
BEGIN
    RETURN minutes * 60;
END;
/

95. Function to Get Employee's Project Name

CREATE OR REPLACE FUNCTION get_project_name (emp_id NUMBER) RETURN VARCHAR2 IS
    project_name VARCHAR2(100);
BEGIN
    SELECT project_name INTO project_name
    FROM projects
    WHERE employee_id = emp_id;

    RETURN project_name;
END;
/

96. Function to Calculate Number of Weeks Between Two Dates

CREATE OR REPLACE FUNCTION weeks_between_dates
(
    date1 DATE,
    date2 DATE
) RETURN NUMBER IS
BEGIN
    RETURN FLOOR((date2 - date1) / 7);
END;
/

97. Function to Get Employee's Performance Rating

CREATE OR REPLACE FUNCTION get_performance_rating (emp_id NUMBER) RETURN VARCHAR2 IS
    rating VARCHAR2(10);
BEGIN
    SELECT performance_rating INTO rating
    FROM employees
    WHERE employee_id = emp_id;

    RETURN rating;
END;
/

98. Function to Convert Number to Octal

CREATE OR REPLACE FUNCTION number_to_octal (n NUMBER) RETURN VARCHAR2 IS
    octal_str VARCHAR2(100);
    v_num NUMBER := n;
BEGIN
    IF v_num = 0 THEN
        RETURN '0';
    END IF;

    WHILE v_num > 0 LOOP
        octal_str := MOD(v_num, 8) || octal_str;
        v_num := FLOOR(v_num / 8);
    END LOOP;

    RETURN octal_str;
END;
/

99. Function to Convert Octal to Number

CREATE OR REPLACE FUNCTION octal_to_number (octal_str VARCHAR2) RETURN NUMBER IS
    result NUMBER := 0;
BEGIN
    FOR i IN 1..LENGTH(octal_str) LOOP
        result := result * 8 + TO_NUMBER(SUBSTR(octal_str, i, 1));
    END LOOP;
    RETURN result;
END;
/

100. Function to Calculate Number of Months Between Two Dates

CREATE OR REPLACE FUNCTION months_between_dates
(
    date1 DATE,
    date2 DATE
) RETURN NUMBER IS
BEGIN
    RETURN MONTHS_BETWEEN(date2, date1);
END;
/

Note: These examples are intended for learning Oracle PL/SQL functions. Functions that query tables such as employees, departments, and projects assume that the referenced tables and columns exist in your schema.

No comments:

Post a Comment