我需要使用sql动态创建更新,所有更新的行必须在日志表中发送。在microsoft中,我可以使用OUTPUT子句,它将更新的行插入到表中,但我如何在db2中使用sql动态执行此操作?
我有以下表格:
AllCustomers—包含数据库中的所有客户
<表类>
Id
名称
tbody><<tr>1 约翰 2测试 表类>
您必须使用SELECT作为最外层的语句,并且在不同的cte中保持内部SELECT,如果您有多个cte的话。
试试这个:
WITH A AS
(
SELECT ID, NAME
FROM FINAL TABLE
(
UPDATE GDPR
SET NAME = 'Some name'
WHERE ID = 1
)
)
SELECT COUNT (1)
FROM FINAL TABLE
(
INSERT INTO GDPR_LOG (ID, NAME)
SELECT * FROM A
) B
更新:
使用动态SQL。
如果您使用某些工具运行该复合语句并在其中正确指定该语句结束符,则必须在整个语句中包含不同于默认终止符(;
)的语句终止符(例如,@
)。
BEGIN
DECLARE C1 CURSOR FOR S1;
PREPARE S1 FROM
'
WITH A AS
(
SELECT ID, NAME
FROM FINAL TABLE
(
UPDATE GDPR
SET NAME = ?
WHERE ID = ?
)
)
SELECT COUNT (1)
FROM FINAL TABLE
(
INSERT INTO GDPR_LOG (ID, NAME)
SELECT * FROM A
) B
';
OPEN C1 USING 'Name', 1;
CLOSE C1;
END