powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / WITH HOLD в хранимой процедуре
6 сообщений из 6, страница 1 из 1
WITH HOLD в хранимой процедуре
    #35262662
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня..

Как использовать WITH HOLD в хранимой процедуре?

Создаем табличку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE tb_test
(
  id int4,
  a char( 10 )
) 
WITH OIDS;
ALTER TABLE tb_test OWNER TO postgres;

INSERT INTO tb_test VALUES( 1 ,'ФЕЛУФ 1');
INSERT INTO tb_test VALUES( 2 ,'ФЕЛУФ 2');
INSERT INTO tb_test VALUES( 3 ,'ФЕЛУФ 3');

Пытаюсь создать процедуру
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE FUNCTION fnc_test ()
RETURNS REFCURSOR AS
$$
DECLARE 
	rc 	
		SCROLL
		CURSOR
		WITH  HOLD
		FOR SELECT * FROM tb_test;
BEGIN
	OPEN rc;
	RETURN rc;
END;
$$
LANGUAGE 'plpgsql';
Следующая ошибка:
Код: plaintext
1.
2.
ERROR:  syntax error at or near "WITH"
LINE  8 :   WITH  HOLD

Подскажите, в чем неправ?

Удаляем таблицу и процедурку у кого создалась :)
Код: plaintext
1.
DROP TABLE tb_test;
DROP FUNCTION fnc_test ();
...
Рейтинг: 0 / 0
WITH HOLD в хранимой процедуре
    #35262921
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_Доброго дня..
Как использовать WITH HOLD в хранимой процедуре?


Никак. Нельзя в pgplsql процедуре использовать WITH HOLD...
...
Рейтинг: 0 / 0
WITH HOLD в хранимой процедуре
    #35263196
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Thamerlan Gold_Доброго дня..
Как использовать WITH HOLD в хранимой процедуре?


Никак. Нельзя в pgplsql процедуре использовать WITH HOLD...

А где и как можно?
...
Рейтинг: 0 / 0
WITH HOLD в хранимой процедуре
    #35263324
Zen_8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gold_ Thamerlan Gold_Доброго дня..
Как использовать WITH HOLD в хранимой процедуре?


Никак. Нельзя в pgplsql процедуре использовать WITH HOLD...

А где и как можно?
Можно в динамическом SQL. Придется давать имя курсору, либо использовать фиксированное имя. И освобождать курсор тоже придется самостоятельно...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR REPLACE FUNCTION fnc_test (cursor_name name)
RETURNS void AS
$$
BEGIN
    EXECUTE 'DECLARE '||cursor_name||' SCROLL CURSOR WITH HOLD FOR SELECT * FROM tb_test';
END;
$$
LANGUAGE 'plpgsql';

SELECT * FROM fnc_test('foo');
FETCH ALL FROM foo;
CLOSE foo;
...
Рейтинг: 0 / 0
WITH HOLD в хранимой процедуре
    #35263834
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем откликнувшимся..
а поясните с целью повышения образованности:
в связи с чем такое поведение?
...
Рейтинг: 0 / 0
WITH HOLD в хранимой процедуре
    #35263980
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_Спасибо всем откликнувшимся..
а поясните с целью повышения образованности:
в связи с чем такое поведение?я ,не предентуя на пояснить, припоминаю, что курсоры в плпгскл и курсор в просто скл (постгресовском же) - это немного разные курсоры (еще в 7.3 ковырял) они немного по разному себя вели. Типа - даже фетчились как-то по разному.
http://sql.ru/forum/actualthread.aspx?tid=135791&pg=1&hl=plpgsql+fetch􈱷
http://sql.ru/forum/actualthread.aspx?tid=154976&pg=1&hl=plpgsql+fetch
http://sql.ru/forum/actualthread.aspx?tid=208176&pg=1&hl=plpgsql+fetch+direction
такие вот наблюдения
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / WITH HOLD в хранимой процедуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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