Thursday, May 17, 2012

Basic Oracle Function Structure

What?
I need to refer to how to create a function in Oracle PL/SQL and sites on the net just attempt to overcomplicate everything and have forgotten how it is to be new to Oracle. I need a function in it's simplest form and if I want to torture my successors, I'll complicate the function myself.

How?
Functions are supposed to return a single value, which is all I need in this case. In my example, I need to submit an Active Directory (AD) username and receive a student ID number instead, all with the aim to improve performance on some SSRS queries which accept either an ID number or an AD name as user parameters.

Syntax:
CREATE [OR REPLACE] FUNCTION function_name
    [ (parameter [,parameter]) ]

    RETURN return_datatype

IS | AS
    [declaration_section]

BEGIN
    executable_section

[EXCEPTION
    exception_section]

END [function_name];

Example: My example accepts an Active Directory (AD) username and returns the student ID:
CREATE OR REPLACE FUNCTION fn_get_sref_from_adname
    (ad_username IN varchar2)
    RETURN number
IS
    student_no number;

    cursor c1 is
    select student_reference
      from student_accounts_table
      where student_ad_account = trim(lower(ad_username));
BEGIN
    open c1;
    fetch c1 into student_no;

    if c1%notfound then
        student_no := 0;
    end if;

    close c1;

RETURN student_no;

EXCEPTION
WHEN OTHERS THEN
      raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);

END fn_get_sref_from_adname;

To run this:
SELECT fn_get_sref_from_adname('f2574687') from dual where rownum<=1;

-- I use dual as the table but this can be any table.
-- I specify rownum because it was returning rows with just the same value.

Additional:
Accessible by other users?
CREATE PUBLIC SYNONYM my_function FOR base_table_owner.my_function;
GRANT EXECUTE ON my_function TO another_user;

Add comment

Please note: all comments are reviewed before being published.


Security code
Refresh

Member Login

Joes Latest Members

A huge WELCOME goes to today's newest members:

  • infonat
Member Signups (Activated)
BeforeCurrentTrend
Day21=
Week105ê
Month11224ê
Year2,265612ê

Member Stats
53 guests are currently online.
1,178 members are still deciding.
There are 5,935 members in total.

Latest Comments

Paypal Donations

Want to support my work? Any donation is a blessing :c)