-1

I need to modify the column last_update_date to today's date only if any other value of the table Table1 is modified. The code throws an error if the value to be modified is the column last_update_date.

Here is my code:

CREATE FUNCTION date_change() RETURNS TRIGGER AS $date$

BEGIN
    IF (TG_OP = 'UPDATE') THEN
            UPDATE erp.tb_customer SET last_update_date = current_date;
    ELSIF (OLD.last_update_date != NEW.last_update_date) THEN
        RAISE EXCEPTION 'Error not possible to modify the date';
    END IF;

1 Answers1

0

There are some problems.

you need a trigger

postgres thows an error when you send your code.

the Syntax can look like you see below

CREATE tABLE erp(myid int , last_update_date timestamp)
CREATE FUNCTION date_change() RETURNS TRIGGER AS $date$

BEGIN
    IF (TG_OP = 'UPDATE') THEN
            NEW.last_update_date = current_date;
    ELSIF (OLD.last_update_date != NEW.last_update_date) THEN
        RAISE EXCEPTION 'Error not possible to modify the date';
    END IF;
END;
$date$ language 'plpgsql';
CREATE TRIGGER erp_audit
BEFORE UPDATE ON  erp
    FOR EACH ROW EXECUTE FUNCTION date_change();

db<>fiddle here

As INSTEAD OF TRIGGER, it would look like, but that s for much more extensive functionality

CREATE tABLE erp(myid int , last_update_date timestamp)
CREATE VIEW erp_view AS SELECT * FROM erp;
CREATE FUNCTION date_change() RETURNS TRIGGER AS $date$

BEGIN
    IF (TG_OP = 'UPDATE') THEN
            NEW.last_update_date = current_date;
    ELSIF (OLD.last_update_date != NEW.last_update_date) THEN
        RAISE EXCEPTION 'Error not possible to modify the date';
    END IF;
END;
$date$ language 'plpgsql';
CREATE TRIGGER emp_audit
INSTEAD OF UPDATE ON erp_view
    FOR EACH ROW EXECUTE FUNCTION date_change();

db<>fiddle here

nbk
  • 45,398
  • 8
  • 30
  • 47