Обновление хранимой процедуры завершается ошибкой с запросом - PullRequest
1 голос
/ 11 марта 2011

База данных: Interbase 6.5 Соединение: тот же результат с IBX или BDE Программа написана с Delphi 7

Я пытаюсь обновить th sp. Результат "Token unknown -line xx, char yy" Строки xx и char yy указывают на первую переменную.

Пример:

  query.sql.add('ALTER PROCEDURE');
  query.sql.add('MYPROCEDURE (mypkey integer)');
  query.sql.add('returns (myresult integer)');
  query.sql.add('as');
  query.sql.add('declare variable helpint integer;');
  query.sql.add('BEGIN');
  query.sql.add('select count(bla)');
  query.sql.add('from mytable');
  query.sql.add('where pkey=:mypkey');
  query.sql.add('into :helpint;');    <------ here is line xx
  query.sql.add('if (helpint>0) then myresult = 1;');
  query.sql.add('suspend;');
  query.sql.add('END');
try
  query.ExecSQL;
except
  on E:Exception do
  begin
    E.Message := E.Message +#13#10+query.SQL.Text;
    raise;
end;

Если я обновлю sp с помощью ibconsole, он будет работать.

Что происходит не так?

Обновление:

В исходном коде это переменная в декальтерированном виде!

исправление:

query.sql.add('into :helpint;');    <------ here is line xx
query.sql.add('if (helpint>0) then myresult = 1;');

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

Do

query.ParamCheck := False;
query.Params.Clear;
query.SQL.Clear;

перед назначением SQL. Не забудьте вернуть ParamCheck в True, как только вы закончите обновление DDL.

0 голосов
/ 11 марта 2011

Вы объявили переменную HELPINT, поэтому вы должны использовать HELPINT в качестве переменной, а не VARIABLE на отмеченной строке и на следующей тоже.

...