powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / в чем проблема?
10 сообщений из 10, страница 1 из 1
в чем проблема?
    #32281420
Lefan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
create procedure probSQLCountRowsInTest (out res int)
   result sets  1 
   language SQL
begin
   declare v_count int default  0 ;
   declare v_num int default  0 ;   

   declare c1 cursor for
      select * from test;
	  
   declare exit handler for not found
      set res = - 1 ;
	  
   set res =  0 ;
   select count(*) into count from test; 
   
   open c1;
   while num < count do
      set res = res +  1 ;
   end while;
   
   close c1;  	  	   
end

Ошибка:
[IBM][CLI Driver][DB2/NT] SQL0104N An unexpected token "END-OF-STATEMENT"
was found following "_count int default 0". Expected tokens may
include: "<psm_semicolon>". SQLSTATE=42601


в доке описана как:
Символ, элемент или условие недопустимы или пропущены

первые 7 строчек один к одному как в примере из доки...

С уважением Алексей.
...
Рейтинг: 0 / 0
в чем проблема?
    #32281530
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прблема в том, что символ ";" является разделителем как в SLP, так и в sql процессоре. используй другоу разделитель в sql процессоре, чтобы решить эту проблему.
...
Рейтинг: 0 / 0
в чем проблема?
    #32281533
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SPL естественно, не SLP
...
Рейтинг: 0 / 0
в чем проблема?
    #32281535
Lefan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это вдь совсем просто...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create procedure probSQLCountRowsInTest (out res int)
   result sets  1 
   language SQL
BEGIN
   declare c1 cursor for
      select * from test;
   open c1;
end

[IBM][CLI Driver][DB2/NT] SQL0104N An unexpected token "END-OF-STATEMENT"
was found following "lect * from test". Expected tokens may
include: "JOIN <joined_table>". SQLSTATE=42601


Совсем нисего не понимаю... :(
...
Рейтинг: 0 / 0
в чем проблема?
    #32281577
Lefan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в Quest Centre поменял на "|" и в Сommand Centre тоже, все равно лезут ошибки...

QuestCenter:
[IBM][CLI Driver][DB2/NT] SQL0104N An unexpected token "END-OF-STATEMENT" was
found following "lect * from test". Expected tokens may include:
"JOIN <joined_table>". SQLSTATE=42601


Command Center:
create procedure sav.probSQLCountRowsInTest (out res int) result sets 1 language SQL BEGIN declare c1 cursor for select * from test
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0104N
An unexpected token "END-OF-STATEMENT" was found following "lect *
from test".
Expected tokens may include: "JOIN <joined_table>".
SQLSTATE=42601

open c1
DB21028E The cursor "C1" has not been declared.

end
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command.
During SQL processing it returned:
SQL0104N
An unexpected token "END-OF-STATEMENT" was found following "end".
Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601

-104


что еще можно сотворить?
...
Рейтинг: 0 / 0
в чем проблема?
    #32281586
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, временами DB2 дает невнятные сообщения, однако, думаю, NewYear уже дал правильный ответ.

Подробнее:

An unexpected token "END-OF-STATEMENT" was found following "lect * from test".

Что у нас следует после "lect * from test"? Точка с запятой.

Разжевываю совсем подробно:

Файл f1.db2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
connect to ... user ... using ...;
create procedure probSQLCountRowsInTest (out res int)
   result sets  1 
   language SQL
BEGIN
   declare c1 cursor for
      select * from test;
   open c1;
end;


вызываем db2clp db2 -f f1.db2 -vt
и получаем ту же ошибку.

Файл f2.db2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
connect to ... user ... using ... @
create procedure probSQLCountRowsInTest (out res int)
   result sets  1 
   language SQL
BEGIN
   declare c1 cursor for
      select * from test;
   open c1;
end @


вызываем db2clp db2 -f f2.db2 -vtd@
и не получаем ту же ошибку. (возможно, получаем какую-то другую; например, если нету компилятора C, выругается на отсутствие nmake или что-то в этом роде).

Аналогично в других средствах - завершитель (терминатор) выражения обычно задается в настройках или опциях командной строки.
...
Рейтинг: 0 / 0
в чем проблема?
    #32281591
Lefan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как я понял, он все равно ";" считает за конец команды...
вроде и проги перегрузил... %(
...
Рейтинг: 0 / 0
в чем проблема?
    #32281592
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, елки - палки... У тебя ругается на все знаки ";" - есть такой прикол в ХП. Нужно определить новый разделитель операторов (например "!"). Кажется это делается с помощью оператора DELIMETER - копай дальше сам.
...
Рейтинг: 0 / 0
в чем проблема?
    #32281598
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон: SET DELIMITER....
...
Рейтинг: 0 / 0
в чем проблема?
    #32281608
Lefan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да я после NewYear понял в чем проблема, не понятно, почему проги не меняют у себя разделители...

Ладно, всем спасибо, тема закрыта...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / в чем проблема?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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