#firebird
#firebird #firebird-3.0
Вопрос:
У меня проблема с Firebird (встроенной) базой данных. Я хотел бы задать значения параметра в операторе select. Например:
SELECT name, surname, :string AS myText
FROM myTable
где :string
— параметр.
Приведенный выше код работает в SQLite, и результатом является (когда параметром является «abcdef»):
------ --------- ---------
|name |surname |myText |
------ --------- ---------
|John |Black |abcdef |
------ --------- ---------
|Thomas|Young |abcdef |
------ --------- ---------
|... |... |abcdef |
------ --------- ---------
|nameX |surnameY |abcdef |
------ --------- ---------
Когда я пытаюсь выполнить этот запрос, я получаю следующее сообщение: «Была обнаружена ошибка во входных параметрах прикладной программы для инструкции SQL.
Dynamic SQL Error.
SQL error code = -804.
Data type unknown.
Ответ №1:
Проблема в том, что Firebird необходимо знать тип данных параметра. IIRC в SQLite все является строкой, но в Firebird это не так.
Вам нужно будет явно привести параметр, чтобы сообщить Firebird об ожидаемом типе, например:
SELECT name, surname, cast(? as varchar(100)) AS myText
FROM myTable
Где ?
— позиционный параметр. Firebird не имеет именованных параметров (за исключением процедур), но если ваша библиотека access имитирует именованные параметры, то, вероятно, следующее также будет работать:
SELECT name, surname, cast(:string as varchar(100)) AS myText
FROM myTable
Возможность приведения параметров в предложении select- не работает в более старой версии Firebird (я полагаю, что это было введено в Firebird 2.5, но я не уверен на 100%).