我正在尝试使用像这样的单个语句更新两个表
db2 update catentry, catentdesc
set catentry.buyable=0,
catentdesc.published=0
where catentry.catentry_id=catentdesc.catentry_id
and catentry.partnumber='some value'
但收到错误
我该如何做到这一点?
答案 0 :(得分:0)
将DB2 CLP设置为autocommit OFF并使用;
命令终止符:
db2 +c -t
update catentry set buyable=0 where partnumber='some value';
update catentdesc set published=0 where catentry_id IN
(SELECT catentry_id FROM catentry where partnumber='some value');
commit;
答案 1 :(得分:0)
不确定为什么要在单个语句中执行此操作,但最新版本的DB2 for LUW(以及有一些限制,DB2 for z / OS)支持所谓的数据更改表引用允许像
这样的技巧WITH t1 (catentry_id) AS (
SELECT catentry_id FROM FINAL TABLE (
UPDATE catentry SET buyable = 0 WHERE partnumber = 'some value'
)
), t2 (catentry_id) AS (
SELECT catentry_id FROM FINAL TABLE (
UPDATE catentdesc SET published = 0 WHERE catentry_id = (
SELECT catentry_id FROM t1
)
)
) SELECT 1 FROM sysibm.sysdummy1
请注意,实际语句必须是某个SELECT
,而UPDATE
语句也包含在它们自己的SELECT
中,但这是作为单个语句执行的。