0

Oracle11gには次のステートメントがあります。

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

ありがとう

4

2 に答える 2

3

私はかなり確信しています:

  1. あなたがしていることは私がしていることではありません。これは、関係の原則に完全に違反しているため、Oracleのオブジェクト/型システムは、一度配置されると変更できない可能性があります。SQLタイプ(PL / SQLタイプではない)の最も良い使用法は、基本的に、パイプライン化された関数の参照カーソルをキャストバックできることです。

  2. 次のように、コレクションをリレーショナルにクエリする前に、コレクションのネストを解除する必要があります。

    SELECT NAME FROM(SELECTSP。*FROM PEOPLE P、TABLE(P.SOME_PEOPLE)SP)

仕様には行を制限するもの(PERSON_ID属性など)がないため、これですべての行が得られます。

『Oracle Application Developer's Guide-Object Relational Features』では、これらすべてについて、例を挙げてさらに詳しく説明しています。

于 2010-02-15T17:44:33.963 に答える
0
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')  
           ) 
于 2016-06-06T12:51:23.840 に答える