首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL在嵌套表中创建identity列

问Oracle SQL在嵌套表中创建identity列
EN

Stack Overflow用户
提问于 2020-07-22 21:59:52
回答 2查看 157关注 0票数 1

我正在制作一个包含嵌套表的表:

代码语言:javascript
复制
create DOCUMENT as OBJECT (
    DOC_ID NUMBER,
    DESCRIPTION VARCHAR(1000));   

create type documents_t is table of DOCUMENT;

create table projects (
    ID NUMBER GENERATED ALWAYS AS IDENTITY ,
    DOCUMENTS documents_t)
    NESTED TABLE DOCUMENTS STORE AS documents_nested(
        (PRIMARY KEY(nested_table_id, DOC_ID)) ORGANIZATION INDEX);

这行得通,但我似乎找不到如何使嵌套表的主键作为标识列。有什么建议吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-23 01:42:41

请找到代码片段,

代码语言:javascript
复制
CREATE SEQUENCE seq_documents
 START WITH     1
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

CREATE OR REPLACE TYPE documents_q AS OBJECT
(
   doc_id      NUMBER,
   description VARCHAR2(1000),
   CONSTRUCTOR FUNCTION documents_q(p_description VARCHAR2) RETURN SELF AS RESULT
);

CREATE OR REPLACE TYPE BODY documents_q AS
   CONSTRUCTOR FUNCTION documents_q(p_description VARCHAR2) RETURN SELF AS RESULT IS
   BEGIN
      self.doc_id      := seq_documents.nextval;
      self.description := p_description;
      RETURN;
   END;
END;
/

CREATE TYPE documents_t AS TABLE OF documents_q;

create table projects (
    id NUMBER GENERATED ALWAYS AS IDENTITY ,
    documents documents_t)
    NESTED TABLE documents STORE AS documents_nested(
        (PRIMARY KEY(nested_table_id, doc_id))  ORGANIZATION INDEX);

INSERT INTO PROJECTS(documents) VALUES (documents_t(documents_q('Description One'),documents_q('Description Two')));
        
SELECT * FROM projects;

如果它给你提供了解决方案,请告诉我。谢谢

票数 1
EN

Stack Overflow用户

发布于 2020-07-23 23:45:02

如果你想要另一个不带构造函数的解决方案(因为使用构造函数会增加更多的维护)

我采用了@Sujitmohanty30的想法,并在insert语句中使用了序列。它使代码更易于维护,但也迫使您在插入时使用sequence,并在每个查询中插入一项(因为"sequence.nextval“在同一查询中不会递增):

代码语言:javascript
复制
CREATE SEQUENCE documents_seq NOCACHE;
/
CREATE TYPE document_type AS OBJECT (
   doc_id      NUMBER,
   description VARCHAR2(1000)
);
/
CREATE TYPE documents AS TABLE OF document_type;
/
create table projects_docs (
    id NUMBER GENERATED ALWAYS AS IDENTITY ,
    docs documents)
    NESTED TABLE docs STORE AS docs_nested(
        (PRIMARY KEY(nested_table_id, doc_id)) ORGANIZATION INDEX); 
 /
INSERT INTO projects_docs (docs) VALUES(
    documents(document_type(documents_seq.nextval, 'doc')));
/
select p.id, d.* from projects_docs p, table(p.docs) d;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63036013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档