Имя: Пароль:
1C
1С v8
Аналог @@rowcount в postgresql
0 idw
 
06.01.19
12:37
Хочу подчистить базу 1С с помощью PostgreSQL.

Есть такой код под MS SQL:

set rowcount 100000
set dateformat ymd
DElete from _Document452
  where _Document452._Date_Time >=('4018-12-01 00:00:00')
and _Document452._Date_Time <=('4018-12-31 23:59:59')

while @@rowcount > 0
begin
DElete from _Document452
  where _Document452._Date_Time >=('4018-12-01 00:00:00')
and _Document452._Date_Time <=('4018-12-31 23:59:59')
end;

Но как его переделать под Postgress?
В Postgress нет такой конструкции @@rowcount
1 МихаилМ
 
06.01.19
12:41
2 idw
 
06.01.19
12:48
То есть так?

declare
rows_count bigint := 0;

set dateformat ymd
DElete from _Document452
  where _Document452._Date_Time >=('4018-12-01 00:00:00')
and _Document452._Date_Time <=('4018-12-31 23:59:59')

get diagnostics rows_count = row_count;

while row_count > 0
begin
DElete from _Document452
  where _Document452._Date_Time >=('4018-12-01 00:00:00')
and _Document452._Date_Time <=('4018-12-31 23:59:59')
end;
3 Конструктор1С
 
06.01.19
13:08
Явное нарушение лицензионного соглашения 1С
4 девопсер
 
06.01.19
13:10
(3) да всем нас@ать на него
5 idw
 
06.01.19
13:21
(3) загляни на инфостарт поборник лицензионного соглашения.
6 bolero
 
06.01.19
14:29
- при простом исполнении DELETE из psql и многих других консолей он тебе сам напишет, сколько строчек удалил

- в хранимке на языке plpgsql: GET DIAGNOSTICS skoka_udolil = ROW_COUNT;

А вообще с помощью odata /Unpost() + DELETE удалят заодно табличные части и записи в РН, РС.

В 1С нет Foreign Key от слова совсем, и контроль целостности полностью на плечах платформы. DELETE CASCADE не прокатит.
7 idw
 
06.01.19
14:38
(6) Спасибо за дельный совет.
А как объявить переменную skoka_udolil ?

declare
skoka_udolil bigint;

Ругается на bigint, пробывал int и integer, тоже самое.
8 bolero
 
06.01.19
15:08
CREATE OR REPLACE FUNCTION udolit()
  RETURNS NUMERIC AS
$$
DECLARE
  skoka_udolil BIGINT;
BEGIN
  CREATE TEMPORARY TABLE IF NOT EXISTS t (
    a INTEGER
  );
  INSERT INTO t VALUES (1), (2), (3);
  DELETE FROM t WHERE 1=1;
  GET DIAGNOSTICS skoka_udolil = ROW_COUNT;
  RETURN skoka_udolil;
END;
$$
  LANGUAGE plpgsql;

SELECT udolit();