当我尝试执行在表中插入记录的简单查询时,为什么我会收到此错误消息?

时间:2015-03-16 16:53:44

标签: sql database oracle oracle11g oracle-sqldeveloper

我在数据库中很新,我遇到了以下问题。

在Oracle DB上,我有一个名为 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

所以现在我必须直接在DB中插入一些记录(我需要做一些测试)但是我发现编写插入查询时遇到了一些问题,我正在学习本教程: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

修改-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;

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

1 个答案:

答案 0 :(得分:3)

删除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)