powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Условия выбора where
18 сообщений из 18, страница 1 из 1
Условия выбора where
    #35131565
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В хр. процедуре есть вх. параметры, естественно нужно получить набор данных (НД).
Можно ли в where делать так или что то типа такого:

вх: in_id, in_id2
авторselect t.* from table t
where t.id=in_id and ( if in_id2 is null then t.id2 is null else t.id2=in_id2)

Спасибо!!!
...
Рейтинг: 0 / 0
Условия выбора where
    #35131814
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
SELECT *
FROM TABLE T
WHERE T.ID = IN_ID
  AND T.ID2 = COALESCE(IN_ID2, T.ID2)

Код: plaintext
1.
2.
3.
SELECT *
FROM TABLE T
WHERE T.ID = IN_ID
  AND (T.ID2 IS NULL AND IN_ID2 IS NULL OR IN_ID2 IS NOT NULL AND T.ID2 = IN_ID2)
...
Рейтинг: 0 / 0
Условия выбора where
    #35132104
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Popov
Код: plaintext
1.
2.
3.
SELECT *
FROM TABLE T
WHERE T.ID = IN_ID
  AND T.ID2 = COALESCE(IN_ID2, T.ID2)
Это неправильно.
См., например:
Код: plaintext
1.
2.
3.
select i
from table (values ( 1 ), (cast(null as int))) t(i)
where i=coalesce(cast(null as int), i)
Можно
coalesce(T.ID2, IN_ID2) IS NULL OR T.ID2 = IN_ID2
...
Рейтинг: 0 / 0
Условия выбора where
    #35132146
Roman Pankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей, первый вариант некорректен, потому что неопределенное значение не равно другому неопределенному значению; null не может быть чему либо равен, в том числе и другому null'у.
...
Рейтинг: 0 / 0
Условия выбора where
    #35132166
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за помощь, я уже понял. Я так сделал:

автор
select * from table t
where t.id1=i_id1 and COALEASCE(t.id2,0)=COALEASCE(i_id2,0)
...
Рейтинг: 0 / 0
Условия выбора where
    #35132235
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь у меня проблема другая. Раньше я писал хрю процедуры на firebird, там как то легче было.
Вообщем мне надо возвратить НД.
авторCREATE PROCEDURE get_accounts_info ( INOUT io_id_estimate INTEGER,
INOUT io_id_sestimate INTEGER,
INOUT io_id_gr INTEGER,
INOUT io_id_item INTEGER,
INOUT io_id_sitem INTEGER,
INOUT io_id_expense VARCHAR(5) )
SPECIFIC get_accounts_info
DYNAMIC RESULT SETS 1

P1: BEGIN
-- Объявить переменные
DECLARE io_est_name VARCHAR(100) DEFAULT '';
DECLARE io_sest_name VARCHAR(100) DEFAULT '';
DECLARE io_gr_name VARCHAR(100) DEFAULT '';
DECLARE io_item_name VARCHAR(100) DEFAULT '';
DECLARE io_sitem_name VARCHAR(100) DEFAULT '';
DECLARE io_exp_name VARCHAR(100) DEFAULT '';

SELECT b.id_estimate,
b.id_sestimate,
b.id_gr,
b.id_item,
b.id_sitem,
b.id_expense,
e.est_name,se.sest_name,gr.gr_name,i.item_name,si.sitem_name,n.exp_name
INTO io_id_estimate,
io_id_sestimate,
io_id_gr,
io_id_item,
io_id_sitem,
io_id_expense,
io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name
FROM budjet b
join estimate e on e.id_estimate=b.id_estimate
left join subestimate se on se.id_sestimate=b.id_sestimate
join itemgroup gr on gr.id_gr=b.id_gr
join itemekr i on i.id_item=b.id_item
join subitemekr si on si.id_sitem=b.id_sitem
join nexpense n on n.id_expense=b.id_expense
WHERE b.id_estimate=io_id_estimate and
COALESCE(b.id_sestimate,0)=COALESCE(io_id_sestimate,0) and
COALESCE(b.id_gr,0)=COALESCE(io_id_gr,0) and
COALESCE(b.id_item,0)=COALESCE(io_id_item,0) and
COALESCE(b.id_sitem,0)=COALESCE(io_id_sitem,0) and
COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'')
ORDER BY b.id_estimate;

