Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling member function in oracle 11g

I have a type called budget defined as

create type budget as object ( 
    year number,
    amount number,
    member function left_over (year in number) return number
)

Body:

create type body budget as
    member function left_over(year in number) return number is
    begin
        return amount;
    end left_over;
end;

And an object table

create table budget_table of budget;

How do I use the member function to return the amount? Something like:

select b.left_over(2010) from budget_table b;

Thanks

like image 526
joec Avatar asked Sep 02 '25 02:09

joec


1 Answers

You don't need a parameter to the method:

SQL> create or replace type budget as object (
  2      year number,
  3      amount number,
  4      member function left_over return number
  5  )
  6  /

Type created.

SQL> create or replace type body budget as
  2      member function left_over return number is
  3      begin
  4          return amount;
  5      end left_over;
  6  end;
  7  /

Type body created.

SQL> create table budget_table of budget;

Table created.

SQL> insert into budget_table values (budget(2010,99));

1 row created.

SQL> commit;

Commit complete.

SQL> select b.left_over() from budget_table b;

B.LEFT_OVER()
-------------
           99

(I assume this is an academic exercise, as it would make no sense to create tables like this in a real business database!)

To restrict to the budget for a particular year:

SQL> insert into budget_table values (budget(2010,99));

1 row created.
SQL> select b.left_over() from budget_table b;

B.LEFT_OVER()
-------------
           88
           99

SQL> select b.left_over() from budget_table b
  2  where b.year = 2010;

B.LEFT_OVER()
-------------
           99
like image 88
Tony Andrews Avatar answered Sep 04 '25 23:09

Tony Andrews