powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Аналог ROWCOUNT?
9 сообщений из 9, страница 1 из 1
Аналог ROWCOUNT?
    #33148783
ak@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ak@
Гость
Какой аналог ROWCOUNTов есть в DB2? Есть ли к-либо прямые аналоги?
T-SQL:
1) Возвращает нужные N записей
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE GetTopN
@top int
AS
IF @top >  0 
    SET ROWCOUNT @top

SELECT * FROM myTable ORDER BY  1 

2) @@ROWCOUNT - глобальная переменная, показывает сколько записей было выбрано/вставлено/изменено предыдущим запросом. В примере - кол-во записей в таблице anotherTable.
Код: plaintext
1.
2.
3.
4.
INSERT myTable(field1)
SELECT id FROM anotherTable

RETURN @@ROWCOUNT

Спасибо.
...
Рейтинг: 0 / 0
Аналог ROWCOUNT?
    #33148808
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://]www.sql.ru/forum/actualthread.aspx?tid=145754&pg=-1
...
Рейтинг: 0 / 0
Аналог ROWCOUNT?
    #33148809
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://]http://www.sql.ru/forum/actualthread.aspx?tid=145754&pg=-1
...
Рейтинг: 0 / 0
Аналог ROWCOUNT?
    #33148835
ak@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ak@
Гость
Нет, TORT, это не то. По той ссылке - обсуждение проблемы автонумерации. А мне нужны 2 вещи:
1) Как выбрать первые N записей (N как параметр процедуры)
2) Как узнать, сколько записей было выбрано/вставлено/изменено/удалено предыдущим sql statement.
...
Рейтинг: 0 / 0
Аналог ROWCOUNT?
    #33148851
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выбрать первые N записей....
fetch first N rows only
...
Рейтинг: 0 / 0
Аналог ROWCOUNT?
    #33148909
ak@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ak@
Гость
Опять же - первые N записей, где N - это не фиксированной число, а параметр процедуры. Мне почему-то кажется, что так написать будет неправильно:
Код: plaintext
1.
2.
CREATE PROCEDURE GetTopN (IN v_top INT)
SELECT * FROM myTable FETCH FIRST v_top ROWS ONLY;

Так что оба вопроса остаются открытыми.

Помогите!
...
Рейтинг: 0 / 0
Аналог ROWCOUNT?
    #33149188
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE PROCEDURE PROC1
(
IN ROWCOUNT INTEGER
)
LANGUAGE SQL
RESULT SETS 1
BEGIN

declare cmd varchar(1000);
declare c1 cursor with return for s1;

set cmd = 'select * from mytable order by mycolumn fetch first'||char(rowcount)||' rows only';
PREPARE s1 from cmd;
open c1;


END

Мож так???
...
Рейтинг: 0 / 0
Аналог ROWCOUNT?
    #33149479
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ограничение количества записей:

Такие конструкции непозволительны:
Код: 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.
-- почему-то FETCH FIRST нельзя использовать во внешнем селекте
CREATE FUNCTION xxx (n INTEGER)
     RETURNS TABLE (m INTEGER)
     LANGUAGE SQL
     READS SQL DATA
     NO EXTERNAL ACTION
     RETURN
       SELECT person_Id
         FROM APLUS.SEGMENT
         ORDER BY person_id
         FETCH FIRST  10  ROWS ONLY
    ;
-- в FETCH FIRST нельзя использовать переменную вместо константы
CREATE FUNCTION xxx (n INTEGER)
     RETURNS TABLE (m INTEGER)
     LANGUAGE SQL
     READS SQL DATA
     NO EXTERNAL ACTION
     RETURN
       WITH temp(person_id) AS (
       SELECT person_Id
         FROM APLUS.SEGMENT
         ORDER BY person_id
         FETCH FIRST n ROWS ONLY
     ) select * from temp;

Такое можно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
-- FETCH FIRST во внутреннем селекте, константа
CREATE FUNCTION xxx (n INTEGER)
     RETURNS TABLE (m INTEGER)
     LANGUAGE SQL
     READS SQL DATA
     NO EXTERNAL ACTION
     RETURN
       WITH temp(person_id) AS (
       SELECT person_Id
         FROM APLUS.SEGMENT
         ORDER BY person_id
         FETCH FIRST  10  ROWS ONLY
     ) select * from temp;

Вы нуждаетесь в :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE FUNCTION xxx (n INTEGER)
     RETURNS TABLE (m INTEGER)
     LANGUAGE SQL
     READS SQL DATA
     NO EXTERNAL ACTION
     RETURN
  SELECT person_id FROM
    (SELECT
       ROW_NUMBER() OVER() AS r#, person_id
     FROM APLUS.SEGMENT
    ) AS e
  WHERE r# <= n


Подсчет изменившихся строк:
Код: plaintext
1.
2.
3.
  DECLARE rcount IINTEGER;
  UPDATE ... ;
  GET DIAGNOSTICS rcount = ROW_COUNT; -- это специальная синтаксическая конструкция

Но в случае FOR вам придется ROWCOUNT эмулировать вручную:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  SET rcount =  0 ;
  FOR xxx AS 
    SELECT ..
  DO
    INSERT INTO T1 VALUES (...);
    INSERT INTO T2 VALUES(IDENTITY_VAL_LOCAL()...);
    SET rcount=rcount+ 1 ;
  END FOR;
...
Рейтинг: 0 / 0
Аналог ROWCOUNT?
    #33150703
ak@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ak@
Гость
Спасибо, Виктор. Как всегда исчерпывающе.
GET DIAGNOSTICS я использовал, чтобы получить значение, возвращаемое вызываемой процедурой в RETURN, а вот про ROW_COUNT не знал.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Аналог ROWCOUNT?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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