今天,遇到一个常见的数据库问题
标识符无效

查了一下资料
列举了一下所有的可能性以及解决方案
1、SQL中列名写错了
或者数据库中没有SQL中列名
解决方案:核对SQL语句,若数据库缺少字段则需要添加
2、查询字段中涉及Oracle关键字
解决方案:双引号标记
例如
insert into SSQX_SURGERY_INFO (ID, PackId, REMARK, DEPARTID, AMOUNT, PRIORITY)
values (3, 11, '1rt', 1, 1, 'fdg') 一直报PackId是无效标识符
改成insert into SSQX_SURGERY_INFO (ID, ”PackId“, REMARK, DEPARTID, AMOUNT, PRIORITY)
values (3, 11, '1rt', 1, 1, 'fdg') 就OK啦, PackId在oracle的关键字
3、建表时字段加了双引号,而插入语句没有给字段加上双引号
双引号在Oracle中表示区分大小写,Oracle是严格区分大小写的,未使用双引号时默认全部大写
Oracle会将小写自动转换为大写。
可能很多人都会误认为oracle是不区分大小写的,原因是我们在写查询语句的时候,大小写无所谓,结果都是一样的,这只是个表面现象,只要你不使用双引号表示区分大小写,oracle会默认把你写的脚本全部转换为大写的
比如你数据库中的字段是小写,你查询的SQL语句也是小写,但是ORACLE 将你的查询语句转为了大写(ORACLE严格区分大小写)这样去数据库中查找,它就找不到对应的字段。这样数据库就会报错
例如
create table t_studetn("stu_id","stu_name",.........
这样的话,在插入数据时字段上也加上双引号,并且大小写要对应,这样:
insert into T_STUDENT ("stu_id", "stu_name", "stu_password", "stu_age", "stu_perform") values ('001', 'David', 'David', 12, 89.00);
这里又涉及到一个知识点
就是如何让Oracle表及字段显示为区分大小写
没错,就是通过双引号
例如
create table "TDepartment" (
FID NVARCHAR2(36) not null,
"FText" NVARCHAR2(50) not null,
"FParentID" NVARCHAR2(36) not null,
"FLevel" NUMBER,
"FAutoCode" NVARCHAR2(100),
"FCode" NVARCHAR2(50),
"FLeaf" NUMBER default 1 not null,
"FRemark" NVARCHAR2(500),
"FDataServerIP" NVARCHAR2(100),
"FDataServerPort" NVARCHAR2(10),
"FMediaServerIP" NVARCHAR2(100),
"FMediaServerPort" NVARCHAR2(10),
"FDataServer" NVARCHAR2(200),
"FMediaServer" NVARCHAR2(200),
constraint PK_TDEPARTMENT primary key (FID)
);
当然查询的时候也需要用双引号
select * from "TDepartment"




