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?
3 svar · 435 visningar · startad av MinOrk
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.
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?
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
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.