【问题标题】:Oracle SQL syntax error (missing right parenthesis)Oracle SQL 语法错误(缺少右括号)
【发布时间】:2016-07-21 06:15:39
【问题描述】:

我不明白为什么这会引发语法错误(缺少右括号):

UPDATE table
SET doc =
  (SELECT 'table-2844-doc' || SUBSTR(doc_file, INSTR(doc_file, '.', -1))
   FROM docvers
   WHERE (docvers.table_name = 'other_table'
          AND docvers.field_name = 'doc')
     AND ROWNUM = 1
   ORDER BY VERSION DESC)
WHERE table_id = 2844

这在我看来是正确的,确实在 SQL Server 中正确执行,并且类似于在 Oracle SQL: Update a table with data from another table 中找到的请求。

有什么建议吗?

【问题讨论】:

  • 它可能不会做你想做的事(因为它选择了一个任意行然后对其进行排序——它什么都不做)。但我没有看到明显的语法错误。
  • 语法错误。标量子查询块的语法中没有 ORDER BY。

标签: sql oracle select syntax


【解决方案1】:

这样做:

UPDATE table
SET doc = (
 select r.myval
 from (
 SELECT 'table-2844-doc' || SUBSTR(doc_file, INSTR(doc_file, '.', -1)) myval, ROWNUM RN
 FROM docvers
 WHERE docvers.table_name = 'other_table'
 AND docvers.field_name = 'doc'
 ORDER BY VERSION DESC
 ) r
 where r.RN = 1
)
WHERE table_id = 2844

首先选择包含ROWNUM的数据集,然后从该数据集中选择第一行。

【讨论】:

  • 奇怪的是,我们必须进行如此多的扭曲才能运行一个非常简单的查询。但是,您的解决方案非常清晰,并且确实有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
相关资源
最近更新 更多