Saltar al contenido

Error de sintaxis de PostgreSQL al usar EXECUTE en la función

Solución:

Creo que tu problema es el idioma que estás usando. EJECUTAR en el lenguaje SQL:

EXECUTE se utiliza para ejecutar una declaración previamente preparada. Dado que las declaraciones preparadas solo existen durante la duración de una sesión, la declaración preparada debe haber sido creada por un PREPARE declaración ejecutada anteriormente en la sesión actual.

no es lo mismo que EXECUTE en PL / pgSQL:

A menudo, querrá generar comandos dinámicos dentro de sus funciones PL / pgSQL, es decir, comandos que involucrarán diferentes tablas o diferentes tipos de datos cada vez que se ejecuten. Los intentos normales de PL / pgSQL de almacenar en caché planes para comandos (como se discutió en la Sección 39.10.2) no funcionarán en tales escenarios. Para manejar este tipo de problema, el EXECUTE se proporciona la declaración:

EXECUTE command-string [ INTO [STRICT] target ] [ USING expression [, ... ] ];

Está utilizando SQL EXECUTE (que ejecuta una declaración preparada) cuando desea utilizar PL / pgSQL EXECUTE (que ejecuta una cadena como SQL).

Prueba esto:

CREATE OR REPLACE FUNCTION example() RETURNS void AS $$
BEGIN
    EXECUTE 'INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3 from temp_table';
END;
$$ LANGUAGE PLPGSQL;

O, otro ejemplo que parece más cercano a lo que parece estar tratando de hacer:

create or replace function example(tname text) returns void as $$
begin
    execute 'insert into ' || tname || ' (name) values(''pancakes'')';
end;
$$ language plpgsql;

Que insertará 'pancakes' en la mesa que pasas en el tname argumento de la función.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *