Create OR Replace Function CreateTimeLine() RETURNS TRIGGER AS $CreateTimeLine$
DECLARE
tabname text;
Begin
IF NEW.name IS NULL THEN
RAISE EXCEPTION 'name cannot be null';
ELSIF NEW.TimeLine_table IS NOT NULL THEN
tabname := NEW.name;
END IF;
CREATE TABLE TimeLinetables.tabname (
id bigserial NOT NULL,
ts time NOT NULL,
val float8 NOT NULL DEFAULT 0
);
RETURN NEW;
End;
$CreateTimeLine$ LANGUAGE plpgsql;
CREATE TRIGGER CreateTimeLine BEFORE INSERT OR UPDATE ON TimeLine
FOR EACH ROW EXECUTE PROCEDURE CreateTimeLine();
Knackpunkt ist Zeile 11. Eigentlich soll der zu erstellenden Tabelle der Wert von tabname zugewiesen werden. So wie es dasteht, wird die Tabelle aber direkt “tabname” genannt… Ich schätz ma s is n reines Syntaxproblem und erbitte Hilfe.
In deinem Fall wird die Funktion fertig geparst und der Text “tabname” als Name der Tabelle angenommen. Mit einem EXECUTE kannst du dynamisch Strings zusammensetzen und diese auch ausführen lassen.
Jetzt solltest du noch die Tabelle TimeLinetables.tabname löschen, die ist nämlich nun zuviel
freilich freilich nachdem ich mir die Doku zu EXECUTE durchgelesen hab is auch alles ganz klar…
Bin halt noch die @parameter vom MS-SQL Server gewohnt ;o)