powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Непонятки - ошибка execute statement
12 сообщений из 12, страница 1 из 1
Непонятки - ошибка execute statement
    #39622481
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

FB 2.5.8

Есть запрос, выполняется без ошибок:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select RDB$FIELD_LENGTH, RDB$FIELD_NAME
  from RDB$FIELDS
 where not RDB$FIELD_NAME is null
-- comment
   and RDB$FIELD_LENGTH > 2
   and cast( 1 as integer ) = :PARAM_VALUE
 order by RDB$FIELD_LENGTH



Обернем запрос в процедуру с execute statement:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create or alter procedure DEBUG
returns (
    LEN  integer,
    NAME varchar(100) )
as
  declare variable SQL blob;
begin
  SQL =
'select RDB$FIELD_LENGTH, RDB$FIELD_NAME
  from RDB$FIELDS
 where not RDB$FIELD_NAME is null
-- comment
   and RDB$FIELD_LENGTH > 2
   and cast( 1 as integer ) = :PARAM_VALUE
 order by RDB$FIELD_LENGTH
';

  for
    execute statement ( :SQL )
    ( PARAM_VALUE := 1 )
    into :LEN, :NAME
  do
    suspend;
end

При выполнении процедуры возникает ошибка:
Код: powershell
1.
2.
3.
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Execute statement preprocess SQL error.
At procedure 'DEBUG' line: 18, col: 3.



Изменим комментарий в тексте запроса на:
Код: sql
1.
/*-- comment*/


Процедура работает без ошибок.

Если комментарий убрать совсем, то при вызове процедуры тоже ошибок не возникает.

Если из текста запроса убрать параметр :PARAM_VALUE
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
create or alter procedure DEBUG
returns (
    LEN  integer,
    NAME varchar(100) )
as
  declare variable SQL blob;
begin
  SQL =
'select RDB$FIELD_LENGTH, RDB$FIELD_NAME
  from RDB$FIELDS
 where not RDB$FIELD_NAME is null
-- comment
   and RDB$FIELD_LENGTH > 2
 order by RDB$FIELD_LENGTH
';

  for
    execute statement ( :SQL )
    into :LEN, :NAME
  do
    suspend;
end

то даже с комментарием "-- comment" при выполнении процедуры ошибки не возникает.

Это ошибка или я делаю что-то не так?

С уважением, Polesov.
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622507
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovПривет.

( PARAM_VALUE := 1 )



Это из какого паскаля?
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622521
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorPolesovПривет.

( PARAM_VALUE := 1 )



Это из какого паскаля?

Э-э-э... В каком смысле? Это присвоение значения параметра execute statement.
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622526
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor, вдогонку

Код: powershell
1.
2.
3.
1)Если вы желаете использовать параметризированный запрос, то Вы обязаны заключить строку или переменную, содержащую текст Вашего параметризированного запроса в круглые скобки. Например:

  EXECUTE STATEMENT (:P_SQL_STMT) (P1 := 'abc', P2 := :MY_VARIABLE);



http://firebirdsql.su/doku.php?id=execute_statement
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622532
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create or alter procedure DEBUG
returns (
    LEN  integer,
    NAME varchar(100) )
as
  declare variable SQL blob;
begin
  SQL =
'select RDB$FIELD_LENGTH, RDB$FIELD_NAME
  from RDB$FIELDS
 where not RDB$FIELD_NAME is null
-- comment
   and RDB$FIELD_LENGTH > 2
   and cast( 1 as integer ) = :PARAM_VALUE
 order by RDB$FIELD_LENGTH
';


Потому, что все что после "--" он считает коментарием.
Т.е. часть
Код: sql
1.
2.
3.
4.
-- comment
   and RDB$FIELD_LENGTH > 2
   and cast( 1 as integer ) = :PARAM_VALUE
 order by RDB$FIELD_LENGTH


не видит вообще. Отсюда и ошибки. Нет у него в запросе переменной :PARAM_VALUE
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622547
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

занесёшь в трекер ?
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622570
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008Потому, что все что после "--" он считает коментарием.

Понятно.
Получается, комментарий вида "--" в запросе отличается от такого же вида комментария в execute statement.
Спасибо.
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622571
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622594
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovПолучается, комментарий вида "--" в запросе отличается от такого же вида комментария в execute statement.Хоть оно так выглядит, но причина в другом месте.

Polesov http://tracker.firebirdsql.org/browse/CORE-5783 Спасибо
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622671
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве workaround, замени

declare variable SQL blob;
на
declare variable SQL blob sub_type text;

Оригинальную ошибку чуть позже исправим
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622681
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesovpastorпропущено...


Это из какого паскаля?

Э-э-э... В каком смысле? Это присвоение значения параметра execute statement.

сорри, затупил
...
Рейтинг: 0 / 0
Непонятки - ошибка execute statement
    #39622741
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladзамени на
declare variable SQL blob sub_type text;

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


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