END P1
Не могу объяснить правильно...
есть цикл
автор
for select *
from table t
into :id,:name,:prim
do begin
if (:id<100) then begin
/*Тут что-нибудь делаешь с возвращаемыми параметрами*/
suspend;/*возврат результата*/
end
end
...
Рейтинг: 0 / 0
Условия выбора where
    #35132432
Roman Pankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Декларируете возвращаемый курсор - например, С1 - это и будет возвращаемый набор данных
declare C1 cursor with return for
select * from TMP1
2) Декларируете временную таблицу - declare global temporary table TMP1 (...) - со структурой возвращаемого набора данных.
3) Заполняете ее чем хотите и как хотите (например, в цикле insert'ами)
4) В конце процедуры открываете курсор - open C1 - и оставляете его открытым.

Цикл тоже по курсору:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare NOT_FOUND condition for sqlstate '02000';
declare AT_END integer default  0 ;
declare CUR_F1 like T1.F1; -- нужного типа, в общем
declare C2 cursor for
  select F1 from T1;
declare continue handler for NOT_FOUND
  set AT_END =  1 ;
open C2;
C2_LOOP: loop
  set AT_END =  0 ;
  fetch C2 into CUR_F1;
  if AT_END =  1  then
    leave C2_LOOP;
  end if;

  /* что-то делаете */

end loop C2_LOOP;
close C2;

Вместо loop может воспользоваться, например, while, как вам привычней.
...
Рейтинг: 0 / 0
Условия выбора where
    #35134882
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так сделал, но не получается. Процедура компилится без ошибок, но когда запускаешь, говорит:
авторget_accounts_info - Информация запуска была изменена.
DB2ADMIN.GET_ACCOUNTS_INFO - Выполнение запущено.
Данные, возвращаемые в наборах результатов, ограничиваются первыми 100 строками.
Данные, возвращаемые в столбцах наборов результатов, ограничиваются первыми 20 байтами (символами).
DB2ADMIN.GET_ACCOUNTS_INFO - Исключительная ситуация при выполнении:
Ошибка менеджера баз данных.[IBM][CLI Driver][DB2/NT] SQL0204N Имя "DB2ADMIN" не было определено. SQLSTATE=42704
DB2ADMIN.GET_ACCOUNTS_INFO - Откат успешно выполнен.
DB2ADMIN.GET_ACCOUNTS_INFO - Ошибка выполнения.


Сама процедура:
авторCREATE PROCEDURE db2admin.get_accounts_info ( INOUT io_id_estimate INTEGER,
INOUT io_id_sestimate INTEGER,
INOUT io_id_gr INTEGER,
INOUT io_id_item INTEGER,
INOUT io_id_sitem INTEGER,
INOUT io_id_expense VARCHAR(5) )
SPECIFIC db2admin.get_accounts_info
DYNAMIC RESULT SETS 1

P1: BEGIN
-- Объявить переменные
DECLARE io_est_name VARCHAR(100) DEFAULT '';
DECLARE io_sest_name VARCHAR(100) DEFAULT '';
DECLARE io_gr_name VARCHAR(100) DEFAULT '';
DECLARE io_item_name VARCHAR(101) DEFAULT '';
DECLARE io_sitem_name VARCHAR(101) DEFAULT '';
DECLARE io_exp_name VARCHAR(101) DEFAULT '';

DECLARE rec_count INT DEFAULT 0;

DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT b.id_estimate,
b.id_sestimate,
b.id_gr,
b.id_item,
b.id_sitem,
b.id_expense,
e.est_name,se.sest_name,gr.gr_name,i.item_name,si.sitem_name,n.exp_name
FROM budjet b
left join estimate e on e.id_estimate=b.id_estimate
left join subestimate se on se.id_sestimate=b.id_sestimate
left join itemgroup gr on gr.id_gr=b.id_gr
left join itemekr i on i.id_item=b.id_item
left join subitemekr si on si.id_sitem=b.id_sitem
left join nexpense n on n.id_expense=b.id_expense
WHERE b.id_estimate=io_id_estimate and
COALESCE(b.id_sestimate,0)=COALESCE(io_id_sestimate,0) and
COALESCE(b.id_gr,0)=COALESCE(io_id_gr,0) and
COALESCE(b.id_item,0)=COALESCE(io_id_item,0) and
COALESCE(b.id_sitem,0)=COALESCE(io_id_sitem,0) and
COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'')
ORDER BY b.id_estimate;
--Определение кол-ва записей
SELECT count(b.id_estimate) INTO rec_count FROM budjet b
WHERE b.id_estimate=io_id_estimate and
COALESCE(b.id_sestimate,0)=COALESCE(io_id_sestimate,0) and
COALESCE(b.id_gr,0)=COALESCE(io_id_gr,0) and
COALESCE(b.id_item,0)=COALESCE(io_id_item,0) and
COALESCE(b.id_sitem,0)=COALESCE(io_id_sitem,0) and
COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'')
GROUP BY b.id_estimate;
--#################################################################
--
DECLARE GLOBAL TEMPORARY TABLE SESSION.get_accounts_info_gtt(io_id_estimate INTEGER,
io_id_sestimate INTEGER,
io_id_gr INTEGER,
io_id_item INTEGER,
io_id_sitem INTEGER,
io_id_expense VARCHAR(5),
io_est_name VARCHAR(100),
io_sest_name VARCHAR(100),
io_gr_name VARCHAR(100),
io_item_name VARCHAR(100),
io_sitem_name VARCHAR(100),
io_exp_name VARCHAR(100))
WITH REPLACE IN db2admin;
--#################################################################
OPEN cursor1;

WHILE rec_count>0 do
FETCH cursor1 INTO io_id_estimate,
io_id_sestimate,
io_id_gr,
io_id_item,
io_id_sitem,
io_id_expense,
io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name;
INSERT INTO SESSION.get_accounts_info_gtt VALUES ( io_id_estimate,
io_id_sestimate,
io_id_gr,
io_id_item,
io_id_sitem,
io_id_expense,
io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name);
SET rec_count = rec_count - 1;
END WHILE;
CLOSE cursor1;

END P1
...
Рейтинг: 0 / 0
Условия выбора where
    #35134995
Roman Pankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы забыли пп. 1, 4.

Добавьте:
Код: plaintext
1.
2.
declare RETURNED_RECORDSET_1 cursor with return for
  select * from SESSION.GET_ACCOUNTS_INFO_GTT;
перед declare cursor1, и:
Код: plaintext
1.
open RETURNED_RECORDSET_1;
перед end P1.

cursor1 - рабочий, по нему вы проходитесь, что-то там делаете, закончили работу с ним - закрыли. А RETURNED_RECORDSET_1 - возвращается, причем открытым. курсору1 совершенно не обязательно быть with return, в отличие от RETURNED_RECORDSET_1.
...
Рейтинг: 0 / 0
Условия выбора where
    #35136689
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman PankovВы забыли пп. 1, 4.
курсору1 совершенно не обязательно быть with return, в отличие от RETURNED_RECORDSET_1.


А каким ему надо быть? Какие надо указать параметры при объявлении курсора?
Вообще, если у Вас есть какая-нибудь инфа дайте ссылку или выложите!
Спасибо, теперь не многа начал понимать sql db2!
...
Рейтинг: 0 / 0
Условия выбора where
    #35136692
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Николаха Roman PankovВы забыли пп. 1, 4.
курсору1 совершенно не обязательно быть with return, в отличие от RETURNED_RECORDSET_1.


А каким ему надо быть? Какие надо указать параметры при объявлении курсора?
Вообще, если у Вас есть какая-нибудь инфа дайте ссылку или выложите!
Спасибо, теперь не многа начал понимать sql db2!

Ой, извиняюсь не заметил
авторdeclare C2 cursor for
select F1 from T1;
Ещё раз Спасибо!!
...
Рейтинг: 0 / 0
Условия выбора where
    #35136808
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman PankovВы забыли пп. 1, 4.

Добавьте:
Код: plaintext
1.
2.
declare RETURNED_RECORDSET_1 cursor with return for
  select * from SESSION.GET_ACCOUNTS_INFO_GTT;
перед declare cursor1, и:
Код: plaintext
1.
open RETURNED_RECORDSET_1;
перед end P1.

cursor1 - рабочий, по нему вы проходитесь, что-то там делаете, закончили работу с ним - закрыли. А RETURNED_RECORDSET_1 - возвращается, причем открытым. курсору1 совершенно не обязательно быть with return, в отличие от RETURNED_RECORDSET_1.

Это я всё понял, но почему то процедура не компилится, говорит:
авторDB2ADMIN.get_accounts_info - Построение запущено.
При создании хранимая процедура возвращен -104.
DB2ADMIN.get_accounts_info: 37: [IBM][CLI Driver][DB2/NT] SQL0104N Обнаружен неправильный элемент "<cursor declaration>" после текста "". Список правильных элементов: "<SQL statement>". LINE NUMBER=37. SQLSTATE=42601
DB2ADMIN.get_accounts_info - Построение завершилось неудачно.
DB2ADMIN.get_accounts_info - Откат успешно выполнен.

Вот сама процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
CREATE PROCEDURE db2admin.get_accounts_info ( IN io_id_estimate INTEGER,
                                    IN io_id_sestimate INTEGER,
                                    IN io_id_gr INTEGER,
                                    IN io_id_item INTEGER,
                                    IN io_id_sitem INTEGER,
                                    IN io_id_expense VARCHAR( 5 ) )
    SPECIFIC get_accounts_info
    DYNAMIC RESULT SETS  1 

P1: BEGIN
    -- Объявить переменные
    DECLARE io_est_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_sest_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_gr_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_item_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_sitem_name VARCHAR( 100 ) DEFAULT '';
    DECLARE io_exp_name VARCHAR( 100 ) DEFAULT '';

    DECLARE rec_count INT DEFAULT  0 ;

     --Объявить врем таблицу
    DECLARE GLOBAL TEMPORARY TABLE SESSION.GET_ACCOUNTS_INFO_GTT(io_id_estimate INTEGER,
                                                             io_id_sestimate INTEGER,
                                                             io_id_gr INTEGER,
                                                             io_id_item INTEGER,
                                                             io_id_sitem INTEGER,
                                                             io_id_expense VARCHAR( 5 ),
                                                             io_est_name VARCHAR( 100 ),
                                                             io_sest_name VARCHAR( 100 ),
                                                             io_gr_name VARCHAR( 100 ),
                                                             io_item_name VARCHAR( 100 ),
                                                             io_sitem_name VARCHAR( 100 ),
                                                             io_exp_name VARCHAR( 100 ))
    WITH REPLACE IN db2admin;
    --#################################################################

    DECLARE cursor1 CURSOR FOR
        SELECT b.id_estimate,b.id_sestimate,b.id_gr,b.id_item,b.id_sitem,b.id_expense,
               e.est_name,se.sest_name,gr.gr_name,i.item_name,si.sitem_name,n.exp_name
        FROM budjet b
           left join estimate e on e.id_estimate=b.id_estimate
           left join subestimate se on se.id_sestimate=b.id_sestimate
           left join itemgroup gr on gr.id_gr=b.id_gr
           left join itemekr i on i.id_item=b.id_item
           left join subitemekr si on si.id_sitem=b.id_sitem
           left join nexpense n on n.id_expense=b.id_expense
        WHERE b.id_estimate=io_id_estimate and
           COALESCE(b.id_sestimate, 0 )=COALESCE(io_id_sestimate, 0 ) and
           COALESCE(b.id_gr, 0 )=COALESCE(io_id_gr, 0 ) and
           COALESCE(b.id_item, 0 )=COALESCE(io_id_item, 0 ) and
           COALESCE(b.id_sitem, 0 )=COALESCE(io_id_sitem, 0 ) and
           COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'')
        ORDER BY b.id_estimate;

    --Определение кол-ва записей
    SELECT count(b.id_estimate) INTO rec_count FROM budjet b
    WHERE b.id_estimate=io_id_estimate and
          COALESCE(b.id_sestimate, 0 )=COALESCE(io_id_sestimate, 0 ) and
          COALESCE(b.id_gr, 0 )=COALESCE(io_id_gr, 0 ) and
          COALESCE(b.id_item, 0 )=COALESCE(io_id_item, 0 ) and
          COALESCE(b.id_sitem, 0 )=COALESCE(io_id_sitem, 0 ) and
          COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'')
    GROUP BY b.id_estimate;
    --#################################################################

    OPEN cursor1;
    WHILE rec_count> 0  do
        FETCH cursor1 INTO io_id_estimate,
                           io_id_sestimate,
                           io_id_gr,
                           io_id_item,
                           io_id_sitem,
                           io_id_expense,
                           io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name;
        INSERT INTO SESSION.GET_ACCOUNTS_INFO_GTT VALUES ( io_id_estimate,
                                                           io_id_sestimate,
                                                           io_id_gr,
                                                           io_id_item,
                                                           io_id_sitem,
                                                           io_id_expense,
                                                           io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name);
        SET rec_count = rec_count -  1 ;
    END WHILE;
    CLOSE cursor1;
     --Объявить курсор на GTT
    DECLARE cursor2 CURSOR WITH RETURN FOR
       SELECT * FROM SESSION.GET_ACCOUNTS_INFO_GTT;

    --#################################################################
    OPEN cursor2;
END P1 
...
Рейтинг: 0 / 0
Условия выбора where
    #35136854
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
--Объявить курсор на GTT
    BEGIN 
    DECLARE cursor2 CURSOR WITH RETURN FOR
       SELECT * FROM SESSION.GET_ACCOUNTS_INFO_GTT;

    --#################################################################
    OPEN cursor2;
    END;
END P1 

Понял, просто заключил в BEGIN END.

Всё компилируется, но когда запустишь возвращает:
автор
get_accounts_info - Информация запуска была изменена.
DB2ADMIN.GET_ACCOUNTS_INFO - Выполнение запущено.
Данные, возвращаемые в наборах результатов, ограничиваются первыми 100 строками.
Данные, возвращаемые в столбцах наборов результатов, ограничиваются первыми 20 байтами (символами).
DB2ADMIN.GET_ACCOUNTS_INFO - Исключительная ситуация при выполнении:
Ошибка менеджера баз данных.[IBM][CLI Driver][DB2/NT] SQL0204N Имя "DB2ADMIN" не было определено. SQLSTATE=42704
DB2ADMIN.GET_ACCOUNTS_INFO - Откат успешно выполнен.
DB2ADMIN.GET_ACCOUNTS_INFO - Ошибка выполнения.
...
Рейтинг: 0 / 0
Условия выбора where
    #35138228
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Николаха...
--Объявить врем таблицу
DECLARE GLOBAL TEMPORARY TABLE SESSION.GET_ACCOUNTS_INFO_GTT(io_id_estimate INTEGER,
io_id_sestimate INTEGER,
io_id_gr INTEGER,
io_id_item INTEGER,
io_id_sitem INTEGER,
io_id_expense VARCHAR(5),
io_est_name VARCHAR(100),
io_sest_name VARCHAR(100),
io_gr_name VARCHAR(100),
io_item_name VARCHAR(100),
io_sitem_name VARCHAR(100),
io_exp_name VARCHAR(100))
WITH REPLACE IN db2admin;
...[/src]1. У вас есть user temporary tablespace с именем db2admin?
2. Это полный код процедуры?
3. Вы где-то после вызова процедуры используете временную таблицу?

