现在的位置: 首页 > 综合 > 正文

oracle pl/sql 高级编程第三章 对象

2013年12月04日 ⁄ 综合 ⁄ 共 1244字 ⁄ 字号 评论关闭
3.1 对象的定义
对象可以嵌套,而且嵌套级数不限。
1. 例程:
-- 创建对象头
CREATE OR REPLACE TYPE test_obj IS OBJECT(
m_Name VARCHAR2(30),
m_id NUMBER,
MEMBER PROCEDURE GetName(p_id IN NUMBER, p_name OUT VARCHAR2),
MEMBER FUNCTION GetName(p_id NUMBER) RETURN VARCHAR2,
MEMBER PROCEDURE SetName(p_id IN NUMBER, p_name IN VARCHAR2)
);
/
-- 创建对象包体
CREATE OR REPLACE TYPE BODY test_obj IS
MEMBER PROCEDURE GetName(p_id IN NUMBER, p_name OUT VARCHAR2) IS
BEGIN
SELECT ename INTO p_name FROM emp WHERE empno = p_id;
END;
PL/SQL 高级编程
第 12 页 共 12 页
MEMBER FUNCTION GetName(p_id IN NUMBER) RETURN VARCHAR2 IS
l_Name VARCHAR2(30);
l_sql VARCHAR2(100);
BEGIN
-- 不能使用 m_Name 来代替 l_name
l_sql := 'SELECT ename FROM emp WHERE empno = :1';
EXECUTE IMMEDIATE l_sql INTO l_Name USING p_id;
RETURN l_Name;
END;
MEMBER PROCEDURE SetName(p_id IN NUMBER, p_name IN VARCHAR2) IS
l_sql VARCHAR2(100);
BEGIN
l_sql := 'UPDATE emp SET ename = :1 WHERE empno = :2';
EXECUTE IMMEDIATE l_sql USING p_name, p_id;
COMMIT;
END;
END;
/
-- 删除对象:
DROP TYPE my_object;
2. 调用上述例程,注意调用方法:
DECLARE
l_name VARCHAR2(30);
mo1 test_obj;
mo2 test_obj;
BEGIN
mo1 := test_obj('test', 10);
mo2 := mo1;
mo1.GetName(7369, l_name);
DBMS_OUTPUT.PUT_LINE(l_name);
l_name := mo2.GetName(7369);
DBMS_OUTPUT.PUT_LINE(l_name);
mo2.SetName(7369, 'yang');
END;
/
3.2 对象的存贮和检索
1. 存贮和检索对象:
Oracle 的对象关系模型允许对象作为数据库表中的一个字段存贮。例如:
CREATE TABLE yang_test(test test_obj);
注意:在定义表之后,若想改变对象test_obj的内容,则必须首先删除表。
要求:如何应用该字段?如何调用此字段中包含的函数和过程?

抱歉!评论已关闭.