использовать значение вложенной таблицы в предложении where (oracle)

я новичок в Oracle DBMS и хотел бы знать, как использовать элемент вложенной таблицы в предложении where

в частности
у меня есть вложенная таблица с именем poll_nest

   SQL> desc poll_nest
     Name                                      Null?    Type
    ----------------------------------------- -------- ----------------------------

    ID                                                 VARCHAR2(20)
    CID                                                VARCHAR2(20)

который был создан следующим образом

create or replace type voter_arrive as object(id varchar(20),cid varchar(20));
create or replace type poller as table of voter_arrive;

а затем он был вставлен в таблицу выборов как poll_nest

    SQL> desc election;
    Name                                      Null?    Type
   ----------------------------------------- -------- ----------------------------

     REGION                                             VARCHAR2(20)
     STIME                                              TIMESTAMP(6)
     ETIME                                              TIMESTAMP(6)
     VOTES                                              POLLER

мне нужно предпринять некоторые действия на основе значения атрибута cid poll_nest, которое в настоящее время введено (например, увеличение значения на основе cid)

поэтому я использовал after trigger, в котором я сделал это:< бр/>

select distinct t.cid into voted from election e,table(e.votes) t where t.cid=:new.votes.cid;

но я получаю ошибку компиляции. я видел этот ответ и это тоже: Предикат Oracle Nested Table в предложении where
, но не мог понять, как они работают..

может ли кто-нибудь помочь мне с синтаксисом?


person raghav710    schedule 22.03.2014    source источник


Ответы (1)


poll_nest не является вложенной таблицей. Его таблица, в которой хранится объект PL SQL.

Из http://www.orafaq.com/wiki/NESTED_TABLE:

NESTED TABLE — это тип данных Oracle, используемый для поддержки столбцов, содержащих многозначные атрибуты, в данном случае столбцов, которые могут содержать всю подтаблицу.

Вы можете вставить значение в таблицу типа объекта, сначала создав экземпляр конструктора объекта, например

insert into poll_nest values (voter_arrive('122','112'));

Для доступа к вставленному значению вы можете использовать

select e.voter.arrive.cid from poll_tab e where e.voter_arrive.id = '122';

также проверьте эту ссылку: http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/objects.htm

Обновление: я просмотрел документацию по оракулу http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/05_colls.htm , и я обнаружил, что опросчик представляет собой вложенную таблицу. Я не знаю, почему они называют это вложенной таблицей, ее следует называть только таблицей PL/SQL.

Я предположил, что poll_nest похож на этот, и ответил на вопрос CREATE TABLE APPS.POLL_NEST ( VOTER APPS.VOTER_ARRIVE )

но теперь я думаю, что вы создали таблицу и такие объекты, как

create or replace type voter_arrive as object(id varchar(20),cid varchar(20));


 create or replace type poller as table of voter_arrive;

create  table election(
 REGION                                             VARCHAR2(20),
 STIME                                              TIMESTAMP(6),
 ETIME                                              TIMESTAMP(6),
 VOTES                                              POLLER
)    NESTED TABLE VOTES STORE AS VOTES_TAB;

Для каждого региона (который должен быть уникальным) вы собираетесь сохранять записи во вложенной таблице VOTES. Если я прав

INSERT INTO election
 VALUES ( 'A',
         CURRENT_TIMESTAMP,
         CURRENT_TIMESTAMP,poller(voter_arrive('100','001'),voter_arrive('200','002')) )

poller() — это конструктор опросника типа вложенной таблицы. Все значения, переданные в конструктор, создадут новую строку в опросчике. Таким образом, вы можете выполнять вставку и обновление в таблице выборов, например

INSERT INTO table (select e.votes from election e where region ='A')      values((voter_arrive('300','003')))

Чтобы получить доступ к отдельной строке во вложенной таблице опросчика, вам нужно использовать функцию TABLE() следующим образом: выберите * из таблицы (выберите e.votes из выборов e, где регион = «A») a, где a.id = 100

таблица выбора после вставки

person crazycloud    schedule 23.03.2014
comment
спасибо за ответ.. я попробовал синтаксис, предложенный вами, и получил ORA-04044: процедура, функция, пакет или тип здесь не разрешены.. в чем может быть ошибка? @crazycloud... я принял ваш ответ для помогая мне понять о вложенной таблице - person raghav710; 24.03.2014
comment
@craycloud спасибо за очень информативный ответ и спасибо за ваше время!!!хорошее объяснение тоже... :) - person raghav710; 25.03.2014