[英]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.