سؤال

لدي العبارات التالية في أوراكل 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

شكرًا

هل كانت مفيدة؟

المحلول

أنا متأكد جدا من أن:

  1. ما تفعله ليس ما سأفعله. إنه نوع من المبادئ العلائقية تمامًا ، وسوف ينتهي بك الأمر بنظام كائن/نوع في Oracle قد لا تتمكن من التغيير بمجرد وضعه. أفضل استخدام رأيته لأنواع SQL (وليس أنواع PL/SQL) هو في الأساس أن يكون قادرًا على إلقاء مؤشر المرجع للوظائف التي يتم تحديدها.

  2. عليك أن لا تكون مجموعة المجموعة قبل أن تتمكن من الاستعلام عنها بشكل علاق ، مثل ذلك:

    حدد الاسم من (SELECT SP.* من People P ، Table (p.some_people) sp)

سيعطيك ذلك جميع الصفوف ، لأنه لا يوجد شيء في مواصفاتك (مثل سمة الشخص) لتقييد الصفوف.

دليل Oracle Application Developer - الميزات العلائقية للكائن يناقش كل هذا بعمق أكبر بكثير ، مع أمثلة.

نصائح أخرى

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')  
           ) 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top