TypeORM操作Oracle用NVL处理字符串报ORA-00904:"Pending"无效标识符如何解决
问题原因
- 报错
ORA-00904: "Pending": invalid identifier的核心是Oracle语法规则:双引号在Oracle SQL中仅用于标注标识符(如表名、列名、别名,区分大小写时使用),而字符串字面量必须使用单引号包裹。你将字符串Pending用双引号包裹后,Oracle会将其识别为列名去检索,自然会抛出标识符不存在的错误。 - 之前数值类型可以正常运行是因为
0是数值字面量,不需要加引号包裹,不存在符号误用问题。
正确写法
原生Oracle SQL写法
NVL(Details.status, 'Pending') AS "PostulationDetail_status"
仅需要把"Pending"的双引号替换为单引号即可正常运行。
TypeORM 写法适配
如果使用TypeORM查询构建器编写,更推荐用参数绑定的方式处理,不需要自行处理引号转义,也能避免SQL注入风险,示例代码:
queryBuilder.addSelect( "NVL(Details.status, :defaultStatus)", "PostulationDetail_status" ) .setParameter("defaultStatus", "Pending")
内容的提问来源于stack exchange,提问作者Luis Contreras
相关产品推荐
相关产品推荐

