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

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的内容,则必须首先删除表。
要求:如何应用该字段?如何调用此字段中包含的函数和过程?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值