gpt4 book ai didi

SQL/甲骨文 - "Cannot insert null into primary key"

转载 作者:行者123 更新时间:2023-12-01 13:50:00 24 4
gpt4 key购买 nike

所以,我有一个 Oracle 数据库(在 APEX 中),其中有一个名为“Scheme”的列。

如下所示:

CREATE TABLE Scheme
(
Scheme_ID NUMBER NOT Null,
description VARCHAR2 (800) ,
price FLOAT (3) ,
amount_sold INTEGER ,
Personal_Trainer_ID NUMBER NOT NULL
) ;
ALTER TABLE Schema ADD CONSTRAINT Schema_PK PRIMARY KEY ( Schema_ID ) ;

现在,我所有的表都像这样设置并且工作正常,但是当我尝试在我的 Scheme 上插入时,它说我正在尝试将 null 插入到主键 scheme_ID 中。

我将向您展示我使用的 2 个 SQL 插入。一份用于 personal_trainer,一份用于计划。

INSERT INTO Personal_Trainer (name, loginname, date_of_birth, password)
VALUES('Bojan', 'Bojan', '15-07-1974','fitline');

Peronal_Trainer 有一个 Personal_Trainer_ID 作为主键,与 Scheme 完全一样。插入此命令效果非常好。

insert into schema (description, price, amount_sold, Personal_Trainer_ID)
values ('3x pushups, 5x bench, 7x squats - 15kg',200, 1, 2);

现在,当我尝试插入此命令时,我收到此错误消息:

ORA-01400: 无法将 NULL 插入 ("SCHEME"."SCHEME_ID")

******************************编辑********************* ***********************

CREATE TABLE Personal_Trainer
(
Personal_Trainer_ID NUMBER NOT NULL,
name VARCHAR2 (35) ,
date_of_birth DATE ,
loginname VARCHAR2 (35) ,
password VARCHAR2 (35)
) ;
ALTER TABLE Personal_Trainer ADD CONSTRAINT Personal_Trainer_PK PRIMARY KEY ( Personal_Trainer_ID ) ;

这是我的私有(private)教练表。

最佳答案

您需要为 schemeid 提供一个唯一的非空值。

Oracle 12c 允许您优雅地将此列定义为标识列:

CREATE TABLE Scheme
(
Scheme_ID NUMBER GENERATED BY DEFAULT AS IDENTITY
description VARCHAR2 (800) ,
price FLOAT (3) ,
amount_sold INTEGER ,
Personal_Trainer_ID NUMBER NOT NULL
);

不幸的是,在早期的 Oracle 版本中,此选项不可用。惯用的解决方案是声明一个序列:

CREATE SEQUENCE scheme_id_seq;

或者直接使用它:

INSERT INTO schema 
(scheme_id, description, price, amount_sold, Personal_Trainer_ID)
VALUES
(scheme_id_seq.nextval, '3x pushups, 5x bench, 7x squats - 15kg',200, 1, 2);

或者创建一个触发器自动填充:

CREATE OR REPLACE TRIGGER schema_insert_tr
BEFORE INSERT ON schema
FOR EACH ROW
BEGIN
IF :new.scheme_id IS NULL THEN
SELECT scheme_id_seq.nextval INTO :new.scheme_id FROM DUAL;
END IF;
END;

关于SQL/甲骨文 - "Cannot insert null into primary key",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32624386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com