Function

The PL/SQL Function is very similar to PL/SQL Procedure. The main difference between procedure and a function is, a function must always return a value, and on the other hand a procedure may or may not return a value. Except this, all the other things of PL/SQL procedure are true for PL/SQL function too.

Syntax to create a function:

CREATE [OR REPLACE] FUNCTION function_name [parameters]  

[(parameter_name [IN | OUT | IN OUT] type [, ...])]  

RETURN return_datatype  

{IS | AS}  

BEGIN  

   < function_body >  

END [function_name]; 

    Here:

    • Function_name: specifies the name of the function.
    • [OR REPLACE] option allows modifying an existing function.
    • The optional parameter list contains name, mode and types of the parameters.
    • IN represents that value will be passed from outside and OUT represents that this parameter will be used to return a value outside of the procedure.

    The function must contain a return statement.

    • RETURN clause specifies that data type you are going to return from the function.
    • Function_body contains the executable part.
    • The AS keyword is used instead of the IS keyword for creating a standalone function.

    PL/SQL Function Example

    Let’s see a simple example to create a function.

      create or replace function adder(n1 in number, n2 in number)    
    
    return number    
    
    is     
    
    n3 number(8);    
    
    begin    
    
    n3 :=n1+n2;    
    
    return n3;    
    
    end;    
    
    /  

      Now write another program to call the function.

       DECLARE    
      
         n3 number(2);    
      
      BEGIN    
      
         n3 := adder(11,22);    
      
         dbms_output.put_line('Addition is: ' || n3);    
      
      END;    
      
      / 

        Output:

        Addition is: 33
        Statement processed.
        0.05 seconds
        

        Another PL/SQL Function Example

        Let’s take an example to demonstrate Declaring, Defining and Invoking a simple PL/SQL function which will compute and return the maximum of two values.

        DECLARE  
        
           a number;  
        
           b number;  
        
           c number;  
        
        FUNCTION findMax(x IN number, y IN number)   
        
        RETURN number  
        
        IS  
        
            z number;  
        
        BEGIN  
        
           IF x > y THEN  
        
              z:= x;  
        
           ELSE  
        
              Z:= y;  
        
           END IF;  
        
          
        
           RETURN z;  
        
        END;   
        
        BEGIN  
        
           a:= 23;  
        
           b:= 45;  
        
          
        
           c := findMax(a, b);  
        
           dbms_output.put_line(' Maximum of (23,45): ' || c);  
        
        END;  
        
        /

        Output:

        Maximum of (23,45): 45
        Statement processed.
        0.02 seconds
        

        PL/SQL function example using table

        Let’s take a customer table. This example illustrates creating and calling a standalone function. This function will return the total number of CUSTOMERS in the customers table.

        Create customers table and have records in it.

        IdNameDepartmentSalary
        1alexweb developer35000
        2rickyprogram developer45000
        3mohanweb designer35000
        4dilshaddatabase manager44000

        Create Function:

        CREATE OR REPLACE FUNCTION totalCustomers  
        
        RETURN number IS  
        
           total number(2) := 0;  
        
        BEGIN  
        
           SELECT count(*) into total  
        
           FROM customers;  
        
            RETURN total;  
        
        END;  
        
        /

        After the execution of above code, you will get the following result.

        Function created. 
        

        Calling PL/SQL Function:

        While creating a function, you have to give a definition of what the function has to do. To use a function, you will have to call that function to perform the defined task. Once the function is called, the program control is transferred to the called function.

        After the successful completion of the defined task, the call function returns program control back to the main program.

        To call a function you have to pass the required parameters along with function name and if function returns a value then you can store returned value. Following program calls the function totalCustomers from an anonymous block:

        DECLARE  
        
           c number(2);  
        
        BEGIN  
        
           c := totalCustomers();  
        
           dbms_output.put_line('Total no. of Customers: ' || c);  
        
        END;  
        
        / 

          After the execution of above code in SQL prompt, you will get the following result.

          Total no. of Customers: 4
          PL/SQL procedure successfully completed.
          

          PL/SQL Recursive Function

          You already know that a program or a subprogram can call another subprogram. When a subprogram calls itself, it is called recursive call and the process is known as recursion.

          Example to calculate the factorial of a number

          Let’s take an example to calculate the factorial of a number. This example calculates the factorial of a given number by calling itself recursively.

          DECLARE  
          
             num number;  
          
             factorial number;  
          
            
          
          FUNCTION fact(x number)  
          
          RETURN number   
          
          IS  
          
             f number;  
          
          BEGIN  
          
             IF x=0 THEN  
          
                f := 1;  
          
             ELSE  
          
                f := x * fact(x-1);  
          
             END IF;  
          
          RETURN f;  
          
          END;  
          
            
          
          BEGIN  
          
             num:= 6;  
          
             factorial := fact(num);  
          
             dbms_output.put_line(' Factorial '|| num || ' is ' || factorial);  
          
          END;  
          
          /

          After the execution of above code at SQL prompt, it produces the following result.

          Factorial 6 is 720 
          PL/SQL procedure successfully completed.
          

          PL/SQL Drop Function

          Syntax for removing your created function:

          If you want to remove your created function from the database, you should use the following syntax.

          DROP FUNCTION function_name;  

          Comments

          Leave a Reply

          Your email address will not be published. Required fields are marked *