CREATE TABLE A (
A1 integer,
A2 integer,
A3 integer
);
create function f(a1_ in integer) return integer
is
ret integer;
begin
select a3 1 into ret from A where a1=a1_;
return ret;
end;
INSERT INTO A SELECT 1 a1,1 a2,1 a3 FROM dual union all select 2 a1, 2 a2, 2 a3 from dual
update A t1
set a3 =
(select f(a1) from A t2 where t1.a1=t2.a1);
A 正在變異,觸發器/函式可能看不到它
此代碼不起作用。與之相反
update A t1
set a3=
(select f(a1) from A t2 where t1.a1=t2.a1);
問題如下。我正在使用使用同一個表的函式來更新表。但是我在這些表中使用的列沒有被 f 修改。我只使用 a1 來回傳 a3 的下一個值。此陳述句中未修改 a1
有沒有辦法做這些操作。(也許使用關鍵字或其他東西)
代碼
uj5u.com熱心網友回復:
您可以使用 PL/SQL:
DECLARE
v_a1s SYS.ODCINUMBERLIST;
v_fs SYS.ODCINUMBERLIST;
BEGIN
SELECT a1, f(a1)
BULK COLLECT INTO v_a1s, v_fs
FROM A
FOR UPDATE OF a3;
FORALL i IN 1 .. v_a1s.COUNT
UPDATE A
SET a3 = v_fs(i)
WHERE a1 = v_a1s(i);
END;
/
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488346.html
上一篇:獲得小時間隔之間的銷售額
下一篇:從另一個頁面更新兩個欄位的資料
