powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Бесконечный цикл while
8 сообщений из 8, страница 1 из 1
Бесконечный цикл while
    #39750947
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь сделать бесконечный цикл while
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE
 d1 INT;
BEGIN
 d1:=1;
WHILE d1=1 LOOP
--d1:=(random() * 9000000)::INT;
 insert into t1 values (d1);
 commit;
END LOOP;
END;

Получаю ошибку
Код: plsql
1.
2.
ERROR:  syntax error at or near "INT"
LINE 2: d1 INT;
...
Рейтинг: 0 / 0
Бесконечный цикл while
    #39750949
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBudda,

а всё остальное где? create procedure там например, судя по commit в середине.
...
Рейтинг: 0 / 0
Бесконечный цикл while
    #39750978
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MelkijBigBudda,

а всё остальное где? create procedure там например, судя по commit в середине.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE FUNCTION infinity (n INTEGER)
 RETURNS INTEGER AS $$
DECLARE
counter INTEGER := 1;
val INTEGER := 1;
BEGIN
IF (n < 1) THEN
RETURN 0 ;
END IF;
WHILE counter = n LOOP
insert into t1 values(val);
commit;
END LOOP ;
RETURN val;
END;



Ругается на $$
Как переписать данную процедуру чтобы она выполнялась бесконечно? Цель: бесконечный инсёрт в таблицу.
...
Рейтинг: 0 / 0
Бесконечный цикл while
    #39750980
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBudda,

это не процедура, это функция.
Строковой литерал тела функции разумеется необходимо закрыть. Плюс необходимо указать используемый language.
После этого синтаксически создание будет корректно. Семантически - ошибка, т.к. функция не может управлять транзакциями.

Бредовый код писать за вас не хочу.
...
Рейтинг: 0 / 0
Бесконечный цикл while
    #39750992
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BigBudda,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
do $$
DECLARE
 d1 INT;
BEGIN
 d1:=1;
WHILE d1=1 LOOP
--d1:=(random() * 9000000)::INT;
 insert into t1 values (d1);
 commit;
END LOOP;
END;
$$ language plpgsql;
...
Рейтинг: 0 / 0
Бесконечный цикл while
    #39750995
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И да, Commit внутри запрещен
...
Рейтинг: 0 / 0
Бесконечный цикл while
    #39751003
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BigBudda,

Обойти запрет на использование Commit внутри блоков plpgsql можно так, но должны быть разрешены небезопасные подключения

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
do $code$
  BEGIN
    perform dblink_connect_u('OneInsertSession', 'host=localhost' ||
                                            ' port='||inet_server_port()||
                                            ' dbname='||current_database()||
                                            ' user='||current_user
                             );
    LOOP
      perform dblink_send_query ('OneInsertSession', 'insert into t1 values (random() * 9000000);
' ||                                                 'commit;'
                                 );
  
    END LOOP;
    perform dblink_disconnect('OneInsertSession'); --До этого не дойдем, но для приличия пусть будет
  END;
$code$ language plpgsql;
...
Рейтинг: 0 / 0
Бесконечный цикл while
    #39751294
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Бесконечный цикл while
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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