powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как в plpgsql сдвинуть курсор??
1 сообщений из 1, страница 1 из 1
Как в plpgsql сдвинуть курсор??
    #32884721
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть функция которая должна выбрать из базы данные и по определенному правилу сделать string и отдать его на выход функции

может и криво делать 3 курсора из одной и той же таблицы но суть не в этом.

Не работает строчка
MOVE 100 IN all_cat;
и я немогу понять почему?!!ъ
Если кто знает как в plpgsql двигать курсоры то просьба сообщить.

добавление forward и тп специальных слов не понимает

и почему-то курсор имеет значение NULL?!!

Код: 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.
CREATE OR REPLACE FUNCTION "up_data"."catalog_test" () RETURNS text AS
$body$
/* New function body */
DECLARE
       all_cat CURSOR FOR select distinct(c.item_category_code), c.group_by from up_data.catalog c;
       sub_cat_man refcursor; -- CURSOR FOR select c.item_category_code, c.manufacturer_code from up_data.catalog c ORDER BY c.item_category_code, c.manufacturer_code;
       sub_cat_prod CURSOR FOR select c.item_category_code, c.product_group_code from up_data.catalog c ORDER BY c.item_category_code, c.product_group_code;

       item_cat varchar( 100 );
       group_by integer;
       sub_cat varchar( 100 );
       sub_cat_ic varchar( 100 );
       
       counter_sub_cat integer;

       tmp_sub_cat varchar( 100 );
       html text;

BEGIN
     html := '';
     counter_sub_cat :=  0 ;
     OPEN all_cat;
     OPEN sub_cat_man FOR select c.item_category_code, c.manufacturer_code from up_data.catalog c ORDER BY c.item_category_code, c.manufacturer_code;
     OPEN sub_cat_prod;
     /**/
     LOOP
       --------------------------
       -------!!!неработает!!!-------------------
       MOVE  100  IN all_cat;
       --------------------------
       --------------------------
       FETCH all_cat INTO item_cat, group_by;IF FOUND = false THEN EXIT; END IF;
       html := html || '[a parent]' || item_cat;
       ---------------------------------------------
       IF group_by =  1  THEN
         MOVE FORWARD  1  IN sub_cat_man;
         counter_sub_cat :=  0 ;
         LOOP
           FETCH sub_cat_man INTO sub_cat_ic, sub_cat;IF sub_cat_ic != item_cat THEN EXIT; END IF;
           IF sub_cat IS NOT NULL THEN
             html := html || '[a child' || group_by || ']' || sub_cat;
           END IF;
           counter_sub_cat := counter_sub_cat + 1 ;
         END LOOP;
         sub_cat = NULL;
       END IF;
       ---------------------------------------------
       IF group_by =  2  THEN
         MOVE FORWARD counter_sub_cat IN sub_cat_prod;
         counter_sub_cat :=  0 ;
         LOOP
           FETCH sub_cat_prod INTO sub_cat_ic, sub_cat;IF sub_cat_ic != item_cat THEN EXIT; END IF;
           IF sub_cat IS NOT NULL THEN
             html := html || '[a child' || group_by || ']' || sub_cat;
           END IF;
           counter_sub_cat := counter_sub_cat + 1 ;
         END LOOP;
         sub_cat = NULL;
       END IF;
       ---------------------------------------------
     END LOOP;
     
     CLOSE all_cat;
     CLOSE sub_cat_man;
     CLOSE sub_cat_prod;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как в plpgsql сдвинуть курсор??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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