Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Переменная вместо имени поля в хранимой процедуре


Автор: 3D-Dragon 4.2.2003, 12:31
Нужно в качестве входного параметра ХП передать имя поля, по которому будет делаться выборка значения из таблицы
Пишу ХП

Код
ALTER PROCEDURE GET_COUNTRY (
   NAME_FIELD VARCHAR(30),
RETURNS (
   SOME_VAR VARCHAR(25))
AS
begin
 SELECT :NAME_FIELD
 FROM SOME_TABLE
 INTO :SOME_VAR;
end


Перед выполнением даю на вход ХП значение, например COUNTRY (такое поле есть в таблице)
Запускаю ХП получаю ошибку:

Overflow occurred during data type conversion.
conversion error from string "COUNTRY".


Научите, пож-та, правильно передать название поля внутрь ХП !

Автор: Vit 4.2.2003, 13:39
А какая база данных?

Автор: AntonSaburov 4.2.2003, 18:21
FireBird - Interbase вообщем. Но я такие вещи не пробовал.

Автор: Medved 4.2.2003, 19:03
Я не совсем уверен, что это вообще возможно.......

Автор: 3D-Dragon 4.2.2003, 21:06
Pegas
Ты хочешь сказать, что так нельзя делать ?

Автор: Baa 4.2.2003, 22:25
есть предположение smile.gif
Overflow occurred during data type conversion.
conversion error from string "COUNTRY".
Исходя из этого, возможно, что
при выборке NAME_FIELD VARCHAR(30)
в SOME_VAR VARCHAR(25)) происходит переполнение из-за того, что конечная переменная меньше исходной.

Автор: Medved 4.2.2003, 22:30
3D-Dragon Такие сервера баз данных как Oracle и MSSQL не поддерживают такую возможность. Эта фитча не является официальным стандартом SQL, по крайней мере SQL-92. Насчет последнего стандарта не уверен, но думаю что там тоже она не описана.

Автор: AntonSaburov 4.2.2003, 22:37
У меня тоже подозрение, что так не получится.
Я помню, что в MS SQL можно было через вызов

exec "строка"

такую штуку провернуть. Но вот в Interbase - не знаю.

Автор: 3D-Dragon 5.2.2003, 03:54
Всем спасибо !
Реализовал без ХП простым запросом.

Автор: AntonSaburov 6.2.2003, 19:39
И стоило голову ломать, когда можно было на лету создать SELECT и получить результат
smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)