Страница 1 из 1

Проверка ошибок в коде

Добавлено: 01 мар 2007, 00:03
VVJ
Добрый вечер. Сервер FB 1.5. FB-IB Studio -инструмент после работы в IBExpert немного непривычен по интерфейсу, но если бы начинал с 0 работать с ним, то все было бы привычно - человеческая инертность. Много несомненных преимуществ. Полезный режим проверки ошибок в коде базы. Выявил довольно много фигни в виде хинтов и прямых ошибок. Но ... Объясните:

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

CREATE OR ALTER PROCEDURE SP_ANL_MAIN_DESC 
(NM_ANL Varchar(10) ,  ID     Integer)
returns (DSC_ANL Varchar(100))
AS 
  declare variable NMTBL VARCHAR(30);
  declare variable NMFLD VARCHAR(30);
begin
   select a.nm_tbl,a.nm_fld from spranal_cnf a
    where a.nm_spr = :NM_ANL and a.nom_fld_view = 1
    into :nmtbl,:nmfld;

  execute statement 'select '||nmFld||' from '||nmTbl||' where id '||:ID     into:dsc_anl;
  suspend;
end
Почему на nmFld и nmTbl дает ошибку "неизвестное поле". Ставишь ' : ', все ОК, хотя компилятору FB 1.5 по барабану - что есть ' : ' что нет .
Как правильно? В примерах SQL.extensions по execute statement (doc FB 1.5) вообще никаких двоеточий нет, хотя для себя интуитивно выведено правило - то что входной параметр - то с двумя точками, то что локальная переменная - без них. Так ли это?

Добавлено: 01 мар 2007, 01:32
kdv
Так ли это?
не так. лично я любую переменную пишу в процедуре или триггере с двоеточием.
Кстати, Вы уверены, что Вам execute statement надо? я вот сильно сомневаюсь.

Добавлено: 01 мар 2007, 09:46
VVJ
Спасибо. А насчет execute statement - прекрасно понимаю, что это тянет время на компиляцию, но есть ситуации, когда без этого не обойтись.

Добавлено: 01 мар 2007, 09:53
VVJ
Вдогонку. В этой процедурке мне нужно вернуть значение аналитики для любого справочника системы (т.е. из заранее неизвестных таблицы и поля), созданных по оговоренным общим правилам , о описанных в конфигурационных таблицах.

Добавлено: 01 мар 2007, 09:55
kdv
но есть ситуации, когда без этого не обойтись.
Да? И как же мы жили почти что 10 лет (а кто и 20) без Execute Statement?
Вот Вы с InterBase/Firebird сколько работаете?

Re: Проверка ошибок в коде

Добавлено: 01 мар 2007, 10:01
Slavik
VVJ писал(а):Почему на nmFld и nmTbl дает ошибку "неизвестное поле".
Если бы ты почитал ветку про IBStudio, то возможно нашёл бы ответ (сам я ей не пользуюсь). Там было что-то про локальные переменные в процедурах и их регистрозависимость.
VVJ писал(а):Ставишь ' : ', все ОК, хотя компилятору FB 1.5 по барабану - что есть ' : ' что нет. Как правильно?
Компилятору "по барабану", если это не SQL-запрос (select, insert, update, delete). Иначе, если нет двоеточия, компилятор будет считать, что это ссылка на поле одной из таблиц в запросе. И хорошо, если такого поля нет. Компилятор просто ругнётся. А если такое поле есть... :cry:

Re: Проверка ошибок в коде

Добавлено: 07 мар 2007, 21:53
Pavel Kutakov
Slavik писал(а):
VVJ писал(а):Почему на nmFld и nmTbl дает ошибку "неизвестное поле".
Если бы ты почитал ветку про IBStudio, то возможно нашёл бы ответ (сам я ей не пользуюсь). Там было что-то про локальные переменные в процедурах и их регистрозависимость.
Нет, там регистрозависимость локальных переменных была при использовании базы с регистрозависимыми идентификаторами. Тут, насколько я вижу, такого нет.
А ошибку он пишет потому, что в данный момент в парсере забито так, что двоеточие позвояется игнорировать только в выражениях. Посмотрим что можно исправить тут.