В смысле, зачем вы вставляете по 1 записи во временную таблицу, делаете на нее курсор для возврата, вместо того, чтобы просто возвращать cursor1?
...
Рейтинг: 0 / 0
Условия выбора where
    #35140777
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein Николаха...
--Объявить врем таблицу
DECLARE GLOBAL TEMPORARY TABLE SESSION.GET_ACCOUNTS_INFO_GTT(io_id_estimate INTEGER,
io_id_sestimate INTEGER,
io_id_gr INTEGER,
io_id_item INTEGER,
io_id_sitem INTEGER,
io_id_expense VARCHAR(5),
io_est_name VARCHAR(100),
io_sest_name VARCHAR(100),
io_gr_name VARCHAR(100),
io_item_name VARCHAR(100),
io_sitem_name VARCHAR(100),
io_exp_name VARCHAR(100))
WITH REPLACE IN db2admin;
...[/src]1. У вас есть user temporary tablespace с именем db2admin?
2. Это полный код процедуры?
3. Вы где-то после вызова процедуры используете временную таблицу?

В смысле, зачем вы вставляете по 1 записи во временную таблицу, делаете на нее курсор для возврата, вместо того, чтобы просто возвращать cursor1?

Это не полный тело цикла немнога вырезано. Спасибо, что откликнулись. Я уже понял почему. Надо было создать пользовательское пространство с именем db2admin и всё.
...
Рейтинг: 0 / 0
Условия выбора where
    #35146074
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Mark Barinstein
Почему выдаёт ошибку??
Код: plaintext
1.
2.
3.
4.
5.
6.
.....
DECLARE var_year INT DEFAULT  0 ;
SET var_year = YEAR('10.2.2008');
DECLARE cur CURSOR FOR
     select t.* from table as t
     where t.year=var_year;
.....

Сама ошибка:
автор[IBM][CLI Driver][DB2/NT] SQL0104N Обнаружен неправильный элемент "<cursor declaration>" после текста "". Список правильных элементов: "<SQL statement>". LINE NUMBER=50. SQLSTATE=42601


Если делаешь так, то нормально:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
.....
DECLARE var_year INT DEFAULT  0 ;

DECLARE cur CURSOR FOR
     select t.* from table as t
     where t.year=YEAR('10.2.2008');
.....
SET var_year = YEAR('10.2.2008');
.....
...
Рейтинг: 0 / 0
Условия выбора where
    #35146348
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Николаха to Mark Barinstein
Почему выдаёт ошибку??
Код: plaintext
1.
2.
3.
4.
5.
6.
.....
DECLARE var_year INT DEFAULT  0 ;
SET var_year = YEAR('10.2.2008');
DECLARE cur CURSOR FOR
     select t.* from table as t
     where t.year=var_year;
.....
В описании Compound SQL (Procedure) statement можно заметить, что порядок следования операторов должен быть:
1. variable declaration
2. declare cursor
3. sql procedure statement

у вас же в этом примере : 1, 3, 2.
...
Рейтинг: 0 / 0
Условия выбора where
    #35154250
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein Николаха to Mark Barinstein
Почему выдаёт ошибку??
Код: plaintext
1.
2.
3.
4.
5.
6.
.....
DECLARE var_year INT DEFAULT  0 ;
SET var_year = YEAR('10.2.2008');
DECLARE cur CURSOR FOR
     select t.* from table as t
     where t.year=var_year;
.....
В описании Compound SQL (Procedure) statement можно заметить, что порядок следования операторов должен быть:
1. variable declaration
2. declare cursor
3. sql procedure statement

у вас же в этом примере : 1, 3, 2.

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


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