【问题标题】:Unable to determine the cause of the "ORA-00922: missing or invalid option" error无法确定“ORA-00922:缺少或无效选项”错误的原因
【发布时间】:2021-05-03 23:43:28
【问题描述】:

当我尝试运行 Talend 作业以将数据从 Oracle 脚本加载到数据库表时,出现“ORA-00922:缺少或无效选项”错误

脚本本身已经过测试,并在 Oracle SQL 编辑器以及 Talend 中成功运行

有人知道为什么我在 Talend 中运行加载作业时可能会收到错误消息吗?

在 Internet 上快速查找此错误表明:

ORA-00922:如果在定义存储子句或列时指定了无效选项,则会出现丢失或无效选项。 Oracle 提供了有关此错误的以下信息:

原因:指定列时的有效选项是 NOT NULL 以指定该列不能包含任何 NULL 值。只有约束可以遵循数据类型。为 DATE 或 LONG 数据类型指定最大长度也会导致此错误。

如果我们可以暂时假设错误来自 SCHEMA,那么有人会发现此架构有什么问题吗?

  • “Column”和“Type”列属于数据源:Oracle SQL 脚本
  • “DB Column”和“DB Type”列属于数据应该加载到的 Oracle DB 表

这是直接取自 Oracle 的目标表定义。表名是 Payments

目标表已经存在。当我直接在表中运行插入脚本时,首先我收到消息:命令行错误:6 列:17 错误报告 - SQL 错误:ORA-00984:此处不允许列。第 6 行第 17 列的项目恰好是程序代码。

当我在程序代码的值(以及日期值)周围加上引号时,插入有效。正在填充不可为空的字段,如果我尝试将 NULL 插入不可为空的字段中,则会显示相应的错误消息

这是一个有效的插入脚本:

INSERT INTO PAYMENTS 
(CLAIMANT_ID, CLAIM_ID, PROGRAM_CODE, BWE_DATE, PROCESS_DATE, DEPOSIT_DATE,
GROSS_AMOUNT,CLAIMANT_NET_AMOUNT, FEDERAL_TAXES, STATE_LOCAL_TAXES, OP_OFFSET, 
 OOS_OP_OFFSET, CHILD_SUPPORT, OOS_CS, FPUC, LWA)
VALUES
(123456,54321,'ABC','24-OCT-20','01-JAN-21','04-JAN-21',149,128,15,6,0,0,0,0,0,0)

【问题讨论】:

  • 我不知道 Talend。但是,如果您删除 日期模式,会发生什么?
  • 我刚试过。没有什么不同。仍然显示相同的错误
  • 唯一的机会:尝试在日志中的某处找到create table 语句,看看有什么问题。祝你好运!
  • Oracle 错误非常普遍,因此在尝试调试问题时不是很有帮助。目标表是否已经存在或者是您的 Talend 工作正在创建它?如果它不存在,请尝试直接在 Oracle 中创建它并再次运行 Talend 作业。如果表确实已经存在,则检查不可为空的列是否都已填充到 Talend 作业中
  • @marmite 轰炸机,我不知道该怎么做,但我会和我们的 DBA 核实一下

标签: oracle syntax-error schema talend


【解决方案1】:

感谢您的帮助,错误原因已查明。我在脚本末尾放了一个分号(就像编写 SQL 查询时通常会做的那样。)但是在 Talend 中,整个脚本以双引号开始和结束。脚本后面不能有分号,然后以双引号结束。删除分号后,错误就消失了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2019-10-04
    相关资源
    最近更新 更多