Вопрос использует некоторую двусмысленную терминологию, которая делает неясным, что должно быть достигнуто.К счастью, DB2 предлагает надежную поддержку различных шаблонов SQL.
Чтобы ограничить количество строк, изменяемых с помощью UPDATE
:
UPDATE
( SELECT t.column1 FROM someschema.sometable t WHERE ... FETCH FIRST ROW ONLY
)
SET column1 = 'newvalue';
Оператор UPDATE
никогда не видитбазовая таблица, просто выражение, которое фильтрует ее, так что вы можете контролировать, какие строки обновляются.INSERT
ограниченное количество новых строк:
INSERT INTO mktg.offeredcoupons( cust_id, coupon_id, offered_on, expires_on )
SELECT c.cust_id, 1234, CURRENT TIMESTAMP, CURRENT TIMESTAMP + 30 DAYS
FROM mktg.customers c
LEFT OUTER JOIN mktg.offered_coupons o
ON o.cust_id = c.cust_id
WHERE ....
AND o.cust_id IS NULL
FETCH FIRST 1000 ROWS ONLY;
Вот как DB2 поддерживает SELECT
из операторов UPDATE
, INSERT
или DELETE
:
SELECT column1 FROM NEW TABLE (
UPDATE ( SELECT column1 FROM someschema.sometable
WHERE ... FETCH FIRST ROW ONLY
)
SET column1 = 'newvalue'
) AS x;
SELECT
будет возвращать данные только из измененных строк.