powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как получить значение из последовательности в переменную.
11 сообщений из 11, страница 1 из 1
Как получить значение из последовательности в переменную.
    #33972237
alapt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что не так в этом коде?

create function DataBase.MyFunc()
returns integer
begin atomic
declare CurVar integer;
Set CurVal = (Next Value For MySeq);
Return CurVal;
end
/

Windows XP, DB2 9.

DB2 ругается:

ERROR [42601] [IBM][DB2/NT] SQL0104N Обнаружен неправильный элемент "END-OF-STATEMENT" после текста "end". Список правильных элементов: "JOIN <joined_table>". SQLSTATE=42601
...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33972341
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alapt
create function DataBase.MyFunc()
returns integer
begin atomic
declare CurVar integer;
Set CurVal = (Next Value For MySeq);
Return CurVal;
end
/
Надо бы одинаково назвать...
...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33973506
alapt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinНадо бы одинаково назвать...

Не помогает. Ошибка та же.
...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33973640
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это было необходимое условие. :)
Достаточное - поместите текст создания в файл (например file.sql) и из db2cmd выполните
Код: plaintext
db2 -td/ -f file.sql
...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33978632
alapt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinЭто было необходимое условие. :)
Достаточное - поместите текст создания в файл (например file.sql) и из db2cmd выполните
Код: plaintext
db2 -td/ -f file.sql


А можно по подробнее: что такое db2cmd:

а) при запуске данной команды из ibm\sqllib\bin\db2cmd.exe она ругается на отсутствие коннекта с базой.
На команду connect to toolsdb отвечает
"connect" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

б) в центре управления -> редактор команд (команду я ввожу без последней /, как написано у Вас)
Символ / установлен как символ завершения оператора.

---------------------------- Введенные команды ------------------------------
db2 -td/ -f file.sql/
------------------------------------------------------------------------------
db2 -td/ -f file.sql
SQL0104N Обнаружен неправильный элемент "db2" после текста
"НАЧАЛО-ОПЕРАТОРА". Список правильных элементов: "SELECT". SQLSTATE=42601
...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33978776
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Грубо говоря, db2cmd.exe это cmd.exe + инициализированные переменные окружения для DB2.
Работать в нем с базой надо так:
Код: plaintext
1.
2.
db2 connect to <имя_базы>
db2 "sql-команда"
db2 -td<разделитель_команд> -f <файл_с_sql-командами>
В редакторе команд statement termination character надо установить в /.
И вводите свою команду создания, завершающуюся этим символом (без этих db2 -td/ -f).
...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33987583
alapt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Следующая серия:

create function DataBase.MyFunc(aFName varchar(255), aSName varchar(255))
returns integer
modifies sql data
begin atomic
declare CurVal integer;
Set CurVal = (Next Value For MySeq);
Insert Into LFiles (Id, FName, SName, DateLoad, IsSuccess) Values (CurVal, aFName, aSName, Current_Date, 0);
Return CurVal;
end
/

TOAD говорит:
ERROR [42601] [IBM][DB2/NT] SQL0104N Обнаружен неправильный элемент "END-OF-STATEMENT" после текста "end". Список правильных элементов: "JOIN <joined_table>". SQLSTATE=42601

Редактор команд DB2:
DB21034E Данная команда обрабатывалась как оператор SQL, поскольку она не
является допустимой командой процессора командной строки. При обработке SQL
было получено сообщение:
SQL0628N В условии "MODIFIES SQL DATA" есть повторные или конфликтующие
ключевые слова. LINE NUMBER=10. SQLSTATE=42613

SQL0628N В условии "MODIFIES SQL DATA " есть повторные или конфликтующие ключевые слова.
...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33987736
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сказано в Писании , вы не можете декларировать скалярные функции, как MODIFIES SQL DATA.
...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33987957
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати хороший метод это порытся по этому форуму и найти письмо от меня по поводу select из insert

получится что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table test (a int, b int);
create sequence tseq;
select * from NEW TABLE (
insert into test_seq (a,b) values 
(next value for tseq, 100 ),
(next value for tseq, 200 ),
(next value for tseq, 300 )
);
A           B
----------- -----------
           1             1 
           2             2 
           3             3 

...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33988341
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nikolay KulikovНачиная с некоторого времени, DB2 стала проверять, что ее пытаются обмануть и на попытке сделать что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table myfunc_test(i int)/
create sequence seq/
create function MyFunc()
returns integer
Return 
(
select n 
from new table(insert into myfunc_test(i) values (nextval for seq)) t(n)
)
/
вы получите SQL0374.
...
Рейтинг: 0 / 0
Как получить значение из последовательности в переменную.
    #33988360
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я это знаю, но я думаю что слегка переделав логику, которая в данном контексте нам сожалению не известна через Select from insert можно решить задачу получения и сохранения предыдущего значения sequence
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как получить значение из последовательности в переменную.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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