Hallo! Bin neu bei Postgres und hätte eine Frage welche rules betrifft.
Ich habe folgende Tabelle erstellt.
create table emp (
empno numeric(4,0) not null,
ename character varying(10),
job character varying(9),
mgr numeric(4,0),
hiredate date,
sal numeric(7,2),
comm numeric(7,2),
deptno numeric(2,0),
CONSTRAINT pk_emp PRIMARY KEY (empno),
CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES dept(deptno),
CONSTRAINT fk_mgr FOREIGN KEY (mgr) REFERENCES emp(empno)
);
… für diese dann eine View
CREATE OR REPLACE VIEW v_emp
AS SELECT * FROM dbo.emp
WHERE mgr IN (SELECT empno FROM dbo.emp WHERE ename = session_user);
… für diese View dann eine Update-Rule
CREATE OR REPLACE RULE emp_ename_job_mgr_depno_upd AS ON UPDATE TO v_emp
DO INSTEAD
UPDATE emp
SET ename = NEW.ename,
job = NEW.job,
mgr = NEW.mgr,
deptno = NEW.mgr
WHERE empno = OLD.empno;
Versuche ich dann ein Update
UPDATE dbo.v_emp
SET ename = 'abc'
WHERE empno = 7782;
… bekomme ich folgende Fehlermeldung:
FEHLER: Feldüberlauf bei Typ »numeric«
DETAIL: Ein Feld mit Präzision 2, Skala 0 muss beim Runden einen Betrag von weniger als 10^2 ergeben.
Versteh leider nicht wieso das nicht geht. Bitte helft mir