簡體   English   中英

在where子句中使用嵌套表值(oracle)

[英]use nested table value in where clause(oracle)

我對Oracle DBMS還是相當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

我需要根據當前輸入的poll_nest的cid屬性值執行一些操作(例如,根據cid遞增值)

所以我使用了after trigger在其中執行了以下操作:

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

但我得到一個編譯錯誤。 我也看到了這個答案,也是如此: Oracle嵌套表謂詞在where子句中
但不知道它們是如何工作的。

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

更新:我查閱了oracle文檔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()是嵌套表類型poller的構造函數。 傳遞給構造函數的所有值都將在poller中創建新行。 因此,您可以在選舉表中執行插入和更新,例如

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

要訪問輪詢器嵌套表中的單個行,您需要使用TABLE()函數,如下所示:從表中選擇*(從e中選擇e.votes,在e為region ='A'的情況下)a在其中a.id = 100

插入后的選舉表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM