zoukankan      html  css  js  c++  java
  • oracle inside(3)

    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的内容,则必须首先删除表。
    要求:如何应用该字段?如何调用此字段中包含的函数和过程?
  • 相关阅读:
    NYoj 素数环(深搜入门)
    深搜和广搜
    hdu 3449 (有依赖的01背包)
    hdu 1712 (分组背包入门)
    sql数据库常用语句总结
    常用工具和API的网站收集
    23种设计模式
    sql 联合查询并更新
    sql 去除重复记录
    读<你必须知道的.NET>IL指令笔记
  • 原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua_201108021108.html
Copyright © 2011-2022 走看看