Oracle PL/SQL Tutorial/Function Procedure Packages/Nested Functions

Материал из SQL эксперт
Перейти к: навигация, поиск

Define inner function to calculate age

SQL> set serveroutput on
SQL> set echo on
SQL> declare
  2    age   binary_integer;
  3
  4    birth_date    date;
  5    current_date  date;
  6
  7    function age_as_of (birth_date in date, as_of_date in date) return positive is
  8        as_of_year  natural;    --a year of 00 is valid.
  9        as_of_month positive;
 10        as_of_day   positive;
 11
 12        birth_year    natural;  --a year of 00 is valid.
 13        birth_month   positive;
 14        birth_day     positive;
 15
 16      age   positive;
 17    begin
 18        as_of_year := to_number(to_char(as_of_date,"yyyy"));
 19        as_of_month := to_number(to_char(as_of_date,"mm"));
 20        as_of_day := to_number(to_char(as_of_date,"dd"));
 21
 22        birth_year := to_number(to_char(birth_date,"yyyy"));
 23        birth_month := to_number(to_char(birth_date,"mm"));
 24        birth_day := to_number(to_char(birth_date,"dd"));
 25
 26        if as_of_month > birth_month then
 27           age := as_of_year - birth_year;
 28        elsif (as_of_month = birth_month) and (as_of_day >= birth_day) then
 29           age := as_of_year - birth_year;
 30        else
 31           age := as_of_year - birth_year - 1;
 32        end if;
 33
 34        return age;
 35    end;
 36  begin
 37
 38    current_date := to_date("11-13-1997","mm-dd-yyyy");
 39    birth_date   := to_date("11-15-1961","mm-dd-yyyy");
 40
 41
 42    age := age_as_of (birth_date, current_date);
 43    dbms_output.put_line(age);
 44
 45  end;
 46  /
35
PL/SQL procedure successfully completed.
SQL>
SQL>


Nested function in anonymous block

SQL> set echo on
SQL> set serveroutput on
SQL>
SQL> declare
  2
  3     function myFunction (myValue in number,myFactor in number) return number is
  4
  5         myFactor_to_use  number;
  6         minimum_wage  number := 5;
  7     begin
  8         if (myFactor is null) or (myFactor < minimum_wage) then
  9             myFactor_to_use := minimum_wage;
 10         else
 11             myFactor_to_use := myFactor;
 12         end if;
 13
 14         return myValue * myFactor_to_use;
 15      end;
 16  begin
 17    dbms_output.put_line(myFunction(40,10));
 18    dbms_output.put_line(myFunction(40,2));
 19    dbms_output.put_line(myFunction(40,null));
 20  end;
 21  /
400
200
200
PL/SQL procedure successfully completed.
SQL>
SQL>