oracle产品类型,oracle创建类型之object

产品表product:

drop table product;

create table product (product_id number(18) primary key, product_name varchar2(255), expire_date date, remark varchar2(255), product_fee_id number(18));

对应产品的费用表是product_fee:

drop table product_fee;

create table product_fee(product_fee_id number(18) primary key,  fee number(10));

其中product.product_fee_id与product_fee.product_fee_id是多对一的关系,即一个费用可以由多个产品共享,也就是说可能存在多个产品费用是一样的情况。

创建一个类型,用于返回产品名称和产品费用(通过一个object来实现):

create or replace type rcd_productinfo is object(product_name varchar2(255), product_fee);

构造数据:

insert into product_fee

select rownum, trunc(dbms_random.value(1,100)) from dual connect by rownum <= 39

insert into product

select rownum, dbms_random.string('X', 10),

sysdate + sign(dbms_random.value(1,100) - 5)*dbms_random.value(1,100), dbms_random.string('X', 20),

trunc(dbms_random.value(1,39))

from dual connect by rownum <= 1000

创建函数:

create or replace function w_func_getprodfee(product_id number)

return rcd_productinfo as

vr_pinfo rcd_productinfo := rcd_productinfo(null,0);

begin

select pr.product_name, pf.fee from product pr, product_fee pf

into vr_pinfo.product_name, vr_pinfo.product_fee

where pf.product_id = pr.product_id;

return vr_pinfo;

end w_func_getprodfee;

调用函数:

可以直接调用一起显示,如:

select w_func_getprodfee(pr.product_id) from product pr;

也可以分开显示:

select w_func_getprodfee(pr.product_id).product_name,

w_func_getprodfee(pr.product_fee).product_fee

from product pr;

体现了这种类型的两种用法。

Connected to Oracle Database 10g Release 10.2.0.1.0

Connected as lyon

SQL>

SQL> select pr.product_id,

2  w_func_getprodfee(pr.product_id).product_name name,

3  w_func_getprodfee(pr.product_id).product_fee fee

4  from product pr

5  ;

PRODUCT_ID NAME                                                                                     FEE

------------------- -------------------------------------------------------------------------------- -------------------

1 5XACBY5N9W                                                                        77

2 XT1S8ZVFKQ                                                                         29

3 KHUBRI25AP                                                                         80

4 NA8WP815EE                                                                        66

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值