powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Row Count
15 сообщений из 15, страница 1 из 1
Row Count
    #34525087
Ilhom1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ли ДБ2 переменная для выявления количества записей sql statmenta.
Например
----------------
select * from .....
if (DB2ПЕРЕМЕННАЯ>0) then .....
...
Рейтинг: 0 / 0
Row Count
    #34525210
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для количества
Код: plaintext
1.
2.
3.
 if ((select count( 1 ) from ...)> 0 ) then
   ...
 end if;
Для проверки существования
Код: plaintext
1.
2.
3.
 if (exists (select  1  from ...)) then
   ...
 end if;
...
Рейтинг: 0 / 0
Row Count
    #34525316
Ilhom1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это понятно, но два раза запрос делать не охота, потому что один запрос может дорого стоить...
Нет ли просто глобальной переменной, которая возврщает кол-во записей последнего стейтмента?
...
Рейтинг: 0 / 0
Row Count
    #34525352
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что вы хотитес результатом запроса сделать?
Обработать каждую запись в курсоре?
Просто получить кол-во записей?
В SQL процедурах нельза просто написать select и все...
...
Рейтинг: 0 / 0
Row Count
    #34525420
Ilhom1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В оракле есть переменная SQL%rowcount. А в MSSQL - @@rowcount, А в DB2 ?

Это все проделываю в хранимке
-----------------------
select ....

if db2rowcount>0 then
select .....
set .....
...
else
select ....
set ....
end if;
...
Рейтинг: 0 / 0
Row Count
    #34525694
RomanSavelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Ilhom1976]В оракле есть переменная SQL%rowcount. А в MSSQL - @@rowcount, А в DB2 ?

Это все проделываю в хранимке
-----------------------
select .... [/quote]
В такой форме select вернёт 1 запись.

если же нужна обработка набора записей -
Код: plaintext
1.
2.
3.
4.
5.
declare XX cursor for select...
declare mysuperpupercounter int default  0 
...
fetch XX...
set mysuperpupercounter=mysuperpupercounter+ 1 ;
...
Рейтинг: 0 / 0
Row Count
    #34525838
Ilhom1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оригинально

Ну, а если всерьез?
...
Рейтинг: 0 / 0
Row Count
    #34525867
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilhom1976В оракле есть переменная SQL%rowcount. А в MSSQL - @@rowcount, А в DB2 ?

Это все проделываю в хранимке
-----------------------
select ....

if db2rowcount>0 then
select .....
set .....
...
else
select ....
set ....
end if;Вопросы всерьез:
Покажите все-таки на примере, что делает этот код.
Как связан внешний селект с внутренними операциями?
Желательно с указанием самих операторов полностью.
...
Рейтинг: 0 / 0
Row Count
    #34525958
Ilhom1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обратите внимание на wwrowcount!!! И проясните пож. на счет SQLCODE... Как ее проинициализировать ?
----------------------------
CREATE PROCEDURE GET_KREDAKTKVIT( IN widkvit INT,out retval double )
RESULT SETS 1
LANGUAGE SQL
BEGIN
declare widosv int;
declare wmes int;
declare wgod int;
declare wkvitsana date;
declare wkvitsumma double;
declare wsumkredkvit double;
declare wsaldo_k_old double;
declare widab int;
declare wdate_ date;
declare widosv1 int;
declare wsum_kredakt1 double;
declare SQLCODE int;
declare wwrowcount int;
declare wsumma1 double;

declare cur_osvs cursor for
select a.id from osv a right join (select month(b.ds) as mes1,year(b.ds) as god1 from tarif b where (b.ds is null or b.ds>=wkvitsana) and (b.ds is null or b.ds<=wdate_)) c
on a.mes=c.mes1 and a.god=c.god1 where a.idab=widab order by a.id ;

set wsumkredkvit=0;
select date(a.sana),a.summa,b.mes,b.god,a.idosv,b.idab into wkvitsana,wkvitsumma,wmes,wgod,widosv,widab
from kvit a left join osv b on a.idosv=b.id where a.sana is not null and a.summa<>0 and a.summa is not null and a.id=widkvit;

if wwrowcount>0 then

