ORACLE PL/SQL实例精解笔记(八)

2014-11-24 12:55:25 · 作者: · 浏览: 8
不会修改数据库
WNPS:write no package state,不会修改任何包变量的值
RNPS:read no package state,不会读取任何包变量
RNDS:read no database state,不会读取任何数据库
21.在包中重载:
规则如下:
a.形参必须在参数数量、顺序或者数据类型等方面存在区别
b.不能重载独立模块的名称
c.只有return数据类型存在差别的函数不能重载
22.对象类型
a.语法如下:
CREATE [OR REPLACE] TYPE type_name AS OBJECT
(attribute_name1 attribute_type,
attribute_name2 attribute_type,
...
attribute_nameN attribute_type,
[method1 specification],
[method2 specification],
...
[methodN specification],
);
[CREATE [OR REPLACE] TYPE BODY type_name AS
method1 body;
method2 body;
...
methodN body;]
END;
eg1:
CREATE OR REPLACE TYPE test_type AS OBJECT
(no varchar2(1),name varchar2(30),grade number(2));
调用:
DECLARE
v_test_type test_type;
BEGIN
select test_type(no,name,null) into v_test_type FROM student;
END;
另对于未初始化对象,对象实例及其属性都是null,在使用默认构造器对该对象实例进行初始化之后,就不再是NULL,尽管单个值可能仍旧是NULL,eg:v_test_type :=v_test_type(null,null,null)
eg2:
CREATE OR REPLACE TYPE test_tab_type IS TABLE OF test_type;
b.对象类型方法
对象类型有个内置参数SELF,这个参数表示对象类型的特定实例。
对象比较的两种方式:映射方法与排序方法(二选一)
构造器方法,成员方法,静态方法
eg:
CREATE OR REPLACE TYPE zipcode_obj_type AS OBJECT
( zip VARCHAR2(5),city VARCHAR2(20),state VARCHAR2(2),
--构造器方法,需要两个参数
CONSTRUCTOR FUNCTION zipcode_obj_type
( SELF IN OUT NOCOPY zipcode_obj_type,zip VARCHAR2)
RETURN SELF AS RESULT,
--成员方法
MEMBER PROCEDURE get_zipcode_info
(out_zip OUT varchar2,out_city OUT VARCHAR2),
---静态方法
STATIC PROCEDURE display_zipcode_info
(in_zip_obj IN ZIPCODE_OBJ_TYPE),
--映射方法
MAP MEMBER FUNCTION zipcode RETURN VARCHAR2,
--排序方法
ORDER MEMBER FUNCTION zipcode1(zip_obj ZIPCODE_OBJ_TYPE) RETURN INTEGER
);
/
CREATE OR REPLACE TYPE BODY zipcode_obj_type AS
CONSTRUCTOR FUNCTION zipcode_obj_type
(SELF IN OUT NOCOPY zipcode_obj_type,zip VARCHAR2)
RETURN SELF AS RESULT
IS
BEGIN
SELF.zip:=zip;
SELECT city INTO SELF.city where zip=SELF.zip;
RETURN;
EXCEPTION
WHEN NO_DATA_FOUND THEN