我做了如下的觸發器。 test_suc_func
總是返回varchar2「00」。Oracle 11g - 想知道當前行信息,尤其是PK
create or replace procedure call_func (v_a_id IN NUMBER)
is
begin
update A_TBL set created = test_suc_func() where a_id = v_a_id;
end;
CREATE OR REPLACE TRIGGER a_trigger
AFTER
INSERT ON A_TBL
-- FOR EACH ROW
BEGIN
call_func(a_seq.currVal);
exception
when others then
update A_TBL set rc='99'
where a_id = a_id;
END;
我期待這個PLSQL執行如下。
- 當數據插入到A_TBL時,它調用一個函數。
- 當它失敗時,它更新該COLUMN。
問題是當我在exception
語句中寫道時,更新了A_TBL中的所有行。
由於A_TBL的PK是序列,我可以用a_seq.currVal
得到,但正如你所看到的,在where
語句中不能使用序列。
問:如何在JavaScript中引用當前行數據,如this
關鍵字?
我試過:new
和:old
,但它在sqldeveloper中彈出一個奇怪的窗口。謝謝:d BB
=================== 2015年09 18
我編輯的職位,因爲我得到了一個錯誤。部分a_seq
改爲a_id
s。
您不能在觸發了觸發器的表上運行'UPDATE'語句。你不需要它。 ':new.created:= test_suc_func();'是你所需要的觸發器 –
@a_horse_with_no_name這段代碼是簡單的版本。實際上,它會調用遠程數據庫中的一個函數。 - 我沒有得到你的第一個陳述。我提供的代碼實際上是作品。問題是它更新所有行,因爲我寫了我的where子句,比如'a_id = a_id'。我想寫的東西就像'a_id = this.a_id'或'a_id = a_seq.currVal'。無論如何感謝b –
在一個語句級別觸發器中,不存在「當前行」這樣的事情,因爲它是針對_statement_而不是針對每一行觸發的。聲明可能影響了數百萬行。 –