甲骨文嵌套 table select

oracle nested table select

我如何编写一个查询来列出所有司机的名字和姓氏,以及他们驾驶的汽车的车辆识别号码?这是我目前所拥有的:

Create type DRIVER_TY as object (first_name VARCHAR2(20), last_name VARCHAR2(20), date_of_birth VARCHAR2(20));
Create type OWNER_TY as object (first_name VARCHAR2(20), last_name VARCHAR2(20), date_purchased VARCHAR2(25));
Create type OWNERS_NT is table of OWNER_TY;
Create table AUTOMOBILE (vehicle_identification_number NUMBER(25) PRIMARY KEY,
driver DRIVERS_VA,owner OWNERS_NT) NESTED TABLE owner STORE AS owner_infor;

您发布的代码与您的问题不完全匹配,所以我创建了这个变体 table:

Create table AUTOMOBILE (
   vehicle_identification_number NUMBER(25) PRIMARY KEY,
    drivers DRIVERS_VA,
    owners OWNERS_NT) 
    NESTED TABLE owners STORE AS owner_infor,
    NESTED TABLE drivers STORE AS driver_infor;

我用一些测试数据填充了它:

insert into automobile
values ( 23
        , DRIVERS_VA(DRIVER_TY('FOX', 'IN SOCKS', date '1947-08-11')
                      , DRIVER_TY('MR', 'KNOX', date '1941-02-01')
                      )
       , OWNERS_NT(OWNER_TY('THE', 'LORAX', date '1969-01-01')
                      )
   );
insert into automobile 
values ( 42
            , DRIVERS_VA(DRIVER_TY('SAM', 'I AM', date '1988-08-11')
                          , DRIVER_TY('DAISY-HEAD', 'MAYZIE', date '1983-02-01')
                          )
           , OWNERS_NT(OWNER_TY('THE', 'LORAX', date '1969-01-01')
                          )
       );

这是您要查询的内容:

SQL> select a.vehicle_identification_number as vin
  2         , drv.first_name
  3         , drv.last_name
  4  from automobile a
  5       , table(a.drivers) drv
  6  /

       VIN FIRST_NAME           LAST_NAME
---------- -------------------- --------------------
        23 FOX                  IN SOCKS
        23 MR                   KNOX
        42 SAM                  I AM
        42 DAISY-HEAD           MAYZIE

SQL> 

TABLE()函数将嵌套的table转换为可查询对象;它太酷了。请注意,别名是可选的,但建议使用(一如既往)。