使用 APEX 集合中的值更新 oracle table 中的多个值

Update multiple values in an oracle table using values from an APEX collection

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

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

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

 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

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

谢谢!

您使用的 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
  ;

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

来避免这种情况

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