DMSQL中的包也好,类也罢,都是相似java中的类的概念。
只是,DMSQL中的包是面向过程的,没有继承的概念。
DMSQL中的类是面向对象的,和java中的类类似都有继承的概念。
咱们前面学的存储过程/函数,如今能够经过一个包所有把他们都集合在一个包里,而且在这个包里还能够定义全部存储过程/函数会用到的全局变量。
就像是java中的一个类集合了全部的方法与成员变量。java
包的建立主要是包规范+包体。sql
create or replace package "SYSDBA"."package_1" as a int default 1; b varchar := 'bbb'; rownumber int := 0; function func_incre(c in int, d in int) return int; end package_1; create or replace package body "SYSDBA"."package_1" as function func_incre(c in int, d in int) return int as declare e int default 1; begin e := c+d+e; return e; end func_incre; begin select count(rownum) into rownumber from test ; end package_1; alter package "SYSDBA"."package_1" compile; call "package_1".func_incre(1,1);
看个错误实例:数据库
缘由:函数
一、没法解析的成员表达式表示找不到成员也就是找不到包或者函数;首先个人数据库是大小写敏感的,package_1加了双引号,是小写,而我在call package_1,funcincre()都没有+双引号,因此会被编译器自动转化为大写,因此找不到包和类,因此数据库提示:没法解析的成员表达式。
二、存储函数中不能包含查询,也就是说select * from test是错误的,虽然编译时不会有问题,可是执行时会提示错误。spa
可是在上文中,使用select count(rownum) into rownumber from test;就不会报错,为何?由于这个sql不是查询,而是赋值。code
不过,函数虽然不能够用查询sql,可是存储过程能够有,由于函数要有一个返回值,而存储过程没有。对象