PLSQL高级编程-面向对象编程
PL/SQL(procdure language/sql) 是什么:
PLSQL是对oracle标准的一个sql语言的扩展,是在oracle数据库上进行编程的语言。
PLSQL相对SQL的优点:
(1)对SQL语句进行模块化编程
例如完成一个电商购物网站发送订单的需求
传统的sql:仅用sql语句,那么下一个订单可能需要发送好几条SQL语句。
PLSQL:写好一个模块,专门完成下订单的功能,当需要下订单的时候,只需要传入参数,调用模块就可以了。
(2)执行速度更优
传统的sql:涉及到sql语句的网络传输时间和dbms对sql语句的编译时间,效率不高。
PLSQL:sql语句是写在数据库中的只需要编译一次,省去了sql语句的网络传输时间,效率比较高
(3)安全性更好
传统的sql:sql语句直接写在程序或者客户端中,在网络传输的过程中会产生一些不安全因素,如sql注入等。
PLSQL:sql语句是写在数据库里面的,不需要网络传输。
(4)节约带宽
传统sql浪费带宽,而plsql节省带宽
举例
编写一个过程,往emp表中中插入一条记录
create procedure prol is
begin
insert into emp(empno,ename,sal,deptno) values(1011,'lili',3000,20);
end;
exec prol; -- 调用过程
PLSQL还可以使用面向对象编程。
什么是面向对象编程
面向对象编程简称OOP编程,实际上是对现实世界事物的一种抽象的过程。它的核心是把对象的定义和实现进行区分,让定义部分对象所具有的结构,让实现部分根据定义部分定义的具体结构进行具体的实现。
PLSQL中的对象是什么
PL/SQL中的对象类型是一种自定义的复合类型,与包的定义很相似,由两部分组成:
- 对象类型规范:是对象与应用的接口,用于定义对象的公用属性和方法。
- 对象类型体:用于实现对象类型规范所定义的公用方法。
PLSQL中可以定义的几种类型的方法
1.构造方法:
该方法类似于JAVA等语言中的构造函数,用来初始化一个对象类型并返回对象的实例。
2.MEMBER方法:
该方法允许对象的实例进行调用,在MEMBER方法中可以访问对象实例的数据,通常称为实例方法或成员方法。
3.STATIC方法:
该方法可以直接在对象类型上进行调用,它用于在对象类型上执行全局操作,通常称为静态方法。
4.MAP方法:
用于在多个对象间排序的映射方法。
5.ORDER方法:
用于在两个对象实例间排序的排序方法。
举例
定义employee_obj对象规范
create or replace type employee_obj as object(
empno number(4),
ename varchar2(20),
job varchar2(20),
sal number(10,2),
comm number(10,2),
deptno number(4),
MEMBER procedure change_sal(p_empno number,p_sal number),
MEMBER procedure change_comm(p_empno number,p_comm number),
MEMBER procedure change_deptno(p_empno number,p_deptno number),
MEMBER procedure get_sal(p_empno number) return number,
MEMBER procedure get_comm(p_empno number) return number,
MEMBER procedure get_deptno(p_empno number) return integer
)NOT FINAL; --指定该类可以被继承,如果指定FINAL,表示该类无法被继承
定义对象体
create or replace type body employee_obj as
member procedure chang_sal(p_empno number,p_sal number) is
begin
update emp set sal=p_sal where empno=p_empno;
end;
member procedure chang_comm(p_empno number,p_sal number) is
begin
update emp set comm=p_comm where empno=p_empno;
end;
member procedure chang_deptno(p_empno number,p_sal number) is
begin
update emp set deptno=p_deptno where empno=p_empno;
end;
member function get_sal (p_empno number) return number is
v_sal number(10,2);
begin
select sal into v_sal from emp where empno=p_empno;
return v_sal;
end;
member function get_comm(p_empno number) return number is v_comm number(10,2);
begin
select comm into v_comm from emp where empno=p_empno;
RETURN v_comm;
end;
member function get_deptno(p_empno number) return integer
is v_deptno int;
begin
select deptno into v_deptno from emp where empno=p_empno;
return v_deptno;
end;
end;
参考博文:https://blog.csdn.net/Leo1120178518/article/details/86078435