Infromation/Warnung für Insert Trigger

lulaka

Neuer Benutzer
Beiträge
2
Hi,
ich möchte via Trigger das Insert für eine bestimmte Tabelle überwachen und eine Information oder Warnung ausgeben falls eine bestimmte Grenze überschritten wird.
Dabei soll trotz Überschreitung der Grenze das Einfügen durchgeführt werden.
Ich möchte nur dem Nutzer eine Information/Warnung/Echo oder sonst irgendwas zukommen lassen.
Der Nutzer arbeitet grundsätzlich in PHPMyAdmin und nutzt ein aktuelles MariaDB.

Folgendes hab ich bereits probiert:
BEFOR INSERT .... THEN
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Information';
END IF;
--> Warnung wird ausgegeben, aber Einfügen wird nicht durchgeführt

AFTER INSERT .... THEN
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Information';
END IF;
--> Einfügen wird nicht durchgeführt, aber keine Warnung wird ausgegeben
--> Weitere SIGNAL SQLSTATE Zahlen hab ich ohne Erfolg auch getestet

BEFOR INSERT .... THEN
// Aufruf eines stored procedure, welches einfach ein SELECT "TEXT" macht
END IF;
--> Return im Trigger ist nicht erlaubt​

Hättet ihr eine Idee, um den Trigger auszulösen und eine Info auszugeben, aber das Einfügen trotzdem zuzulassen?
 
Werbung:
ich kenne MySQL nicht so gut, aber hier wie es mit PostgreSQL gehen würde, vielleicht hilft das ja als Idee...

Code:
test=# create table lulaka ( i int primary key, val text);
CREATE TABLE
test=*# create or replace function check_info_length() returns trigger as $$begin raise notice 'zu kurzer Text eingegeben: %', new.val; return new; end; $$ language plpgsql;
CREATE FUNCTION
test=*# create trigger check_info_length before insert on lulaka for each row when (length(new.val) < 10) execute procedure check_info_length();
CREATE TRIGGER
test=*# commit;
COMMIT
test=# insert into lulaka values (1, 'dieser text ist lang genug');
INSERT 0 1
test=*# insert into lulaka values (2, 'abc');
HINWEIS:  zu kurzer Text eingegeben: abc
INSERT 0 1
test=*# select * from lulaka ;
 i |            val             
---+----------------------------
 1 | dieser text ist lang genug
 2 | abc
(2 rows)

test=*#
 
Hi, danke für deine Antwort.

Soweit ich das erkenne nutzt du auch einen "procedure" Aufruf, was bei MYsql nicht funktioniert, da kein Return aus dem Trigger mölich ist.
 
Werbung:
Soweit ich das erkenne nutzt du auch einen "procedure" Aufruf, was bei MYsql nicht funktioniert, da kein Return aus dem Trigger mölich ist.

Danke für den Hinweis - aber das ist es nicht:

Code:
test=# drop table lulaka ;
DROP TABLE
test=*# create table lulaka ( i int primary key, val text);
CREATE TABLE
test=*# create or replace function check_info_length() returns trigger as $$begin raise notice 'zu kurzer Text eingegeben: %', new.val; return new; end; $$ language plpgsql;
CREATE FUNCTION
test=*# create trigger check_info_length before insert on lulaka for each row when (length(new.val) < 10) execute function check_info_length();
CREATE TRIGGER
test=*# insert into lulaka values (1, 'dieser text ist lang genug');
INSERT 0 1
test=*# insert into lulaka values (2, 'abc');
HINWEIS:  zu kurzer Text eingegeben: abc
INSERT 0 1
test=*#
 
Zurück
Oben