代码之家  ›  专栏  ›  技术社区  ›  Ramesh Diego Lins de Freitas

在Oracle中检索对象

  •  0
  • Ramesh Diego Lins de Freitas  · 技术社区  · 6 年前

    Menu 它有一个对象类型作为属性。

    菜单类型

    Create Type Menu as Object( beer REF beertype, price float )

    蜂窝状

    Create Type beertype as object( name char(20), seller char(20) )

    使用菜单类型创建的表

    Create table Sells of Menu
    

    使用beertype创建的表

    Create table beer of beertype
    

    我试过了

    SELECT beer.name 
    FROM Sells; 
    

    SELECT Sells.beer.name 
    FROM Sells; 
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Littlefoot    6 年前

    下面是一个例子:首先测试用例:

    SQL> create type beertype as object(
      2    name char(20),
      3    seller char(20)
      4  );
      5  /
    
    Type created.
    
    SQL> create type menu as object(
      2    beer ref beertype,
      3    price float
      4  );
      5  /
    
    Type created.
    
    SQL> create table sells of menu;
    
    Table created.
    
    SQL> create table beer of beertype;
    
    Table created.
    
    SQL> insert into beer (name, seller) values ('Heineken', 'KTC');
    
    1 row created.
    
    SQL> insert into beer (name, seller) values ('Tuborg', 'Plodine');
    
    1 row created.
    
    SQL> insert into sells (beer, price) values ((select ref(b) from beer b where name = 'Heineken'), 10);
    
    1 row created.
    
    SQL> insert into sells (beer, price) values ((select ref(b) from beer b where name = 'Tuborg'), 2.5);
    
    1 row created.
    

    选择价格大于3.5的啤酒名称的查询:

    SQL> select b.name, s.price
      2  from sells s join beer b on value(b) = deref(s.beer)
      3  where s.price > 3.5;
    
    NAME                      PRICE
    -------------------- ----------
    Heineken                     10
    
    SQL>
    

    Using REF Values for Retrieval of Data Values

        2
  •  0
  •   MT0    5 年前

    你不需要使用 JOIN 你可以用 DEREF SELECT 条款:

    select DEREF(s.beer).name AS name, s.price
    from   sells s
    where  s.price > 3.5;
    

    select s.beer.name AS name, s.price
    from   sells s
    where  s.price > 3.5;
    

    (第一个选项表明您正在取消引用 REF 而第二个选项更简洁。)

    NAME                 | PRICE
    :------------------- | ----:
    Heineken             |    10
    

    db<gt;小提琴 here

    推荐文章