Connecting Tech Pros Worldwide Forums | Help | Site Map

PL/SQL-FUNCTIONS - 1

debasisdas's Avatar
Moderator
 
Join Date: Dec 2006
Location: Bangalore ,India
Posts: 7,511
#1   May 31 '07
This thread contains some useful tips/samples regarding FUNCTIONS in oracle, that the forum members may find useful.

FUNCTION:
==========
1.IT IS A COMPILED BLOCK OF CODE WHICH IS STORED AS AN OBJECT WITHIN THE DATABASE.
2.IT MUST RETURN A VALUE TO THE CALLING PROCEDURE.
3.ONCE A FUNCTION IS CREATED IT BECOMES PART OF THE DUAL TABLE.
4.IF A FUNCTION CONTAINS ANY OUT OR IN-OUT PARAMETER IT CAN'T BE EXECUTED AT STATMENT LEVEL.

BASIC SYNTAX
=============

Expand|Select|Wrap|Line Numbers
  1. CREATE [OR REPLACE] FUNCTION FUNCTION NAME[PARAMETER PARAMETER MODE],....])]
  2. RETURN DATATYPE
  3. {IS/AS}
  4. [LOCAL DECLARATION]
  5. BEGIN
  6. EXECUTABLE STATMENT
  7. RETURN VALUE;
  8. [EXCEPTION
  9. EXCEPTION HANDLER]
  10. RETURN VALUE;
  11. END [FUNCTIONNAME];
  12.  
sample code to show a parameterless function
====================================

Expand|Select|Wrap|Line Numbers
  1. CREATE OR REPLACE FUNCTION HELLO RETURN VARCHAR2 IS
  2. BEGIN
  3. RETURN 'Hello welcome to TSDN';
  4. END HELLO;

To call
--------------
Expand|Select|Wrap|Line Numbers
  1. select hello from dual;

SAMPLE FUNCTION WITH IN PARAMETER
==================================
Expand|Select|Wrap|Line Numbers
  1.  
  2.  CREATE OR REPLACE FUNCTION date_diff (max_date STRING, min_date STRING)
  3.  RETURN PLS_INTEGER IS
  4.  
  5.  BEGIN
  6.    RETURN TO_DATE(max_date) - TO_DATE(min_date);
  7.  EXCEPTION
  8.    WHEN OTHERS THEN
  9.    RETURN NULL;
  10.  END date_diff;
  11.  
TO EXECUTE THE FUNCTION
------------------------------------------------
Expand|Select|Wrap|Line Numbers
  1. SELECT date_diff('15-JUL-1980', '19-MAR-1979') FROM dual;
IN MODE FUNCTION EXAMPLE #2
=============================

Expand|Select|Wrap|Line Numbers
  1. CREATE OR REPLACE FUNCTION EVENODD(num_in NUMBER) RETURN STRING IS
  2. BEGIN
  3.   IF MOD(num_in, 2) = 0 THEN
  4.     RETURN 'EVEN';
  5. ELSE
  6. RETURN 'ODD';
  7.   END IF;
  8. END EVENODD;

TO EXECUTE
------------------------
Expand|Select|Wrap|Line Numbers
  1. select evenodd(1234) from dual;

IN MODE FUNCTION EXAMPLE #3
=============================

Expand|Select|Wrap|Line Numbers
  1. CREATE OR REPLACE function shoname (num in number) return string is
  2. name varchAr2(10);
  3. begin
  4. select ename into name from emp where empno=num;
  5. return name;
  6. end;
  7.  
TO EXECUTE
------------------------
Expand|Select|Wrap|Line Numbers
  1. SELECT shoname (7788) FROM DUAL;
IN MODE FUNCTION EXAMPLE #4
=============================

Expand|Select|Wrap|Line Numbers
  1. create or replace function spelldate(dt date) return varchar2 as
  2. mdate varchar2(50);
  3. begin
  4. select to_char(dt,'ddspth month year') into mdate
  5. from dual;
  6. return mdate;
  7. end;

Also check PL/SQL-FUNCTIONS - 2

Last edited by debasisdas; Feb 12 '08 at 10:28 AM. Reason: Some correction



Reply