Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
30.03.2011, 15:00
|
|||
|---|---|---|---|
|
|||
Проблема с чисткой таблицы |
|||
|
#18+
Есть таблица DOC в ней примерно 3 миллиона записей. Периодически запускается чистка данной таблицы, удаляются данные старше определенной даты например delete * from DOC where DATPROF < '2010-07-26'. Удаляется несколько тысяч записей. Если возможность изменить SQl, что бы удаление происходило допустим по 500 записей, а потом выполнялся COMMIT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.03.2011, 16:03
|
|||
|---|---|---|---|
|
|||
Проблема с чисткой таблицы |
|||
|
#18+
segoff, Update большого числа записей Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.03.2011, 17:25
|
|||
|---|---|---|---|
|
|||
Проблема с чисткой таблицы |
|||
|
#18+
Спасибо, то что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.03.2011, 17:57
|
|||
|---|---|---|---|
|
|||
Проблема с чисткой таблицы |
|||
|
#18+
Для DELETE могу предложить вот такой вариант CREATE PROCEDURE "NULLID"."DELETE_WITH_COMMIT" (IN "TABNAME" VARCHAR(128), IN "PREDICATE" VARCHAR(1000), IN "COMMITCOUNT" INTEGER, IN "LOCKTABLE" INTEGER ) LANGUAGE SQL MODIFIES SQL DATA BEGIN DECLARE SQLCODE INTEGER; DECLARE txt VARCHAR(10000) ; DECLARE stmt,stmt_lock STATEMENT; if locktable = 1 then SET txt = 'lock table ' || tabname || ' in exclusive mode'; PREPARE stmt_lock FROM txt; EXECUTE stmt_lock; end if; SET txt = 'DELETE FROM (SELECT 1 FROM ' || tabname; if predicate is not null and rtrim(predicate) <> '' then set txt = txt || ' WHERE ' || predicate; end if; set txt = txt || ' FETCH FIRST ' || RTRIM(CHAR(commitcount)) || ' ROWS ONLY) AS D'; PREPARE stmt FROM txt; l: LOOP EXECUTE stmt; IF SQLCODE = 100 THEN LEAVE l; END IF; COMMIT; if locktable = 1 then EXECUTE stmt_lock; end if; END LOOP; COMMIT; END; Использовать простой предикат call NULLID.DELETE_WITH_COMMIT('SCH.TABLE','DT < ''2011-01-01'' ', 5000,0); более сложный предикат call NULLID.DELETE_WITH_COMMIT( 'SCH.ACTIVITY t ', 'exists (select 1 from loading.ACTIVITY l where t.op_id=l.op_id)', 1000, 0) ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.03.2011, 18:07
|
|||
|---|---|---|---|
|
|||
Проблема с чисткой таблицы |
|||
|
#18+
A.PanskikhДля DELETE могу предложить вот такой вариант CREATE PROCEDURE "NULLID"."DELETE_WITH_COMMIT" (IN "TABNAME" VARCHAR(128), IN "PREDICATE" VARCHAR(1000), IN "COMMITCOUNT" INTEGER, IN "LOCKTABLE" INTEGER ) LANGUAGE SQL MODIFIES SQL DATA BEGIN DECLARE SQLCODE INTEGER; DECLARE txt VARCHAR(10000) ; DECLARE stmt,stmt_lock STATEMENT; if locktable = 1 then SET txt = 'lock table ' || tabname || ' in exclusive mode'; PREPARE stmt_lock FROM txt; EXECUTE stmt_lock; end if; SET txt = 'DELETE FROM (SELECT 1 FROM ' || tabname; if predicate is not null and rtrim(predicate) <> '' then set txt = txt || ' WHERE ' || predicate; end if; set txt = txt || ' FETCH FIRST ' || RTRIM(CHAR(commitcount)) || ' ROWS ONLY) AS D'; PREPARE stmt FROM txt; l: LOOP EXECUTE stmt; IF SQLCODE = 100 THEN LEAVE l; END IF; COMMIT; if locktable = 1 then EXECUTE stmt_lock; end if; END LOOP; COMMIT; END; Использовать простой предикат call NULLID.DELETE_WITH_COMMIT('SCH.TABLE','DT < ''2011-01-01'' ', 5000,0); более сложный предикат call NULLID.DELETE_WITH_COMMIT( 'SCH.ACTIVITY t ', 'exists (select 1 from loading.ACTIVITY l where t.op_id=l.op_id)', 1000, 0) ; Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.04.2011, 09:58
|
|||
|---|---|---|---|
|
|||
Проблема с чисткой таблицы |
|||
|
#18+
Mark Barinsteinsegoff, Update большого числа записей Код: plaintext Марк под Windows всё работает отлично, под db2 v9 for z/OS выполняется только один шаг удаления и выдает ошибку SQL0518N The statement named in the EXECUTE statement is not in a prepared state or is a SELECT or VALUES statement. SQLSTATE=07003 код процедуры CREATE PROCEDURE ROGOV.HUGE_CHANGE (IN PSTMT_SEL VARCHAR( 4000) FOR SBCS DATA CCSID EBCDIC, IN PSTMT_CHG VARCHAR( 4000) FOR SBCS DATA CCSID EBCDIC, IN PCOMMITCOUNT INTEGER, OUT PROWSAFFECTED INTEGER) VERSION V1 LANGUAGE SQL DYNAMIC RESULT SETS 0 NOT DETERMINISTIC CALLED ON NULL INPUT MODIFIES SQL DATA WLM ENVIRONMENT FOR DEBUG MODE IASCCA ASUTIME NO LIMIT INHERIT SPECIAL REGISTERS COMMIT ON RETURN NO DISALLOW DEBUG MODE QUALIFIER ROGOV PACKAGE OWNER ROGOV NODEFER PREPARE CURRENT DATA NO DEGREE 1 DYNAMICRULES RUN WITHOUT EXPLAIN WITHOUT IMMEDIATE WRITE ISOLATION LEVEL CS WITHOUT KEEP DYNAMIC OPTHINT '' SQL PATH DEFAULT RELEASE AT COMMIT REOPT NONE VALIDATE RUN ROUNDING DEC_ROUND_HALF_EVEN DECIMAL(31) BEGIN DECLARE SQLCODE INT ; DECLARE CNT INT DEFAULT 0 ; DECLARE DUMMY_INT INT ; DECLARE LUPD_STR VARCHAR( 1000) ; DECLARE C1 CURSOR WITH HOLD FOR S1 ; SET PSTMT_CHG = PSTMT_CHG || ' WHERE CURRENT OF C1' ; PREPARE S1 FROM PSTMT_SEL ; PREPARE S2 FROM PSTMT_CHG ; SET PROWSAFFECTED = 0 ; OPEN C1 ; FETCH C1 INTO DUMMY_INT ; WHILE(SQLCODE != 100) DO SET CNT = CNT + 1 ; SET PROWSAFFECTED = PROWSAFFECTED + 1 ; EXECUTE S2 ; IF(CNT = PCOMMITCOUNT) THEN COMMIT ; SET CNT = 0 ; END IF ; FETCH C1 INTO DUMMY_INT ; END WHILE ; COMMIT ; CLOSE C1 ; END ? #SET TERMINATOR ; COMMIT; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.04.2011, 11:06
|
|||
|---|---|---|---|
|
|||
Проблема с чисткой таблицы |
|||
|
#18+
segoff, попробуйте вставить Код: plaintext Код: plaintext Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=43&tablet=1&tid=1602317]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 165ms |

| 0 / 0 |
