我正在使用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
任何人都知道如何处理这个问题?
谢谢!
答案 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
也可以避免这种情况。
如果子查询返回多行,则该语句将抛出错误。看起来不应该是这种情况。