sql >> Database >  >> RDS >> PostgreSQL

Tabel als argument van een PostgreSQL-functie

U kunt een tabel niet als parameter doorgeven, alleen de naam van de tabel:

CREATE FUNCTION test.fcttest(tbl text) RETURNS SETOF test.out_table AS $$
BEGIN
  EXECUTE format('INSERT INTO test.out_table '
                   'SELECT id, another_field FROM %I', tbl);
  RETURN QUERY EXECUTE format('SELECT id, another_field FROM %I', tbl);
END;
$$ LANGUAGE plpgsql;

Bij het doorgeven van een tabelnaam moet u een dynamisch commando uitvoeren. U kunt dit alleen doen in een plpgsql-functie. Het gebruik van het format() functie met de %I modifier beschermt tegen SQL-injectie. De rijen worden geretourneerd met de RETURN NEXT QUERY zin, opnieuw met een dynamisch commando.

Merk op dat deze logica beide voegt een set records toe aan tabel test.out_table en retourneert vervolgens dezelfde set records. Ik weet niet zeker of dat is wat je echt wilt.




  1. Lijst met datumnotatiespecificaties in MySQL

  2. SQLite - Gegevens verwijderen

  3. PostgreSQL:hoofdletterongevoelige tekenreeksvergelijking

  4. LAST_INSERT_ID() MijnSQL