我正在編寫INSTEAD OF UPDATE
觸發器,我想確定觸發觸發器的UPDATE語句的WHERE子句有哪些列。如何檢查觸發where子句中給出的內容?
例如,
比方說,我們有以下
table_name
--COL1
--COL2
--COL3
--COL4
我想,表時進行更新 例如UPDATE table_name SET COL1=VAL1,COL2=VAL2 WHERE COL3=VAL3
能在我的觸發
CREATE or replace TRIGGER DEVICES_VIEW_TR
INSTEAD OF UPDATE ON DEVICES_VW
BEGIN
IF (COL3 has been given in the where clause) THEN
variable=getValueOf(COL3);
ELSEIF (COL4 has been given in the where clause) THEN
variable=getValueOf(COL4);
END IF;
END;
/
說可以這樣做?
感謝
這看起來不太好。而不是更改set子句中提到的col1和col2,你想更改where子句中提到的col3?這會非常混亂。無論如何,觸發器不能告訴你的發射聲明,因此沒有機會知道where子句。 –
@ThorstenKettner我不想改變where子句中提到的COL3的值。我只想知道引發觸發器的更新語句是否包含where子句中的COL3或COL4。原因是因爲我想執行更新,where子句只包含主鍵列而不是將更新多個記錄的列。我希望現在很清楚。 – NikosDim
好的,你的例子有點混亂。正如我所說,觸發器不會告訴你觸發語句。所以你不能告訴其他col3或col4是在where子句中。唯一的選擇是檢測影響多行的更新,並在出現異常情況時拋出異常。即使這樣做也不容易,因爲觸發器中沒有關於受影響行數的信息。在這裏尋找一種方法來確定受影響的行數:http://stackoverflow.com/questions/8770386/how-to-get-number-of-rows-affected-by-a-statement-when-inside-that -statements-t –