【问题标题】:Why I obtain this error message when I try to perform this simple query that insert a record inside a table?为什么当我尝试执行在表中插入记录的简单查询时会收到此错误消息?
【发布时间】:2015-03-16 16:53:43
【问题描述】:

我是数据库新手,遇到以下问题。

在 Oracle 数据库中,我有一个名为 KM_COUNTRY_AREA 的表,其结构如下:

COLUMN NAME          DATA_TYPE           NULLABLE    DATA_DEFAULT   COLUMN_ID
--------------------------------------------------------------------------------
IDCOUNTRYAREA        NUMBER(19,0)          No           (null)             1    
NOMEFOLDER           VARCHAR2(255 CHAR)    Yes          (null)             2    
COUNTRY_IDCOUNTRY    NUMBER(19,0)          Yes          (null)             3    

所以 IDCOUNTRYAREA 字段我认为它是一个自动生成的字段(因为该表是使用 Hibernate 创建的,并且该字段被定义为 @Id 和 @模型类中的 GeneratedValue)。

所以现在我必须将一些记录直接插入到数据库中(我需要做一些测试)但是我发现编写插入查询时遇到了一些问题,我正在关注本教程:http://www.w3schools.com/sql/sql_insert.asp

我已经创建了这个 SQL 语句:

INSERT INTO KM_COUNTRY_AREA (IDCOUNTRYAREA, NOMEFOLDER, COUNTRY_IDCOUNTRY) VALUES (null, "BRAZIL", 715);

我已将第一列值设为 null,因为它必须是自动生成的(但我认为这是错误的)。

它不起作用,我收到以下错误消息:

Errore con inizio alla riga 1 nel comando:
INSERT INTO KM_COUNTRY_AREA (IDCOUNTRYAREA, NOMEFOLDER, COUNTRY_IDCOUNTRY)
VALUES (null, "BRAZIL", 715)
Errore alla riga del comando:2 Colonna:14
Report errori:
Errore SQL: ORA-00984: colonna non consentita in questo caso
00984. 00000 -  "column not allowed here"
*Cause:    
*Action:

如何解决此问题并将我的行正确插入到我的 KM_COUNTRY_AREA 表中?

Tnx

EDIT-1:

我尝试使用以下方法进行修改:

INSERT INTO KM_COUNTRY_AREA (IDCOUNTRYAREA, NOMEFOLDER, COUNTRY_IDCOUNTRY)
VALUES (null, 'BRAZIL', 715);

但我收到以下错误消息:

Errore con inizio alla riga 1 nel comando:
INSERT INTO KM_COUNTRY_AREA (IDCOUNTRYAREA, NOMEFOLDER, COUNTRY_IDCOUNTRY)
VALUES (null, 'BRAZIL', 715)
Report errori:
Errore SQL: ORA-01400: impossibile inserire NULL in ("PRC_KM_OWNER"."KM_COUNTRY_AREA"."IDCOUNTRYAREA")
01400. 00000 -  "cannot insert NULL into (%s)"
*Cause:    
*Action:

主键似乎不能为 null,但这很奇怪,因为在 Hibernate 中我将此字段定义为:

@Id
@GeneratedValue
private Long idCountryArea;

所以我认为它的值必须是自动生成的,有什么问题?

【问题讨论】:

  • 仅仅因为您的 Java 代码中有一些注释并不意味着 Oracle 会神奇地为该列生成值。阅读如何使用序列。

标签: sql database oracle oracle11g oracle-sqldeveloper


【解决方案1】:

删除Double quotes 并使用single quotes 插入varchar 数据

同时创建一个sequence 来自动生成值

CREATE SEQUENCE seq
MINVALUE 1
START WITH 1
INCREMENT BY 1

INSERT INTO KM_COUNTRY_AREA 
(IDCOUNTRYAREA,NOMEFOLDER, COUNTRY_IDCOUNTRY)
VALUES (seq.nextval, 'BRAZIL', 715)

【讨论】:

  • 还是不行。我已经更新了我的原始帖子,在这篇帖子的末尾插入了一个编辑,我解释了确切的问题
  • @AndreaNobili - 您不应该将 NULL 值插入到自动生成的列中,从插入中删除该列将自动生成。立即更新检查
  • 我尝试了你的新解决方案,但我得到 Errore SQL: ORA-01400: impossibile inserire NULL in ("PRC_KM_OWNER"."KM_COUNTRY_AREA"."IDCOUNTRYAREA") 01400. 00000 - "cannot insert NULL into ( %s)"
  • @AndreaNobili 看起来你还有一些带有not null 约束的列。您还必须将值插入到那些非空列中。示例我使用了some_value 你插入了正确的值
  • @AndreaNobili - 抱歉没有完全理解错误,现在尝试更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多