元の回答を削除しました。実行できません
これは単一のSQLステートメントで実行できるはずですが、これまでのところ、相関サブクエリの必要性とある種の分析関数の必要性の組み合わせにより、私が試したすべてが失敗しました。
これがあなたが望むことをするだろうと私が思う手続き的な方法です:
DECLARE
CURSOR t IS
SELECT LEAD(contractid,4) OVER (PARTITION BY assetid ORDER BY lasttradedate ASC) lead_contractid
FROM table1
FOR UPDATE;
BEGIN
FOR r IN t LOOP
UPDATE table1 SET nextcontractid = r.lead_contractid
WHERE CURRENT OF t;
END LOOP;
END;