SQL*LOADER控制文件报ORA-00936缺失表达式错误如何解决
问题根因
SQLLoader的EXPRESSION字段配置只需要接收标量表达式,不需要写完整的SELECT ... FROM dual查询结构。你写了完整查询语句反而不符合SQLLoader的语法规范,触发ORA-00936: missing expression报错。
修复方案
修改控制文件中NEXT_MONDAY字段的配置,直接调用NEXT_DAY函数即可:
LOAD DATA INFILE 'data_for_insert.csv' INSERT INTO TABLE TABLE_NAME FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( COL1, COL2, NEXT_MONDAY EXPRESSION "NEXT_DAY(SYSDATE, 'MONDAY')", TODAY SYSDATE )
补充说明
你在SQL Developer中可以正常执行SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM dual是因为这是完整的查询语句,而SQL*Loader处理EXPRESSION时,会自动把你写的表达式嵌入到INSERT语句的对应列值位置,不需要额外的查询语法,和你直接写TODAY SYSDATE是同一个逻辑。
如果你的数据库默认语言不是英文,还可以给NEXT_DAY指定语言参数避免识别失败:
NEXT_MONDAY EXPRESSION "NEXT_DAY(SYSDATE, 'MONDAY', 'NLS_DATE_LANGUAGE = AMERICAN')"
内容的提问来源于stack exchange,提问作者Sss
相关产品推荐
相关产品推荐

