Pregunta

PostgreSQL implementa el execute ... using opción para pasar parámetros a SQL dinámico y, hasta donde puedo decir, esta característica se introdujo en la versión 8.4.Estamos usando Greenplum, que es una bifurcación de PostgreSQL en la versión 8.2, por lo que no tiene esta característica.

¿Existe alguna otra forma de hacer lo mismo en Greenplum o PostgreSQL 8.2?

¿Fue útil?

Solución

No puedo asegurarlo, pero hay una pista en el CREATE FUNCTION documentación:

langname Nombre del idioma en el que se implementa la función.Puede ser SQL, C, interno o el nombre de un lenguaje de procedimiento definido por el usuario.Consulte CREAR IDIOMA para conocer los lenguajes de procedimiento admitidos en la base de datos Greenplum.

A su vez, el lugar referenciado dice

El lenguaje PL/pgSQL está instalado de forma predeterminada en la base de datos Greenplum.

Ahora el EXECUTE ... USING es una característica de PL/pgSQL, por lo que la única pregunta es de qué versión de PostgreSQL proviene.La documentación apunta a 8.2, y de esta manera parece que no tienes suerte.

Me comuniqué con el soporte de Greenplum para obtener una respuesta definitiva, pero nunca obtuve una respuesta.

En cuanto a solucionar la falta de esa construcción, obviamente puede concatenar cualquier cadena SQL que desee y ejecutarla.Tenga cuidado de citar correctamente los valores pasados ​​y evite la inyección SQL.

Otros consejos

Puede utilizar una solución alternativa utilizando una función almacenada mencionada por dezso:

CREATE OR REPLACE FUNCTION dynamic_query (table_name TEXT) RETURNS VOID AS $$
BEGIN
    EXECUTE 'SELECT * FROM ' || table_name || ' WHERE column1 LIKE ''a_value''';
END;
$$ language plpgsql;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top