暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

标识符无效,所有情况列举

长风一叹 2019-11-21
963

今天,遇到一个常见的数据库问题

标识符无效


查了一下资料

列举了一下所有的可能性以及解决方案


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"


文章转载自长风一叹,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论