Tabellenname zuweisen

Hallo,

steh voll aufm Schlauch, folgendes Function:

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.

Danke im Voraus
beho

Du suchst EXECUTE, dem Du einen String gibst, welcher Dein CREATE-Stament enthält. Beispiele siehe Doku.

Hallo,

argh, jetz wo du s sagst…

Dank dir!!!

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 :wink:

Hallo,

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)

danke nochmal
Grüße
beho