record类型可以作为参数来使用。
type rec_type is record
(
serv_id number(12),
product_offer_instance_id number(12),
msg_id number(30)
);
function test_serv(rec rec_type) return number;
--这一段在package定义。使得它对于函数、过程是全局可见。
--这里特别要注意,把它定义为全局的,是因为在定义函数的时候,它必须要可见。
function test_serv(rec rec_type) return number is
begin
dbms_output.put_line('serv_id = ' || rec.serv_id);
dbms_output.put_line('product_offer_instance_id = ' || rec.product_offer_instance_id);
dbms_output.put_line('msg_id = ' || rec.msg_id);
return 1;
end;
--deal_offer_detail_inst
procedure deal_offer_detail_inst(sysTime varchar2) is
rec rec_type;
v_exe varchar2(4000);
num number;
begin
v_exe := 'select serv_id, product_offer_instance_id, msg_id from accrossMonth_detailInst_moni';
execute immediate v_exe into rec;
num := test_serv(rec);
dbms_output.put_line(num);
end;
--这个便是我的处理函数。
declare
begin
accross_month_deal_pkg_zhou.deal_offer_detail_inst('aa_bb');
end;
/
--这是我的调用。
serv_id = 9729943396
product_offer_instance_id = 9729941750
msg_id = 10100798110200157985
1
--这是结果。
record类型既然可以作为入参的话,那么同样的,object也是一样可以作为入参的。
于此同时,record可以作为入参,也是可以作为返回类型的。具体的代码已测试验证。
这样的话,oracle的编程就异常灵活了,结合exception的运用,可以设计多种代码格式、或者可复用的代码结构,包括重载。
我一般一个代码一个风格。用自己喜欢的,简单易上手的,逻辑可以简化的风格。
由于这里涉及的包很少。反而我自己多尝试了包的设计和应用。所以设计一个良好的包接口,是以后要慢慢体会的了。
同时也要跟C++一样,或者是也要考虑复用的快速构建。要封装一些良好的工具包,然后锻炼包的运用能力。
这就是要去了解其他人写的包,以及对包里工具对象的理解了。
以后还有要学习的,编程方面的方向,应该是:包、含嵌套表、对象表的设计和应用、纯度控制。
包:主要是了解别人的工具,增加自己的理解。
对象表:这里涉及到嵌套表、记录表、索引表、对象表、数组表,这几个主要是应用在pl过程中。
但是当这些变量融入到表中,以对象的观点来操作表的话,这就是与众不同的地方了。代码会大大简化。
纯度控制:这一块有关权限的控制,我是相当白痴。至今尚未能理解。
游标的嵌套应用:这个东西很强大。教程里有一个代码让我神会了,却始终运用不了。
自己对代码结构的构思和理解发挥不到这种水平。有空需要尝试一下。
编程方面主要就这些了。oracle更多需要注意的,应该是管理(DBA)。
对管理,没有机会。遇到问题的时候,再尝试吧。