INSERT 语句中出现“此处不允许列”错误

问题描述 投票:0回答:14

我创建了这个名为 LOCATION 的表 通过这样做:

CREATE TABLE LOCATION(
POSTCODE VARCHAR(10) PRIMARY KEY,
STREET_NAME VARCHAR(20),
CITY VARCHAR(20));

当我尝试在表格中添加一些日期时,它不起作用,说有错误

INSERT INTO LOCATION VALUES(PQ95VM,'HAPPY_STREET','FRANCE');

错误是说

此处不允许列

sql oracle sql-insert
14个回答
65
投票

您缺少第一个值周围的引号,它应该是

INSERT INTO LOCATION VALUES('PQ95VM', 'HAPPY_STREET', 'FRANCE');

顺便说一句,出于可读性、可维护性和鲁棒性的原因,建议您在 INSERT 中显式指定列名称,即

INSERT INTO LOCATION (POSTCODE, STREET_NAME, CITY) VALUES ('PQ95VM', 'HAPPY_STREET', 'FRANCE');

6
投票

我犯了错误,使用了错误的引号。我在值列表中使用双引号而不是单引号作为字符串分隔符。 Oracle 中的双引号用作列标识符中的分隔符,与 MySQL 中的双引号不同,双引号用于括起字符串文字。

INSERT INTO MYUSERS VALUES( 'Name', "Surname");  // Wrong

INSERT INTO MYUSERS VALUES( 'Name', 'Surname'); // Correct, Surname must be in single quotes

5
投票

有时,在执行插入查询时,我们面临:

此处不允许列

错误。因为字符串参数中可能缺少引号。在字符串参数中添加引号并尝试执行。

试试这个:

INSERT INTO LOCATION VALUES('PQ95VM','HAPPY_STREET','FRANCE');

INSERT INTO LOCATION (ID, FIRST_NAME, LAST_NAME) VALUES('PQ95VM','HAPPY_STREET','FRANCE');

http://www.drtuts.com/oracle-error-column-not-allowed-here/


4
投票

INSERT INTO LOCATION VALUES(PQ95VM,'HAPPY_STREET','FRANCE');

上述代码不正确,因为您的第一个参数 POSTCODE 的类型为

VARCHAR(10)
。你应该使用
' '

尝试

INSERT INTO LOCATION VALUES('PQ95VM','HAPPY_STREET','FRANCE');


3
投票

就像斯卡夫曼所说 - 你缺少引号。 当您将值传递给 varchar2 时,始终使用引号

INSERT INTO LOCATION VALUES('PQ95VM','HAPPY_STREET','FRANCE');

因此,第一个 (') 开始字符串,第二个 (') 结束字符串。

但是如果您想在字符串中添加引号符号,例如:

我父亲告诉我:“孩子,你必须勇敢”。

您必须使用三引号符号,例如:

“我父亲告诉我:“你必须勇敢,儿子”。”

*添加引用方法可能因不同的数据库引擎而异


3
投票

将双引号 (" ") 转换为单引号 (' ')

示例

如果你有这样的事情:

INSERT INTO clients (id, email, country)
VALUES (1, "[email protected]", "USA");

将其转换为:

INSERT INTO clients (id, email, country)
VALUES (1, '[email protected]', 'USA');

2
投票

您错过了邮政编码中的

" "
,因为它是
varchar

有两种插入方式。

当您创建了一个表

Table created.
并且在创建后立即添加一行时,您可以使用以下方法。

INSERT INTO table_name
VALUES (value1,value2,value3,...);

1 row created.

您添加了太多表,或者已保存并重新打开它,您还需要提及表的列名,否则会显示相同的错误。

ERROR at line 2:
ORA-00984: column not allowed here


INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

1 row created.


0
投票

如果我们在输入变量名称时犯了一些拼写错误,这个错误就会出现。 就像在存储过程中一样,我有变量名称 x 并且在我的插入语句中使用

insert into tablename values(y);

它将抛出一个此处不允许的错误列。


0
投票
Scanner sc = new Scanner(System.in); 
String name = sc.nextLine();
String surname = sc.nextLine();
Statement statement = connection.createStatement();
String query = "INSERT INTO STUDENT VALUES("+'"name"'+","+'"surname"'+")";
statement.executeQuery();

连接字符串时不要错过添加'"----"'。


0
投票

尝试使用 varchar2 而不是 varchar 并使用这个:

INSERT INTO LOCATION VALUES('PQ95VM','HAPPY_STREET','FRANCE');


0
投票

在插入数据时,我们必须使用字符串分隔符(

' '
)。而且,您在插入值时错过了它(
' '
),这就是错误消息的原因。修正后的代码如下:

INSERT INTO LOCATION VALUES(PQ95VM,'HAPPY_STREET','FRANCE');

0
投票

我在使用插入命令时也遇到了同样的错误。当我用单引号替换双引号时,效果很好


0
投票

如果

PQ95VM
应该是文字字符串,则使用
'PQ95VM'
。如果它是一个变量,请确保它被声明。


0
投票

在 SQL Plus 中,我们必须使用单引号('')而不是双引号("")。

示例:

插入 emp value(1,"Nilay"); (错误的) 插入 emp 值(1,'Nilay'); (正确)

© www.soinside.com 2019 - 2024. All rights reserved.