Тип данных параметров в запросах

Обсуждение возникших проблем, предложений и ошибок PgDAC компонентов
Ответить
AndreyD
Сообщения: 2
Зарегистрирован: Ср 13 фев 2019 16:04

Тип данных параметров в запросах

Сообщение AndreyD » Ср 13 фев 2019 16:28

Здравствуйте.
Вопрос по использованию параметров в TPgQuery.
Почему-то при подстановке параметров в список выбираемых столбов запроса тип данных столбца всегда получается text, например:

Код: Выделить всё

SELECT :TEST AS test_col
Хотя тип данных для параметра задаю Integer.
Приходится делать явное приведение типа, что не очень удобно:

Код: Выделить всё

SELECT :TEST::integer AS test_col
Более того, без явного приведения типа возникает ошибка (не существует оператор text = integer) в выражениях типа:

Код: Выделить всё

SELECT (CASE :TEST WHEN 1 THEN 123 ELSE 456 END) AS test_col
,
опять-таки приходится писать

Код: Выделить всё

SELECT (CASE :TEST::integer WHEN 1 THEN 123 ELSE 456 END) AS test_col
.

Это баг или же в PostgreSQL по-другому никак?

MaximG
Devart Team
Сообщения: 102
Зарегистрирован: Пн 06 июл 2015 12:51

Re: Тип данных параметров в запросах

Сообщение MaximG » Пт 15 фев 2019 17:30

Описываемое Вами поведение не является ошибкой, т.к. при использовании первого из приведенных Вами запросов сервер БД возвращает тип данных SQL_PG_TEXT для поля test_col. Попробуйте использовать PostgreSQL Protocol 2.0 :
PgConnection.ProtocolVersion := pv20;

AndreyD
Сообщения: 2
Зарегистрирован: Ср 13 фев 2019 16:04

Re: Тип данных параметров в запросах

Сообщение AndreyD » Пн 18 фев 2019 08:40

Похоже, на самом деле мне нужно было PgQuery.Options.UseParamTypes := True; .
Надо было мне внимательнее смотреть.

MaximG
Devart Team
Сообщения: 102
Зарегистрирован: Пн 06 июл 2015 12:51

Re: Тип данных параметров в запросах

Сообщение MaximG » Вт 19 фев 2019 08:34

Мы рады, что Вы нашли решение проблемы. Обращайтесь к нам по любым вопросам использования PgDAC

Ответить