webForumDet fria alternativet

Oracle 8i trigger, hjälp

3 svar · 435 visningar · startad av MinOrk

MinOrkMedlem sedan aug. 2000234 inlägg
#1

Jag vill att när en användare lägger till en rad i tabellen tblObj så ska fältet pID sättas till samma värde som nID, oavsätt vad pID fick för värde vid INSERT-uttrycket.

Jag försöker göra så här:
CREATE OR REPLACE TRIGGER set_pid_to_nid
AFTER INSERT ON tblObj
FOR EACH ROW
BEGIN
UPDATE OBJECTS
SET pID = nID
WHERE nID = :NEW.nID;
END;

Men får detta felmeddelande:
General SQL error.
ORA-04091: tabellen tblObj muterar, triggern/funktionen upptäcker den kanske inte
ORA-06512: vid "SET_PID_TO_NID"
rad 2
ORA-04088: fel vid körning av triggern 'SET_PID_TO_NID'

vad är det som går snett? Kan man kanske lösa "uppgiften" på ett bättre sätt?

DBMS är Oracle 8i.

MinOrkMedlem sedan aug. 2000234 inlägg
#2

Ingen som kan hjälpa mig...

i alla fall... kan man "typecast:a" en INTEGER (NUMBER) till en VARCHAR i Oracle eller måste applikationen ta hand om sånt?

LarsGMedlem sedan dec. 200012 464 inlägg
#3

Kan du inte lägga in det i en before row trigger i stället. Då borde du kunna tilldela värdet direkt.


CREATE OR REPLACE TRIGGER set_pid_to_nid
before INSERT ON tblObj
FOR EACH ROW
BEGIN
:new.pid := :new.nid;
end

För att konvertera från numeriskt till varchar2 så finns funktionen to_char

select to_char(num_column) from t

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 08 jan 2002]

MinOrkMedlem sedan aug. 2000234 inlägg
#4

Tack! Jag hade gjort en before row trigger också som inte fungerade, men jag ser nu mitt misstag... pinsamt. Men nu fungerar det som jag tänkt.

250 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
126 ms — hämta forumlista (db)
122 ms — hämta statistik (db)
124 ms — hämta tråd, inlägg och bilagor (db)