ora-00972

yzuktlbb  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(356)
update t set command="select PIN_ID, PIN_STATUS from inventory where trunc(EXPIRY_DATE) <= trunc(sysdate) and pin_status in ('Delivered','GenHold')" where id='8';

我在命令行得到这个错误:2列:32错误报告-sql错误:ora-00972:标识符太长00972。00000-“标识符太长”原因:指定了超过128字节的标识符,或指定了超过30字节的密码标识符操作:为标识符指定最多128字节,为密码标识符指定最多30字节。
如何更新此字段?

wr98u20j

wr98u20j1#

查询中的问题是:您使用了 double quotes 表示字符串值。必须使用单引号来表示oracle中的字符串。双引号用于提供别名或对象名
查询中有单引号,因此需要在字符串中使用两个单引号来表示实际字符串值的单引号,如下所示:

UPDATE T
   SET
    COMMAND = 'select PIN_ID, PIN_STATUS from inventory where trunc(EXPIRY_DATE) <= trunc(sysdate) and pin_status in (''Delivered'',''GenHold'')'
 WHERE ID = '8';

但有一个简单的选择( quoted-string )

UPDATE T
   SET
    COMMAND = q'#select PIN_ID, PIN_STATUS from inventory where trunc(EXPIRY_DATE) <= trunc(sysdate) and pin_status in ('Delivered','GenHold')#'
 WHERE ID = '8';

这里,我用过 q'#<your_string>#' 只需忽略实际字符串中作为字符串结尾的所有单引号(否则必须用两个单引号替换字符串中的所有单引号)。它被称为引用字符串,表示为:

q'<delimiter><your_string><delimeter>'
vuktfyat

vuktfyat2#

问题在于引用,请使用下面的语句,

update t set command= 'select PIN_ID, PIN_STATUS from inventory where trunc(EXPIRY_DATE) <= trunc(sysdate) and pin_status in (''Delivered'',''GenHold'')' where id='8';

相关问题