我是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;
但是我收到了编译错误。
我看到this回答了这个问题:
Oracle Nested Table predicate in where clause
但无法理解它们是如何工作的。
有人可以帮我解释一下语法吗?
答案 0 :(得分:0)
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,发现poller是一个嵌套表。我不知道他们为什么称它为嵌套表,它应该只被称为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中创建新行。因此,您可以在选举表中执行插入和更新,如
INSERT INTO table (select e.votes from election e where region ='A') values((voter_arrive('300','003')))
要访问poller嵌套表中的单个行,您需要使用TABLE()函数,如下所示: select * from table(从选举e中选择e.votes,其中region =' A')a其中a.id = 100