powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Курсор не скролируется!!! - В продолжение курсорной эпопеи
11 сообщений из 11, страница 1 из 1
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769373
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё началось отсюда .
Теперь вопрос следущий. Попытка сделать что-то типа такого
Код: plaintext
MOVE FORWARD IN cur;
приводит к
Код: plaintext
1.
2.
3.
ERROR:  parser: parse error at or near "$1" at character 18

WARNING:  Error occurred while executing PL/pgSQL function getcreative
WARNING:  line 21 at SQL statement

То есть к ошибке на этой строке.
FETCH с подобными параметрами приводит к этой ж ошибке.
Попытка объявить курсор с параметром SCROLL приводит к
Код: plaintext
1.
2.
ERROR:  parser: parse error at or near "CURSOR" at character 22

WARNING:  plpgsql: ERROR during compile of getcreative near line 5

Версия Постгреса 7.3.2, пробовал на 7.4.5 с тем же эффектом.

Как это всё исправить?
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769427
MaximZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, да что за дурацкая привычка. Можно полный листинг предоставить?
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769468
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximZблин, да что за дурацкая привычка. Можно полный листинг предоставить?
Кого? Ф-ции которая вызывается?
Лёгко, только кавычки я уберу чтоб синтаксис в ф-ции подсветило
Код: 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.
CREATE OR REPLACE FUNCTION "public"."getcreative2" (bigint, bigint, varchar, bigint) RETURNS bigint AS

DECLARE
  RowCount int8;
  i int8;
  res creative.creative_id%TYPE;
  cur CURSOR FOR
    SELECT g.creative_id
    FROM getcreative( $ 1 , $ 2 , $ 3 , $ 4 ) as g;
BEGIN
  OPEN cur;
  RowCount :=  0 ;
  FETCH cur INTO res;
  WHILE FOUND LOOP
    RowCount := RowCount+ 1 ;
    FETCH cur INTO res;
  END LOOP;
  RowCount := round(RowCount*random());
  MOVE BACKWARD RowCount IN cur;
  FETCH cur INTO res;
  CLOSE cur;
  return res;
END;

LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

И ошибки к ней
Код: plaintext
1.
2.
ERROR:  parser: parse error at or near "$1" at character 18
WARNING:  Error occurred while executing PL/pgSQL function getcreative2
WARNING:  line 21 at SQL statement
и
Код: plaintext
1.
ERROR:  parser: parse error at or near "CURSOR" at character 22
WARNING:  plpgsql: ERROR during compile of getcreative2 near line 5
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769482
MaximZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я точно не уверен, но что то у меня большие сомнения что курсор определяется в разделе DECLARE.
Кажется это делается уже внутри функции. Сейчас уточню.
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769492
MaximZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximZя точно не уверен, но что то у меня большие сомнения что курсор определяется в разделе DECLARE.
Кажется это делается уже внутри функции. Сейчас уточню.

страно в документации на 7.4 написано что он определяется именно в разделе DECLARE.

а что такое getcreative() ?
ведь первое сообщение об ошибке в этой функции.
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769498
plpgsql, как я заметил, поддерживает несколько другой синтаксис CURSOR - ов чем его же SQL-диалект. В частности в объявлении нельзя написать SCROLL, в теле - не получилось написать MOVE ALL|FORWARD ctest. ПОлучилось только MOVE ctest;
Написать Fetch FORWARD count кажется тоже не шибко получилось.
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769517
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вчера немного смотрел%plpgsql, как я заметил, поддерживает несколько другой синтаксис CURSOR - ов чем его же SQL-диалект. В частности в объявлении нельзя написать SCROLL, в теле - не получилось написать MOVE ALL|FORWARD ctest. ПОлучилось только MOVE ctest;
Написать Fetch FORWARD count кажется тоже не шибко получилось.

Эээ.
MOVE ctest; ?
Это как?
В смысле, а имя курсора куда?
А можно ли полный вариант кода?

Просто у меня на этом тоже ошибка лезет.
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769525
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximZ MaximZя точно не уверен, но что то у меня большие сомнения что курсор определяется в разделе DECLARE.
Кажется это делается уже внутри функции. Сейчас уточню.

страно в документации на 7.4 написано что он определяется именно в разделе DECLARE.

а что такое getcreative() ?
ведь первое сообщение об ошибке в этой функции.

Код: plaintext
1.
2.
3.
4.
CREATE OR REPLACE FUNCTION "public"."getcreative" (bigint, bigint, varchar, bigint) RETURNS SETOF bigint AS'
...
очень большой запрос
...
'LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Насчёт сообщений об ошибке, то с именами я напутал немного.
Правильный вариант в посте с ф-цией.
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769540
MaximZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mwolf

Код: plaintext
1.
2.
3.
4.
CREATE OR REPLACE FUNCTION "public"."getcreative" (bigint, bigint, varchar, bigint) RETURNS SETOF bigint AS'
...
очень большой запрос
...
'LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Насчёт сообщений об ошибке, то с именами я напутал немного.
Правильный вариант в посте с ф-цией.

А попробуйте вызвать функцию в курсоре с абсолютными параметрами.
Если все заработает, то беда, видимо постгрес не понимает в разделе объявлений применение переменных. Или можно для верности сначала проальасить входные параметры, и уже ссылаться на альасы, хотя это врядли сработает.
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769553
mwolf MOVE ctest; ?

ctest - это и был мой курсор. И его удалось только MOVE имя без всеких ALL или тп. Хотя в транзакции SQL (а не в plpgsql) можно выполнить и MOVE ALL.
...
Рейтинг: 0 / 0
Курсор не скролируется!!! - В продолжение курсорной эпопеи
    #32769560
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вчера немного смотрел% mwolf MOVE ctest; ?

ctest - это и был мой курсор. И его удалось только MOVE имя без всеких ALL или тп. Хотя в транзакции SQL (а не в plpgsql) можно выполнить и MOVE ALL.

И на скоко оно сдвинулось?
И куда?
Вверх\вниз?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Курсор не скролируется!!! - В продолжение курсорной эпопеи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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