Beim Umgang mit Datenbankoperationen ist es oft notwendig, dynamische Werte als Tabellennamen zu verwenden. Dies kann durch dynamisches SQL erreicht werden, bei dem der Tabellenname während der Abfrageausführung ermittelt wird.
In PostgreSQL kann dynamisches SQL mithilfe der PL/PgSQL-EXECUTE-Anweisung innerhalb eines DO-Blocks oder einer PL/PgSQL-Funktion implementiert werden. Gewöhnliches SQL unterstützt kein dynamisches SQL.
Betrachten Sie beispielsweise das folgende Ziel: Verwenden des Ergebnisses einer Abfrage, um den Tabellennamen für eine nachfolgende Abfrage dynamisch zu bestimmen.
Abfrage an Ermitteln Sie den Tabellennamen:
SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')
Gewünschter Folgename Abfrage:
CREATE TABLE (SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')) AS * SELECT FROM backup
Lösung mit PL/PgSQL EXECUTE:
DO $$ BEGIN EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd')); END; $$ LANGUAGE plpgsql;
Erklärung:
Die Funktion format(...) wird zum Erstellen der dynamischen SQL-Anweisung verwendet. Der %I-Formatbezeichner gewährleistet die korrekte Anführungszeichen des Tabellen-/Spaltennamens.
Hinweis:
Für Literalwerte wird empfohlen, anstelle von EXECUTE ... USING zu verwenden format(...) mit %L. Für Bezeichner wie Tabellennamen ist das Format %I-Muster jedoch eine praktische Alternative zur Verwendung von quote_ident.
Das obige ist der detaillierte Inhalt vonWie verwende ich dynamische Werte als Tabellennamen in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!