Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Добавил в текст ХП /* комментарии */ и она перестала работать. Вылазит ошибка.. / 5 сообщений из 5, страница 1 из 1
07.12.2002, 15:54
    #32077023
Calm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавил в текст ХП /* комментарии */ и она перестала работать. Вылазит ошибка..
Уважамые коллеги.
Стал дописывать в тексты процедур комментарии (работаю в IBExpert 2.3.0.4) и после компиляции одной из них получил это сообщение:

This operation is not defined for system tables.
unsuccessful metadata update.
ERASE RDB$PROCEDURE_PARAMETERS failed.
invalid request BLR at offset 69.
parameter mismatch for procedure ADD_PROFILE.

Вот текст процедуры, которая теперь не компилируется (add_profile_hho)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE ADD_PROFILE_HHO (
    ANAME VARCHAR( 100 ),
    ACOMMENT VARCHAR( 100 ))
AS
begin
  execute procedure add_profile(:aname,  1 , :Acomment);
  suspend;
end


а вот текст процедуры add_profile:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE PROCEDURE ADD_PROFILE (
    ANAME VARCHAR( 100 ),
    AENTITYTAG SMALLINT,
    ACOMMENT VARCHAR( 500 ))
RETURNS (
    PROFILEID INTEGER)
AS
begin

  if (not (exists(select id from profile where name=:aname and EntityTag=:AEntityTag))) then
  begin
    insert into Profile (EntityTag, Name, Comment) values (:aEntityTag, :Aname, :acomment);
  end
  else exception profile_004_001_001;

  profileid=gen_id(gen__profile,  0 );

end


Вот такая у меня печаль...
Пожалуйста, помогите советом. Заранее благодарен
...
Рейтинг: 0 / 0
07.12.2002, 16:12
    #32077026
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавил в текст ХП /* комментарии */ и она перестала работать. Вылазит ошибка..
Доки надо читать:
Description EXECUTE PROCEDURE calls the specified stored procedure. If the procedure requires input
parameters, they are passed as host-language variables or as constants. If a procedure
returns output parameters to an SQL program, host variables must be supplied in the
RETURNING_VALUES clause to hold the values returned.

Там же написано чёрным по белому, что возвращаемые параметры ОБЯЗЯНЫ быть указаны в списке RETURNING_VALUES.
...
Рейтинг: 0 / 0
07.12.2002, 16:13
    #32077027
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавил в текст ХП /* комментарии */ и она перестала работать. Вылазит ошибка..
Доки надо читать:
Description EXECUTE PROCEDURE calls the specified stored procedure. If the procedure requires input
parameters, they are passed as host-language variables or as constants. If a procedure
returns output parameters to an SQL program, host variables must be supplied in the
RETURNING_VALUES clause to hold the values returned.

Там же написано чёрным по белому, что возвращаемые параметры ОБЯЗЯНЫ быть указаны в списке RETURNING_VALUES.
...
Рейтинг: 0 / 0
09.12.2002, 09:23
    #32077157
Calm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавил в текст ХП /* комментарии */ и она перестала работать. Вылазит ошибка..
О, моя невнимательность! :( Действительно, не заметил, что забыл returning_values.

Однако, почему-то не помогло.
Вылазит все таже ошибка:

This operation is not defined for system tables.
unsuccessful metadata update.
ERASE RDB$PROCEDURE_PARAMETERS failed.
invalid request BLR at offset 69.
parameter mismatch for procedure ADD_PROFILE.


Вот исправленная некомпилирующаяся процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE ADD_PROFILE_HHO (
    ANAME VARCHAR( 100 ),
    ACOMMENT VARCHAR( 100 ))
AS
declare variable dummy integer;
begin
  execute procedure add_profile (:aname,  1 , :Acomment) returning_Values :dummy;
end


А вот процедура add_profile:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE PROCEDURE ADD_PROFILE (
    ANAME VARCHAR( 100 ),
    AENTITYTAG SMALLINT,
    ACOMMENT VARCHAR( 500 ))
RETURNS (
    PROFILEID INTEGER)
AS
begin
  if (not (exists(select id from profile where name=:aname and EntityTag=:AEntityTag))) then
  begin
    insert into Profile (EntityTag, Name, Comment) values (:aEntityTag, :Aname, :acomment);
    profileid=gen_id(gen__profile,  0 );
    suspend;
  end
  else exception profile_004_001_001;
end


Люди, не ругайтесь. Чувствую, что тормажу, но не пойму где...
...
Рейтинг: 0 / 0
09.12.2002, 09:38
    #32077164
Calm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавил в текст ХП /* комментарии */ и она перестала работать. Вылазит ошибка..
Проблема решена :)

Если кому интересно :
Мне была нужна процедура add_profile. Она вызывалась в других процедурах. Причем, в некоторых их них требовалось использовать номер записи таблицы, которая добавлялась в add_profile. Для этого предназначен выходной параметр profileId. В других процедурах выходной параметр никак не испольовался (например, add_profile_HHO).
Первоначально я ввел фиктивную (нигде далее не использующуюся) переменную dummy, чтобы возвращать в нее значения выходного параметра add_profile. Однако это устранило ошибку.
Тогда я написал две процедуры add_profile. Одна имеет выходной параметр, а вторая - нет. В других процедурах вызываю соответствующий вариант add_profile. Заработало :)

Вопрос : почему нельзя использовать переменные для получения возвращаемых параметров, если они потом не используются? Оптимизация компилятора? Или я сделал неверные выводы?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Добавил в текст ХП /* комментарии */ и она перестала работать. Вылазит ошибка.. / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]