ORA-00923 甲骨文错误

Posted

技术标签:

【中文标题】ORA-00923 甲骨文错误【英文标题】:ORA-00923 ORACLE ERROR 【发布时间】:2011-08-09 10:40:47 【问题描述】:
INSERT INTO FCR.TRANSACTION (TRX_UNIT, TRX_DATE, TRX_USR, 
         TRX_USR_SN, TRANSACTION_CODE,
         PRODUCT_CODE, CURRENCY_SHORT_DESCRIPTION, 
         AMOUNT_FC, EXCHANGE_RATE, AMOUNT_DC)
 SELECT SOURCE_SYSTEM_CHANNEL_CODE, to_char(TRANSACTION_DATE), 'dd/mm/yyyy'), 
    USER_CODE, USER_TRANSACTION_SERIAL_NUMBER, TRANSACTION_CODE, 
    PROFITS_PRODUCT_CODE, SHORT_DESCRIPTION, SOURCE_AMOUNT_FC, 
    SOURCE_EXCHANGE_RATE, SOURCE_AMOUNT_EUR
 FROM FCR.ORION_FCR_TRANSACTION
 WHERE TRANSACTION_DATE = 'to_char(" + date + ", 'dd/mm/yyyy')'

上面的查询是给我ORA-00923 ERROR. FROM KEYWORD NOT FOUND IN POSITION.

谁能帮我解决上述问题。

我认为该错误与我的 C# 代码中的行有关:

WHERE TRANSACTION_DATE = 'to_char(" + date + ", 'dd/mm/yyyy')'

【问题讨论】:

您实际上并不需要将所有内容都写成大写。 SQL有这样的传统;自然语言不会。 为什么 to_char 在 where 子句中被引用为字符串? SO 语法高亮很棒! 【参考方案1】:

这是因为 TRANSACTION_DATE 之后的右括号。

您将 to_char 放在字符串中的 WHERE 中这一事实也无济于事。 :)

我不确定,但如果您只使用一点缩进可能会有所帮助。如果您的查询以更易读的方式概述,则更容易发现这样的错字。

INSERT INTO FCR.TRANSACTION (
  TRX_UNIT, 
  TRX_DATE, 
  TRX_USR, 
  TRX_USR_SN, 
  TRANSACTION_CODE, 
  PRODUCT_CODE, 
  CURRENCY_SHORT_DESCRIPTION, 
  AMOUNT_FC, 
  EXCHANGE_RATE, 
  AMOUNT_DC)
SELECT 
  SOURCE_SYSTEM_CHANNEL_CODE, 
  to_char(TRANSACTION_DATE), 'dd/mm/yyyy'), 
  USER_CODE, 
  USER_TRANSACTION_SERIAL_NUMBER, 
  TRANSACTION_CODE, 
  PROFITS_PRODUCT_CODE, 
  SHORT_DESCRIPTION, 
  SOURCE_AMOUNT_FC, 
  SOURCE_EXCHANGE_RATE, 
  SOURCE_AMOUNT_EUR
FROM 
  FCR.ORION_FCR_TRANSACTION
WHERE 
  TRANSACTION_DATE = 'to_char(" + date + ", 'dd/mm/yyyy')'

【讨论】:

谢谢,但我删除了括号:INSERT INTO FCR.TRANSACTION (TRX_UNIT, TRX_DATE, TRX_USR, TRX_USR_SN, TRANSACTION_CODE, PRODUCT_CODE, CURRENCY_SHORT_DESCRIPTION, AMOUNT_FC, EXCHANGE_RATE, AMOUNT_DC) SELECT SOURCE_SYSTEM_CHANNEL_CODE, to_char /mm/yyyy'), USER_CODE, USER_TRANSACTION_SERIAL_NUMBER, TRANSACTION_CODE, PROFITS_PRODUCT_CODE, SHORT_DESCRIPTION, SOURCE_AMOUNT_FC, SOURCE_EXCHANGE_RATE, SOURCE_AMOUNT_EUR FCR.ORION_FCR_TRANSACTION WHERE TRANSACTION_DATE = 'to_char(" + date + ", 'dd/mm/y)' ora-00933:sql 命令未正确处理 ..和?发生什么事了吗? @golezTrol--我尝试了您的查询,但未找到 FROM 关键字,预计会出现错误。你知道我有什么问题吗>?非常感谢 那是因为我刚刚更正了该查询中的大纲。我指出了错误:删除 `to_char(TRANSACTION_DATE), 'dd/mm/yyyy'), ` 中的第一个右括号。 之后你会得到一个SQL command not properly ended,这是因为 WHERE 表达式中的语法错误。【参考方案2】:

我猜是这样的:

to_char(TRANSACTION_DATE), 'dd/mm/yyyy'), 

应该是这样的:

to_char(TRANSACTION_DATE, 'dd/mm/yyyy'), 

还有这个:

WHERE TRANSACTION_DATE = 'to_char(" + date + ", 'dd/mm/yyyy')'

应该是这样的:

WHERE TRANSACTION_DATE = to_char(date, 'dd/mm/yyyy')'

【讨论】:

我更改了它们,但仍然告诉我 sql 命令没有正确结束。我正在附加我的 sql 查询:INSERT INTO FCR.TRANSACTION (TRX_UNIT, TRX_DATE, TRX_USR, TRX_USR_SN, TRANSACTION_CODE, PRODUCT_CODE, CURRENCY_SHORT_DESCRIPTION, AMOUNT_FC, EXCHANGE_RATE, AMOUNT_DC) SELECT SOURCE_SYSTEM_CHANNEL_CODE, to_char(TRANSACTION_DATE, 'dd/mm/yyy , USER_TRANSACTION_SERIAL_NUMBER, TRANSACTION_CODE, PROFITS_PRODUCT_CODE, SHORT_DESCRIPTION, SOURCE_AMOUNT_FC, SOURCE_EXCHANGE_RATE, SOURCE_AMOUNT_EUR FCR.ORION_FCR_TRANSACTION WHERE TRANSACTION_DATE = 'to_char(date, 'dd/mm/yyyy')' 为什么你在 'to_char(date, 'dd/mm/yyyy')' 周围有引号,它们是不需要的【参考方案3】:

格式化后更清晰,您似乎在他的选择部分添加了一个)

你有SELECT SOURCE_SYSTEM_CHANNEL_CODE, to_char(TRANSACTION_DATE), 'dd/mm/yyyy'),

我认为您可能在 TRANSACTION_DATE 之后为 to_char 添加了一个额外的结束括号

SELECT SOURCE_SYSTEM_CHANNEL_CODE, to_char(TRANSACTION_DATE, 'dd/mm/yyyy'),

有助于清晰地格式化代码并使用匹配括号的编辑器。

【讨论】:

以上是关于ORA-00923 甲骨文错误的主要内容,如果未能解决你的问题,请参考以下文章

查询在预期的地方找不到关键字错误 ora-00923

ORA-00923: 在 oracle 中未找到预期错误的 FROM 关键字

ORA-00923 错误:在预期的地方找不到 FROM 关键字

错误:ORA-00923:在预期的地方找不到 FROM 关键字

我将如何修复这些“ORA-00933:SQL 命令未正确结束”“ORA-00923:未在预期位置找到 FROM 关键字”错误?

ORA-00923: 使用 shell 脚本在预期的地方找不到 FROM 关键字