当前位置: 首页 > news >正文

Oracle:ORA-00904: “10“: 标识符无效报错详解

 1.报错Oracle语句如下

SELECT YK_CKGY.ID,YK_CKGY.DJH,YK_CKGY.BLRQ,YK_CKGY.ZBRQ,YK_CKGY.SHRQ,YK_CKGY.YT,YK_CKGY.ZDR,YK_CKGY.SHR,YK_CKGY.BZ,YK_CKGY.JZRQ,YK_CKGY.ZT,YK_CKGY.CKLX,(case YK_CKGY.CKLXwhen '09' then'药房调借'when '02' then'科室退药'when '03' then'损耗出库'when '04' then'科室领药'when '06' then'药房退药'when '07' then'药房领药'when '88' then'领药计划'when '08' then'过期出库'when '10' then'其它出库'end) AS LXMC,YK_CKGY.BMNBBH,(select CO_QX_XTBM.BMMCfrom CO_QX_XTBMwhere YK_CKGY.BMNBBH = CO_QX_XTBM.BMNBBH) as DCBMMC,(select CO_QX_XTBM.BMMCfrom CO_QX_XTBMwhere YK_CKGY.DRBM = CO_QX_XTBM.BMNBBH) as DRBMMC,YK_CKGY.DRBM,(select sum(yk_ckmx.cksl * YK_CKMX.CBJ)from yk_ckmxwhere gyid = YK_CKGY.id) as jhjeFROM YK_CKGYWHERE 1 = 1and substr(YK_CKGY.BLRQ, 1, 10) >= '2024/12/07'and substr(YK_CKGY.BLRQ, 1, 10) <= '2025/01/07'and YK_CKGY.JZRQ is nulland (YK_CKGY.DRBM = 2202)and YK_CKGY.ZT = 2 andYK_CKGY.jgdm = '22'and YK_CKGY.CKLX IN ("04", "07", "03", "02", "06", "10")

2.报错原因: 

Oracle 数据库中,双引号用于引用列名、表名等标识符(区分大小写)。但是,在 SQL 中,数字或字符串应该使用单引号。因此,IN ("04", "07", "03", "02", "06", "10") 中的双引号应该替换为单引号。

3:修正: 

 IN ('04', '07', '03', '02', '06', '10')

4.其他潜在问题:

substr(YK_CKGY.BLRQ, 1, 10) 用于截取日期的前 10 位,如果 BLRQ 是日期字段,可以考虑直接使用 TO_DATE 函数来进行日期比较,避免使用 substr 来处理日期字段。

SELECT YK_CKGY.ID,YK_CKGY.DJH,YK_CKGY.BLRQ,YK_CKGY.ZBRQ,YK_CKGY.SHRQ,YK_CKGY.YT,YK_CKGY.ZDR,YK_CKGY.SHR,YK_CKGY.BZ,YK_CKGY.JZRQ,YK_CKGY.ZT,YK_CKGY.CKLX,(case YK_CKGY.CKLXwhen '09' then'药房调借'when '02' then'科室退药'when '03' then'损耗出库'when '04' then'科室领药'when '06' then'药房退药'when '07' then'药房领药'when '88' then'领药计划'when '08' then'过期出库'when '10' then'其它出库'end) AS LXMC,YK_CKGY.BMNBBH,(select CO_QX_XTBM.BMMCfrom CO_QX_XTBMwhere YK_CKGY.BMNBBH = CO_QX_XTBM.BMNBBH) as DCBMMC,(select CO_QX_XTBM.BMMCfrom CO_QX_XTBMwhere YK_CKGY.DRBM = CO_QX_XTBM.BMNBBH) as DRBMMC,YK_CKGY.DRBM,(select sum(yk_ckmx.cksl * YK_CKMX.CBJ)from yk_ckmxwhere gyid = YK_CKGY.id) as jhjeFROM YK_CKGYWHERE 1 = 1and substr(YK_CKGY.BLRQ, 1, 10) >= '2024/12/07'and TO_DATE(substr(YK_CKGY.BLRQ, 1, 10), 'YYYY/MM/DD') <=TO_DATE('2025/01/07', 'YYYY/MM/DD')and YK_CKGY.JZRQ is nulland (YK_CKGY.DRBM = 2202)and YK_CKGY.ZT = 2and YK_CKGY.jgdm = '22'and YK_CKGY.CKLX IN ('04', '07', '03', '02', '06', '10')

5.总结 

  1. 使用单引号来定义字符串值,例如 IN ('04', '07', '03', '02', '06', '10')
  2. 如果 BLRQ 字段是日期类型,考虑直接使用 TO_DATE 进行日期比较,而不使用 substr 来截取字符串。

 补充:

在 Vue 组件中使用正则替换双引号:

使用 replace() 替换双引号为单引号:

let str = '("04", "07", "03", "02", "06", "10")';
str = str.replace(/"([^"]+)"/g, "'$1'");

解释:

  1. 正则表达式 /\"([^\"]+)\"/g

    • \" 匹配双引号。
    • ([^\"]+) 匹配双引号内的内容,并捕获它。
    • $1 表示替换成捕获的内容。
    • g 标志表示全局匹配,即替换字符串中的所有双引号。
  2. replace() 方法

    • 将匹配到的内容替换为单引号包裹的内容。

 

 

http://www.lryc.cn/news/517921.html

相关文章:

  • C语言#define定义宏
  • SpringBoot操作spark处理hdfs文件
  • 消息队列架构、选型、专有名词解释
  • 用OpenCV实现UVC视频分屏
  • Allure 集成 pytest
  • 【Python】构建智能语音助手:使用Python实现语音识别与合成的全面指南
  • 在 Arthas 中调用 Spring Bean 方法
  • Nginx入门笔记
  • 【单片机】实现一个简单的ADC滤波器
  • 开源 vGPU 方案 HAMi 解析
  • 备考蓝桥杯:顺序表详解(静态顺序表,vector用法)
  • OA系统如何做好DDOS防护
  • 使用 Python 的 pyttsx3 库进行文本转语音
  • 如何在Windows上编译OpenCV4.7.0
  • 【玩转全栈】----Django连接MySQL
  • 25/1/4 算法笔记<强化学习> 生成对抗模仿学习
  • Flink维表方案选型
  • Oracle Database 23ai 新特性: UPDATE 和 DELETE 语句的直接联接
  • 机器学习之随机森林算法实现和特征重要性排名可视化
  • 网络安全图谱以及溯源算法
  • 单片机-外部中断
  • 《解锁计算机视觉智慧:编程实现图片场景文字描述的开源宝藏》
  • onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制
  • Visio 画阀门 符号 : 电动阀的画法
  • OOM排查思路
  • 《Spring Framework实战》10:4.1.4.2.详细的依赖和配置
  • 网络安全-XSS跨站脚本攻击(基础篇)
  • Git的学习和常见问题
  • Flink源码解析之:Flink on k8s 客户端提交任务源码分析
  • STLG_02_02_MS SQL - SSMS的安装和使用