2016-06-04 19 views
1

wurde aktualisiert bin ich ein Erstsemester in PL/SQL und haben ein solches Problem:Show, die Aufzeichnung unter Verwendung von Trigger

Ich möchte einen Trigger erstellen, die Namen der Person zeigt, Zahl, deren tel aktualisiert wurde

was ich

Set SERVEROUTPUT ON 

Create or replace trigger inform 
after update of scontact_number on SUPLIER 
for each row 
DECLARE 
x SUPLIER.ssurname%TYPE; 
BEGIN 
Select SSURNAME 
into x 
from SUPLIER; 
dbms_output.put_line('New tel number for ' || x); 
END; 
/

UPDATE SUPLIER 
SET SCONTACT_NUMBER = 6765092654 
WHERE ID_SUPLIER = 1; 

Trigger wurde getan haben zusammengestellt, aber wenn ich versucht hatte, es zu schießen, ich habe einen Fehler ‚Tabelle mutiert‘

Wie kann ich es beheben? Ich werde für jede Antwort dankbar sein

Antwort

2

Sie benötigen keine Tabellenreferenz im Trigger. Nur :new verwenden:

Create or replace trigger inform 
after update of scontact_number on SUPLIER 
for each row 
DECLARE 
    x SUPLIER.ssurname%TYPE; 
BEGIN 
    Select :new.SSURNAME 
    into x 
    from dual; 

    dbms_output.put_line('New tel number for ' || x); 
END; 
/

Oder, einfacher gesagt:

BEGIN 
    dbms_output.put_line('New tel number for ' || :new.SSURNAME); 
END; 

Und keine Variable erforderlich ist.

+0

In Bezug auf Ihr erstes Code-Snippet - ich glaube, nach den Best Practices ist es besser, den Wert einfach der Variablen ('x: =: new.SSURNAME;') zuzuweisen, anstatt den PL/SQL - SQL Kontext zu wechseln (SELECT ... INTO). – AndrewMcCoist