我有一个名为budget的类型定义为
create type budget as object (
year number,
amount number,
member function left_over (year in number) return number
)
体:
create type body budget as
member function left_over(year in number) return number is
begin
return amount;
end left_over;
end;
和一个对象表
create table budget_table of budget;
如何使用成员函数返回金额?类似的东西:
select b.left_over(2010) from budget_table b;
由于
答案 0 :(得分:3)
您不需要该方法的参数:
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
(我认为这是一个学术练习,因为在真实的商业数据库中创建这样的表是没有意义的!)
限制特定年份的预算:
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
答案 1 :(得分:1)
这是一个范围问题。您的函数left_over()
是Budget
上的一种方法,这是一个单独的东西。但是,您希望有一种方法可以从一系列预算中查找。你编写它的方法不能这样做,因为实例只能知道它自己。 2009年的Budget
怎么可能知道2010年的数字?
你需要的是一个对象Budgets
,它有一个Budget
作为属性的集合,以及一个成员函数left_over()
,它返回给定Budget
的任何内容它的收藏。当然,获取该信息的唯一方法是迭代集合的方法,该方法的执行效率远低于常规表上的WHERE子句,但似乎是OO数据实践中的标准方法。