powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как делать или не делать запрос в зависимости от ...
6 сообщений из 6, страница 1 из 1
Как делать или не делать запрос в зависимости от ...
    #39468604
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.


Подскажите, есть запрос:

Код: sql
1.
SELECT field007 FROM table007;




Но есть проблема.

На некоторых версиях ПО в БД field007 отсутствует.





ПОдскажите как можно сделать что-то типа

Код: sql
1.
2.
IF field007_ЕСТЬ_В_ТАБЛИЦЕ THEN 
SELECT field007 FROM table007;
...
Рейтинг: 0 / 0
Как делать или не делать запрос в зависимости от ...
    #39468605
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема в том, что версия постгресса 8.4 и блок do там отсутствует.
...
Рейтинг: 0 / 0
Как делать или не делать запрос в зависимости от ...
    #39468650
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Константин Сергеевич Дерерк,

О колонках в таблицах читайте это RTFM .
...
Рейтинг: 0 / 0
Как делать или не делать запрос в зависимости от ...
    #39468751
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Сергеевич Дерерк,

SQL -- декларативный. Сделать то, что вы хотите без динамических запросов не выйдет.

Как вариант -- генерировать список полей для запроса динамически, вставлять его в шаблон запроса и скармливать `psql`-у.
Всё в скрипте.
...
Рейтинг: 0 / 0
Как делать или не делать запрос в зависимости от ...
    #39468788
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

можно взять hstore от рекорда и поискать в нем ключ f007. например.
...
Рейтинг: 0 / 0
Как делать или не делать запрос в зависимости от ...
    #39469082
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Константин Сергеевич Дерерк,

Есть рабочий костыль....
Можно сделать функцию, которой скармливать сгенерированный SQL для PREPARE
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION prepare_my_sql(in_name name, in_sql character varying)
  RETURNS boolean AS
$BODY$

BEGIN
	BEGIN
		EXECUTE 'DEALLOCATE '||in_name;
	EXCEPTION
	WHEN invalid_sql_statement_name THEN
	END;
	
	EXECUTE 'PREPARE '||in_name||' AS '||in_sql;

	RETURN true;
END;
$BODY$
  LANGUAGE plpgsql ;




Перед вызовом SQL генерить его для PREPARE, затем EXECUTE
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT prepare_my_sql('my_sql'
                      , CASE WHEN EXISTS (SELECT * 
                                    FROM information_schema.TABLES t 
                                    JOIN information_schema.COLUMNS c ON t.table_name = c.table_name
                                    WHERE t.table_name='table007' AND c.column_name='field007') 

                        THEN 'SELECT field007 FROM table007' 
                        ELSE 'SELECT 0' 
                   END);
EXECUTE my_sql;
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как делать или не делать запрос в зависимости от ...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]