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

时间:2015-06-10 12:33:51

标签: sql oracle collections oracle-apex

我正在使用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

任何人都知道如何处理这个问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

您使用的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也可以避免这种情况。

如果子查询返回多行,则该语句将抛出错误。看起来不应该是这种情况。