【问题标题】:Oracle 11g VARRAY of OBJECTSOracle 11g VARRAY 对象
【发布时间】:2011-01-17 01:34:36
【问题描述】:

我在 Oracle 11g 中有以下语句:

CREATE TYPE person AS OBJECT (
    name VARCHAR2(10),
    age NUMBER
);

CREATE TYPE person_varray AS VARRAY(5) OF person;

CREATE TABLE people (
    somePeople person_varray
)

我如何选择一个人的姓名值,即

SELECT somePeople(person(name)) FROM people

谢谢

【问题讨论】:

    标签: plsql oracle11g


    【解决方案1】:

    我很确定:

    1. 你所做的不是我要做的。它有点完全违反了关系原则,并且您最终会在 Oracle 中使用一个对象/类型系统,一旦它被制定,您可能无法更改它。我见过的 SQL 类型(不是 PL/SQL 类型)的最佳用途基本上是能够将 ref 游标转换回流水线函数。

    2. 您必须先取消嵌套集合,然后才能对它进行关系查询,如下所示:

      从名称中选择 (SELECT SP.* FROM PEOPLE P, TABLE(P.SOME_PEOPLE) SP)

    这将为您提供所有行,因为您的规范中没有任何内容(如 PERSON_ID 属性)来限制行。

    Oracle 应用程序开发人员指南 - 对象关系特性更深入地讨论了所有这些,并附有示例。

    【讨论】:

    • SQL TYPE 和 PL/SQL 类型有什么区别?
    【解决方案2】:
    To insert query:-
    
    insert into people values (
    person_varray(person('Ram','24'))
    );
    
    To select :-
    
    select * from people;
    
    SELECT NAME FROM (SELECT SP.* FROM PEOPLE P, TABLE(P.somePeople) SP)
    
    While inserting a row into people table use constructor of 
    person_varray and then the constructor 
    of person type for each project.
    The above INSERT command 
    creates a single row in people table.
    
     select somePeople from people ;
    
     person(NAME, age) 
    ---------------------------------------------------
    person_varray(person('Ram', 1), 
    
    To update the  query will be:-
    
    update people 
    set somePeople =  
               person_varray 
               (  
                   person('SaAM','23')  
               ) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-04
      • 2021-02-20
      • 2014-12-25
      • 2022-10-12
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多