ORA-00984:INSERT语句报"Column not allowed here"错误原因排查
第一版代码错误原因
login_id字段定义为INTEGER整数类型,插入语句中给该字段传的是用单引号包裹的字符串格式值'9'、'10',在做严格类型校验的数据库中会触发类型不匹配的Column not allowed here错误,去掉数值两侧的单引号即可。
-- 修正后的第一版插入语句 INSERT INTO login (login_id, username, password) VALUES (9, 'Mukov', '1884'); INSERT INTO login (login_id, username, password) VALUES (10, 'Mukre', '661');
第二版修改后代码错误原因
- 插入列和传入值数量不匹配:INSERT语句指定要插入的列是
username、password共2个字段,但VALUES后提供了3个值,多写的'1'、'2'实际是要赋值给login_id的,需要在插入列列表中补上login_id字段。 - 主键非空约束问题:
login_id是主键非空字段,如果你没有提前给该字段设置自增序列/默认值,插入时不传入该字段的值也会触发约束报错。 - 如果你使用的是Oracle数据库,匿名块
BEGIN END结束后需要补充/才会正常执行。
-- 修正后的第二版代码(未设置login_id自增的场景) CREATE TABLE login ( login_id INTEGER PRIMARY KEY, username varchar(150) NOT NULL, password varchar(150) NOT NULL ); BEGIN INSERT INTO login (login_id, username, password) VALUES (1, 'Sukre', '1234'); INSERT INTO login (login_id, username, password) VALUES (2, 'Pal', '123444'); END; /
内容的提问来源于stack exchange,提问作者ek.Nik
相关产品推荐
相关产品推荐

