Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Непонятки - ошибка execute statement / 12 сообщений из 12, страница 1 из 1
29.03.2018, 10:28
    #39622481
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки - ошибка execute statement
Привет.

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
29.03.2018, 11:02
    #39622507
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки - ошибка execute statement
PolesovПривет.

( PARAM_VALUE := 1 )



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

( PARAM_VALUE := 1 )



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

Э-э-э... В каком смысле? Это присвоение значения параметра execute statement.
...
Рейтинг: 0 / 0
29.03.2018, 11:17
    #39622526
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки - ошибка execute statement
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
29.03.2018, 11:23
    #39622532
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки - ошибка execute statement
Код: 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
29.03.2018, 11:34
    #39622547
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки - ошибка execute statement
Polesov,

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

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

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

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

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


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

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

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

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


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