Sql 复合主键显示为空

Sql 复合主键显示为空,sql,oracle,oracle11g,oracle-sqldeveloper,Sql,Oracle,Oracle11g,Oracle Sqldeveloper,我正在实现一个由3个其他值组成的复合主键。我已经创建了表,并在所有其他字段中插入了数据。假设我不需要为复合pk提供值,因为它使用其他值来创建自己,这对吗?以下是我的创建和插入脚本以帮助 CREATE TABLE representation ( representation_id NUMBER (4), reference_id NUMBER (4), case_id NUMBER (4), barrister_id

我正在实现一个由3个其他值组成的复合主键。我已经创建了表,并在所有其他字段中插入了数据。假设我不需要为复合pk提供值,因为它使用其他值来创建自己,这对吗?以下是我的创建和插入脚本以帮助

CREATE TABLE representation
(
   representation_id   NUMBER (4),
   reference_id        NUMBER (4),
   case_id             NUMBER (4),
   barrister_id        NUMBER (2),
   CONSTRAINT representation_case_id_fk FOREIGN KEY
      (case_id)
       REFERENCES CASE (case_id),
   CONSTRAINT representation_barrister_id_fk FOREIGN KEY
      (barrister_id)
       REFERENCES barrister (barrister_id),
   CONSTRAINT representation_pk PRIMARY KEY
      (reference_id, case_id, barrister_id)
);

INSERT INTO representation (reference_id, case_id, barrister_id)
     VALUES (sq_representation_reference.NEXTVAL, '0', '5');

这里没有关于Oracle为representation_id指定值的说明。尽管该字段的名称作为唯一标识符非常具有启发性,但实际上并没有任何东西使其成为唯一标识符,也没有赋予其值

您必须自己插入一个值。这可以通过以下几种方式实现:

  • 为它定义一个默认值(但每次都会给它相同的值),或者
  • INSERT
    语句中包含名称和值,或
  • 在INSERT触发器上编写一个
    ,在该触发器中,您可以通过基于其他三个的公式来定义此字段的值,或者从序列中获取该值

您的复合主键由三列组成:

CONSTRAINT representation_pk PRIMARY KEY
  (reference_id, case_id, barrister_id)
insert语句成功,因为这是您填充的三列:

INSERT INTO representation (reference_id, case_id, barrister_id)
引用ID不会发生任何变化,因为它是可选列:

SQL> desc representation
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 REPRESENTATION_ID                                  NUMBER(4)
 REFERENCE_ID                              NOT NULL NUMBER(4)
 CASE_ID                                   NOT NULL NUMBER(4)
 BARRISTER_ID                              NOT NULL NUMBER(2)

SQL>

(即使您没有明确指定NOTNULL约束,Oracle仍强制主列。)

问题出在哪里?您希望representation\u id获得值吗?是的,您必须将值填充到主键字段中。祝你好运。@trincot我没有“期待”它会。。。我不确定结果会是什么,我不确定它是否会被填充。我认为我需要自己填充它——这是有道理的。只是想确定一下。尽管“复合主键显示为null”,但还是要感谢您。没有给出这方面的证据。要使复合主键为null,您需要显示
reference\u id
case\u id
和/或
barrister\u id
为null<代码>表示\u id
未设置为您发布的DDL中任何类型的键。