PL/SQL面向对象编程
自转到ORACLE开始,就开始对ORACLE OOP有非常高的热情,于是写了一个DEMO。先从创建TYPE开始,TYPE与PACKAGE非常相似。TYPE与JAVA中的CLASS可以等同。
1、 创建TYPE规范
create or replace type hek_send_mail_obj as object( mail_host varchar2(20),
mail_port integer,
member function test_f(i number)
return varchar2 )instantiable not final;
2、创建TYPE主体
create or replace type body hek_send_mail_obj as
member function test_f(i number) return varchar2 is
begin
return 'success visit ' ||i||' ' || self.mail_host||' '||self.mail_port;
end;
end;
3、进行调用
Declare
--有多少个数据成员,在实例化TYPE时,必须都初始化,这一点跟JAVA的构造器类似,只是JAVA没有强制要求。
t hek_send_mail_obj:= hek_send_mail_obj(' 192.168.1.110',44);
begin
--调用TYPE的方法test_f dbms_output.put_line(t.test_f(1));
end;
注:上面创建的TYPE都是临时对象,随着块的结束,对象生命也结束了。下面将会说明如何创建持久对象。
4、持久化TYPE(也就是创建对象表)
create table hek_send_mail_tbj of hek_send_mail_obj;
5、在对象表中INSERT些数据
insert into hek_send_mail_tbj values('192.168.210.232',25);
insert into hek_send_mail_tbj values('192.168.210.232',80);
insert into hek_send_mail_tbj values('192.168.210.232',35);
6、进行调用
select tb.mail_host,tb.mail_port,tb.test_f(2) from hek_send_mail_tbj tb
注:①这边我们可以直接象关系表一样使用对象表,也不必进行初始化。ORACLE会自动初始化对象。 ②TYPE不能使用PACKAGE的对象等等,如:UTL_SMTP。