PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Tabella come argomento di una funzione PostgreSQL

Non puoi passare una tabella come un parametro, solo il nome della tabella:

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;

Quando si passa il nome di una tabella è necessario eseguire un comando dinamico. Puoi farlo solo in una funzione plpgsql. L'uso del format() funzione con il %I modificatore protegge dall'iniezione SQL. Le righe vengono restituite utilizzando RETURN NEXT QUERY frase, sempre con un comando dinamico.

Nota che questa logica entrambi inserisce una serie di record nella tabella test.out_table e quindi restituisce lo stesso set di record. Non sono sicuro che sia quello che vuoi veramente.