【问题标题】:Update multiple values in an oracle table using values from an APEX collection使用 APEX 集合中的值更新 oracle 表中的多个值
【发布时间】:2016-04-12 23:18:27
【问题描述】:

我正在使用 APEX 集合来存储一些值并在 Oracle Application Express 4.2.3 的页面之间传递它们。

然后我想使用集合中的值对名为“project”的表执行更新语句。

到目前为止我的代码如下:

 update project
  SET name=c.c002, 
      description=c.c007, 
      start_date=c.c004, 
      timeframe=c.c005, 
      status=c.c009
  FROM 
      apex_collections c
  WHERE 
      c.collection_name = 'PROJECT_DETAILS_COLLECTION'
      and id = :p14_id;

其中 :p14_id 是页面项的值。

但是,我收到以下错误:

ORA-00933: SQL command not properly ended

有人知道如何解决这个问题吗?

谢谢!

【问题讨论】:

  • 以这种方式使用“from”的语法不正确,请阅读this

标签: sql oracle collections oracle-apex


【解决方案1】:

您使用的UPDATE 语法在Oracle 中无效;它不允许您以您尝试的方式使用FROM

在 Oracle 中执行此操作的最简单方法是使用子查询:

update project
  set (name, description, start_date, timeframe, status) = 
    (select c.c002, c.c007, c.c004, c.c005, c.c009
       FROM 
         apex_collections c
       WHERE 
         c.collection_name = 'PROJECT_DETAILS_COLLECTION'
    )
  WHERE
    id = :p14_id
  ;

注意,如果子查询没有返回行,则目标表中的列将更新为NULL;这可以通过在更新的谓词中添加类似的EXISTS 条件来避免。也可以通过使用MERGE 语句而不是UPDATE 来避免这种情况。

如果子查询返回多行,该语句将抛出错误。看来这里不应该是这样。

【讨论】:

  • 知道了!感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2014-10-02
相关资源
最近更新 更多