set wdate_=lastdate(wmes,wgod);
set wsum_kredakt1=0;
open cur_osvs;
FETCH FROM cur_osvs into widosv1;
WHILE (SQLCODE != 100) DO
call get_kredakt_p(widosv1,wkvitsumma,wsumma1);
set wsum_kredakt1=wsum_kredakt1+wsumma1;
FETCH FROM cur_osvs into widosv1;
END WHILE;
CLOSE cur_osvs;
set wsumkredkvit=wsum_kredakt1;

end IF;
SET retval=wsumkredkvit;

END;
...
Рейтинг: 0 / 0
Row Count
    #34526116
RomanSavelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilhom1976Обратите внимание на wwrowcount!!! И проясните пож. на счет SQLCODE... Как ее проинициализировать ?
select date(a.sana),a.summa,b.mes,b.god,a.idosv,b.idab into wkvitsana,wkvitsumma,wmes,wgod,widosv,widab
from kvit a left join osv b on a.idosv=b.id where a.sana is not null and a.summa<>0 and a.summa is not null and a.id=widkvit;

Как вы собираетесь результирующую таблицу неизвестного объема положить в одиночные переменные?
Это работать не будет ни на одной РСУБД.
...
Рейтинг: 0 / 0
Row Count
    #34526151
Ilhom1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RomanSavelyev
Как вы собираетесь результирующую таблицу неизвестного объема положить в одиночные переменные?
Это работать не будет ни на одной РСУБД.

Во первых - Там есть условие, во вторых она работала в MSSQL,Oracle и даже на DB2... Но суть не в этом....

Хорошо... Изначальный вопрос преформулируем так: Как определить "the number of rows affected by the last statement", Стейтментом может быть Select,update,insert,delete
...
Рейтинг: 0 / 0
Row Count
    #34526185
RomanSavelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilhom1976select date(a.sana),a.summa,b.mes,b.god,a.idosv,b.idab into wkvitsana,wkvitsumma,wmes,wgod,widosv,widab
from kvit a left join osv b on a.idosv=b.id where a.sana is not null and a.summa<>0 and a.summa is not null and a.id=widkvit;

Короче, этот запрос вернёт либо 0 записей, либо 1 запись, либо ошибку.

Записей нет - SQLCODE 100

Больше 1 записи - выполнение будет аварийно прервано и SQLSTATE установлен в 21000.
...
Рейтинг: 0 / 0
Row Count
    #34526205
RomanSavelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilhom1976[quot RomanSavelyev]
Как определить "the number of rows affected by the last statement", Стейтментом может быть Select,update,insert,delete
Для "select into" - это либо "запись есть", либо "записи нет", либо аварийное завершение по "зписи больше 1".

Для update и delete
Код: plaintext
1.
2.
3.
DECLARE rcnt INTEGER;
UPDATE ....; -- или DELETE ....;
GET DIAGNOSTICS rcnt = ROW_COUNT;
...
Рейтинг: 0 / 0
Row Count
    #34526278
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ilhom1976Обратите внимание на wwrowcount!!! И проясните пож. на счет SQLCODE... Как ее проинициализировать ?
----------------------------
...
set wsumkredkvit=0;

select date(a.sana),a.summa,b.mes,b.god,a.idosv,b.idab
into wkvitsana,wkvitsumma,wmes,wgod,widosv,widab
from kvit a
left join osv b on a.idosv=b.id
where a.sana is not null and a.summa<>0 and a.summa is not null and a.id=widkvit;

if wwrowcount>0 then
...
FETCH FROM cur_osvs into widosv1;
...
end IF;
SET retval=wsumkredkvit;

END;

1.
SELECT ... INTO
перед if вернет ошибку, если возвратит больше 1 записи.
Если запрос не вернет ни одной записи, то переменная SQLCODE (значение которой обновляется почти после каждой команды) сразу после выполнения SELECT INTO будет содержать значение 100.
2.
правильно
Код: plaintext
FETCH cur_osvs INTO ...
3.
После операций update, insert, delete кол-во строк может быть получено, если сразу после этой команды выдать
Код: plaintext
GET DIAGNOSTICS rc=ROW_COUNT;
ROW_COUNT объявлять не надо.
...
Рейтинг: 0 / 0
Row Count
    #34526296
Ilhom1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПА-СИ-БО!!!!

GET DIAGNOSTICS rc=ROW_COUNT;
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Row Count
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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