Выбор скалярного значения в хранимой процедуре Firebird

Я хотел бы получить идентификатор конкретной строки из хранимой процедуры Firebird 2.1. Я не могу вспомнить синтаксис, и это сводит меня с ума.

Вот как код может выглядеть в TSQL, используемом Microsoft SQL Server.

    @ID = SELECT ID FROM ADDRESS WHERE 
      POBox = :POBOX AND
      ExtendedAddress = :EXTENDEDADDRESS AND
      StreetAddress = :STREETADDRESS AND
      Locality = :LOCALITY AND
      Region = :REGION AND
      PostalCode = :POSTALCODE AND
      CountryName = :COUNTRYNAME;

Что такое эквивалент Firebird?

ОБНОВЛЕНИЕ: руководство по миграции SQL для Firebird предполагает, что это должно работать

    SELECT ID INTO :ID FROM ADDRESS WHERE 
      POBox = :POBOX AND
      ExtendedAddress = :EXTENDEDADDRESS AND
      StreetAddress = :STREETADDRESS AND
      Locality = :LOCALITY AND
      Region = :REGION AND
      PostalCode = :POSTALCODE AND
      CountryName = :COUNTRYNAME;

Но я получаю синтаксическую ошибку в «INTO», когда пытаюсь создать хранимую процедуру.


person dthrasher    schedule 15.02.2010    source источник
comment
Для потомков, какая версия FB?   -  person pilcrow    schedule 15.02.2010
comment
Я использую Firebird 2.1 и 2.5. Я обновлю вопрос, чтобы отразить это.   -  person dthrasher    schedule 15.02.2010


Ответы (1)


Судя по всему, руководство по миграции Firebird неверно. Этот синтаксис работал для меня:

SELECT ID FROM ADDRESS WHERE 
   POBox = :POBOX AND
   ExtendedAddress = :EXTENDEDADDRESS AND
   StreetAddress = :STREETADDRESS AND
   Locality = :LOCALITY AND
   Region = :REGION AND
   PostalCode = :POSTALCODE AND
   CountryName = :COUNTRYNAME
INTO :ID;

Обратите внимание, что предложение INTO должно стоять после предложений FROM и WHERE.

person dthrasher    schedule 15.02.2010
comment
Ты прав, @mghie! Глупая ошибка вырезания и вставки. Я исправил свой ответ. - person dthrasher; 16.02.2010