Вопрос

PostgreSQL реализует execute ... using возможность передавать параметры в динамический SQL, и, насколько я могу судить, эта функция была введена в версии 8.4.Мы используем Greenplum, который является ответвлением PostgreSQL версии 8.2, поэтому у него нет этой функции.

Есть ли другой способ сделать то же самое в Greenplum или PostgreSQL 8.2?

Это было полезно?

Решение

Не могу сказать наверняка, но намек есть. CREATE FUNCTION документация:

langName название языка, в котором функция реализована.Это может быть SQL, C, внутренний или имя определяемого пользователем процедурного языка.См. CREATE LANGUAGE, чтобы узнать о процедурных языках, поддерживаемых в базе данных Greenplum.

В свою очередь, в указанном месте говорится

Язык PL/pgSQL установлен в базе данных Greenplum по умолчанию.

Сейчас EXECUTE ... USING — это функция PL/pgSQL, поэтому единственный вопрос — из какой версии PostgreSQL она взята.В документации указана версия 8.2 - и похоже, что вам не повезло.

Я связался со службой поддержки Greenplum, чтобы получить окончательный ответ, но так и не получил ответа.

Что касается отсутствия этой конструкции, вы, очевидно, можете объединить любую строку SQL и выполнить ее.Будьте внимательны и правильно заключайте в кавычки передаваемые значения и избегайте SQL-инъекций.

Другие советы

Вы можете использовать обходной путь с помощью сохраненной функции, упомянутой 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;
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top