Сообщения

Показаны сообщения с ярлыком "sql"

АЦК. Вывести информация по времени обработки ПФХД

/* Вывести информацию по времени обработки */ SELECT ('ПФХД №'||trim(d.DOC_NUMBER)||' от '||TRIM(d.DOC_DATE)) AS "Документ",    t.ACTION_DATE AS "Дата действия",    'Перевод ЭД со ст."'||ds.CAPTION||' ('||ds.ID||')" на ст."'||ds2.CAPTION||' ('||ds2.ID||')" по действию "'||t.ACTION_NAME||'"' AS "Действие",    t.TASK_TIME/1000 AS "Время затр. (сек.)",        s.username   FROM document d   JOIN DOCJOURNAL dj ON dj.DOCUMENT_ID = d.id   JOIN DISPSTATUS ds ON ds.id = dj.OLD_DISPSTATUS_ID   JOIN DISPSTATUS ds2 ON ds2.id = dj.DISPSTATUS_ID   JOIN TASKJOURNAL t ON t.ID = dj.TASKJOURNAL_ID   join sysuser s on s.id = t.sysuser_id  WHERE d.id = <document_id>   order by t.TASK_TIME/1000 DESC;

АЦК. Количество строк в ПФХД

/*Данные по количеству строк */  SELECT f.doc_number, f.DOCUMENT_ID,   f.doc_date, (SELECT count(1) FROM FHDPLANLINE3 f3 WHERE f3.FHDPLAN_ID = f.id) AS "Кол-во строк в Поступления", (SELECT count(1) FROM FHDPLANLINE3 f4 WHERE f4.FHDPLAN_ID = f.id) AS "Кол-во строк в Выплаты"    FROM FHDPLAN f   WHERE f.DOCUMENT_ID = <document_id>;

Поиск дублирующих проводок

-- Вывод дублирующих бюджетных проводок с меньшим ID SELECT DISTINCT(count(a.document_id)) FROM PLANLOG a JOIN DOCUMENT d ON d.ID = a.DOCUMENT_ID  WHERE EXISTS( SELECT 1                  FROM PLANLOG b                 WHERE a.BUDGCARRY_ID = b.BUDGCARRY_ID                   AND a.DOCUMENT_ID = b.DOCUMENT_ID                   AND a.DELTA_AMT = b.DELTA_AMT                   AND a.ID < b.ID )    AND d.DOCUMENTCLASS_ID = 11    AND a.CARRY_DATE > to_date('18.08.2023', 'dd.mm.yyyy'); -- Удаляем дублирующую бюджетную проводку с меньшим ID DELETE FROM PLANLOG a  WHERE EXISTS( SELECT 1                  FROM PLANLOG b                 WHERE a.BUDGCARRY_ID = b.BUDG...

АЦК. Проверить какие ПФХД не были перенесены

Импорт ПФХД через АРМ выполняется по документам на ст. "Утвержден". Для поиска НЕ перенесенных автоматически документов можно выполнить запрос: /* Выводим информацию по ПФХД на ст. Утвержден и не перенесенные в 2023 год */ SELECT f.ID , f.DOCUMENT_ID , f.DOC_NUMBER , f.DOC_DATE , f.AMOUNT , o.CAPTION    FROM FHDPLAN f    JOIN ORG o ON o.id = f.ORG_ID  WHERE f.DISPSTATUS_ID=58     AND f.BUDGET_ID =<id бюджета 2022 года>    AND f.ORG_ID NOT IN (SELECT f2.ORG_ID   FROM FHDPLAN f2 WHERE f2.BUDGET_ID =<id бюджета 2023 год>);

АЦК. Поля в ЭД Сведения о платеже ГИС ГМП

Поля в ЭД "Сведения о платеже ГИС ГМП": p.author_id = <ID статуса лица, оформившего документ>, p.pi_anal_kind = '<Вид классификации по бюджету>', p.pi_budget_code = '<Код бюджета>', p.pay_okato = '<ОКАТО(ОКТМО) плательщика>', p.taxperiod = '<Налоговый период>', p.GROUND_ID = '<ID показателя основания платежа>', p.GROUND_CODE = '<Код показателя основания платежа>', p.grnd_doc_number = '<Номер документа>', p.grnd_doc_date = '<Дата документа>', p.paytype_id = <ID типа платежа>, p.PAYTYPE_CODE = '<Код типа платежа>'

SQL. Поиск информации по сообщениям

/* Ищем сообщения, в которых есть код по маске */ select *    from MSG m  where m.request_data like '%CODE="19-%08"%'    and m.SENDER_ID = 805    and (m.create_time >= TO_DATE('2020-06-05', 'YYYY-MM-DD')    and m.create_time < TO_DATE('2020-06-06', 'YYYY-MM-DD'))    and QUEUE_NAME = 'TRANSPORT_800000001869'     and RPL_OBJ_NAME = 'PURPOSEFULGRANT_2020_800000001869'; /* 2 вариант */ select id,    create_time,    queue_name as Очередь,    rpl_obj_name as ДополнительнаяИнформация,    seq_number as Номер,    case when dispstatus = 0 then 'Новый' when dispstatus = 1 then 'Отправлен' when dispstatus = 2 then 'Получен' when dispstatus = 3 then 'Обработан' else 'NONE'    end as Статус,    diagnosis as Диагноз   from msg m  where rpl_obj_name like '%1201000002717%'     --and dispstatus < 3  ...

SQL. Очистка записей из связанных таблиц

Дано: Есть 2 таблицы "Сообщения" и "Архив сообщений", вторая содержит только ссылку на первую и дату отправки в архив. Задача:  Почистить сообщения. Решение: Для решения можно было написать 2 скрипта, которые сначала удаляют записи из таблицы "Архив сообщений", а потом из таблицы "Сообщения" (такая очередность обусловлена тем, что в архиве сообщения есть ссылки FK). Выглядеть это будет так: DELETE FROM ARCHIVEMAILUSER WHERE MAIL_ID IN (SELECT ID FROM MAIL WHERE CREATE_DATE >= to_date ('01.01.2022', 'dd.mm.yyyy') AND CREATE_DATE < to_date ('02.02.2022', 'dd.mm.yyyy')); DELETE FROM MAIL WHERE CREATE_DATE >= to_date ('01.01.2022', 'dd.mm.yyyy') AND CREATE_DATE < to_date ('02.02.2022', 'dd.mm.yyyy'); - Но что, делать если связанных таблиц больше? - Использовать PL/SQL! Запрос будет выглядеть следующим образом: --#ORACLE begin for cur in (SELECT id FROM MAIL WHERE CREATE_DA...

SQL. Select c CASE

Для корректировки меню пользователя: UPDATE SYSUSER s  SET s.MENU_ID = (SELECT DISTINCT CASE (SELECT count(1) FROM menu WHERE name ='PlanningMenu') WHEN 1 THEN (SELECT m2.id FROM menu m2 WHERE m2.NAME = 'PlanningMenu') ELSE (SELECT m3.id FROM menu m3 WHERE m3.NAME = 'RootMenu') END FROM menu) WHERE s.USERNAME LIKE 'root';

SQL. Вывести информацию по данным в Oracle

Вывести информацию по табличным пространствам: SQL>  select b.tablespace_name, tbs_size SizeMb, a.free_space FreeMb     from (select tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space        from dba_free_space        group by tablespace_name) a,       (select tablespace_name, sum(bytes)/1024/1024 as tbs_size        from dba_data_files        group by tablespace_name) b      where a.tablespace_name(+)=b.tablespace_name; Вывести 10 самых больших таблиц: SQL>  SELECT * FROM (     SELECT owner, segment_name, bytes/1024/1024 meg     FROM dba_segments     WHERE segment_type = 'TABLE'     ORDER BY bytes/1024/1024 desc)     WHERE rownum <= 10;

SQL. Заполнение журнала обработки документов

Скрипт для получения другого скрипта (insert): SELECT 'Insert into taskjournal (ID,ACTION_DATE,URL,TASK_TIME,PROCESSOR_NAME,SPECIFICATION,ACTION_NAME,COMPLETED,EVENT_TYPE,VERSION,SYSUSER_ID,BUDGET_ID,SERVER_HOST,SERVER_PORT,CLIENT_HOST,CLIENT_PORT) values (' ||d.TASKJOURNAL_ID|| ', to_date (''' ||d.WORK_DATE|| ''', ''DD.MM.YY''),' ||d.TASKJOURNAL_ID|| ',''1'',''DOCUMENT'',null,''process'',''1'',''0'',''1'',''-99999'',''1'',''myserver'',''2091'',''myserver'',''2091'');'  FROM DOCJOURNAL d LEFT JOIN TASKJOURNAL t ON t.id = d.TASKJOURNAL_ID WHERE t.ID IS NULL --AND d.DOCUMENT_ID = 13881756 AND d.dispstatus_id = 2 AND d.action_name = 'process' AND WORK_DATE > to_date ('01.06.2021', 'DD.MM.YYYY');

SQL. Вывести таблицы с большим количеством записей в БД Firebird

Используем запрос: select i. rdb$relation_name , cast ( 1 /i. rdb$statistics as integer ) as RCOUNT from rdb$relation_constraints rc inner join rdb$indices i on (rc. rdb$relation_name =i. rdb$relation_name and rc. rdb$index_name =i. rdb$index_name and (rc. rdb$index_name is not null ) and TRIM ( UPPER (rc. rdb$constraint_type ))= 'PRIMARY KEY' and i. rdb$statistics > 0 ) ORDER BY RCOUNT DESC ; Либо используем gstat.exe и анализируем файл со статистикой с помощью IBAnalyst.

SQL. Найти всю информацию по связанным таблицам

Задача: Проверить и найти все таблицы, где используется определенное значение из связанной таблицы. Т.е. есть документы, справочники, которые содержат конкретное значение из связанного справочника. Решение для СУБД Oracle: Узнаем все таблицы, в которых есть необходимое нам поле: select * from dba_tab_columns where column_name like '%LAWACT_ID'; Далее, пишем запрос по каждой таблице: select TABLE_NAME AS "ТАБЛИЦА",    COLUMN_NAME AS "КОЛОНКА",    'SELECT '''||TABLE_NAME||''''||' AS "Таблица",     count(1) AS "Количество" FROM '||TABLE_NAME||' WHERE '||COLUMN_NAME||' = <необходимый ID> UNION ALL' AS "СКРИПТ"   from dba_tab_columns  where column_name like 'KD_CODE' /*Укажите название поля (колонки) */  --AND OWNER like '<schema_name>'; /*Укажите схему */ Далее, копируем значение из колонки "СКРИПТ", редактируем его, убирая  UNION ALL...

Поиск связанных документов

SELECT dc.CAPTION AS CLASS,     d.DOC_DATE,    d.DOC_NUMBER,     d.AMOUNT,     ds.CAPTION AS STATUS    FROM document d    JOIN DISPSTATUS ds ON ds.id = d.DISPSTATUS_ID   JOIN DOCUMENTCLASS dc ON dc.id = d.DOCUMENTCLASS_ID   WHERE parent_ID = 800122960493; SELECT dc.CAPTION AS CLASS,     d.DOC_DATE,     d.DOC_NUMBER,     d.AMOUNT,     ds.CAPTION AS STATUS    FROM document d    JOIN DISPSTATUS ds ON ds.id = d.DISPSTATUS_ID   JOIN DOCUMENTCLASS dc ON dc.id = d.DOCUMENTCLASS_ID  WHERE parent_ID = 800122960493; SELECT dc.CAPTION AS CLASS,    b.DOC_DATE,    b.DOC_NUMBER,    b.AMOUNT,    ds.CAPTION AS STATUS    FROM BUDGORDER b    JOIN DISPSTATUS ds ON ds.id = b.DISPSTATUS_ID   JOIN DOCUMENTCLASS dc ON dc.id = b.DOCUMENTCLASS_ID...

АЦК. Проставить РО в БО

/* Скрипт для отбора */ SELECT b.id,     b.documentclass_ID,     b.dispstatus_id,     b.doc_date,     b.doc_number,     b.amount,    'UPDATE BUDGORDER B SET B.DIRECTION_ID ='||B.DIRECTION_ID||    ', B.DIRECTION_CODE_BUDGLEVEL = '||'"'||B.DIRECTION_CODE_BUDGLEVEL||'"'||    --', B.DIRECTION_DIRECT_GROUP_NAME = '||B.DIRECTION_DIRECT_GROUP_NAME||    ', B.DIRECTION_CODE_NUMBER = '||'"'||B.DIRECTION_CODE_NUMBER||'"'||    ', B.DIRECTION_CAPTION = '||'"'||B.DIRECTION_CAPTION||'"'||    ' where B.ID ='||B.ID||' AND B.direction_id is null;' AS FIX   FROM BUDGORDER B  WHERE B.budget_id IN (SELECT b2.id FROM budget b2 WHERE b2.finyear = 2020)    AND B.documentclass_id IN (10)    AND B.direction_id IS NOT NULL;

Oracle. Вывести список схем

/* Запрос для получения списка схем по названию */ select username,     created    from dba_users   where account_status = 'OPEN'    --and default_tablespace = 'USERS' and    and created > to_date('01-01-2020', 'DD-MM-YYYY')     and (username like upper('%FIN%') or username like upper('%PL%') or username like upper('%GZ%')) ;

sqlplus. Ключи командной строки при запуске

Параметры(ключи) командной строки для SQL*Plus и SQLPlusW: -С (-COMPATIBILITY) номер версии (например sqlplus -C 9.0.1) — этот параметр позволяет запустить SQL*Plus в режиме совместимости с определенной версией Oracle; -L (-LOGON) — этот параметр определяет, сколько раз будут запрашиваться имя пользователя и пароль при запуске SQL*Plus. По умолчанию запрос идет три раза. Если указать этот параметр, то запрос будет производиться только один раз; -M (-MARKUP) — этот параметр означает, что результаты выполнения запросов будут формироваться и выводиться в формате HTML. Для него предусмотрено большое количество дополнительных ключевых слов (HTML, HEAD, BODY, TABLE и т.п.), которые позволяют определить формат создаваемого кода HTML; -R (-RESTRICTED) — позволяет указать уровень ограничений при выполнении команд в SQL*Plus. После этого параметра нужно также указать уровень ограничений (1, 2 или 3). Ограничения третьего уровня — самые серьезные. Например, при включении ограничений третьего...

ПОЛУЧЕНИЕ СПИСКА СВЯЗАННЫХ ТАБЛИЦ БАЗЫ ДАННЫХ

ПОЛУЧЕНИЕ СПИСКА СВЯЗАННЫХ  ТАБЛИЦ БАЗЫ ДАННЫХ SELECT  F . RDB$RELATION_NAME ,  F . RDB$CONSTRAINT_NAME ,        T . RDB$RELATION_NAME ,  T . RDB$CONSTRAINT_NAME , FROM  RDB$REF_CONSTRAINTS C ,  RDB$RELATION_CONSTRAINTS F ,  RDB$RELATION_CONSTRAINTS T WHERE  C . RDB$CONSTRAINT_NAME  =  F . RDB$CONSTRAINT_NAME  AND       T . RDB$CONSTRAINT_NAME  =  C . RDB$CONST_NAME_UQ  AND        UPPER ( F . RDB$CONSTRAINT_NAME )   LIKE   UPPER ( '%KCSR%' ) ORDER   BY  F . RDB$RELATION_NAME ,  T . RDB$RELATION_NAME; Смысл этого запроса следующий: таблица RDB$RELATION_CONSTRAINTS содержит все имена constraints, включая первичные и вторичные ключи. Таблица RDB$REF_CONSTRAINTS содержит список всех вторичных ключей. Задача – вытащить имена таблиц и имена ссылающихся на них таблиц, пр...

АЦК. Сессии пользователей

-- количество сессий по СП/tomcat SELECT   COUNT ( * ) , server_host , server_port  FROM  usersession  WHERE  close_time  IS   NULL   AND  sysuser_id  <>   - 99999   GROUP   BY  server_host , server_port  ORDER   BY  server_port;  -- всего пользователей SELECT   COUNT ( * )   FROM  usersession  WHERE  close_time  IS   NULL   AND  sysuser_id  <>   - 99999  ; /* Открыть сессии пользователя (Сервис - ...) */ select s.id, sysuser_id, budget_id, work_date, server_host, server_port, client_host, client_port, open_time, usacc.access_time, usacc.request_count,    b.caption, u.username, o.caption org_caption, u.realname, s.auth_types from usersession s    left join usersessionaccess usacc on usacc.id = s.id    left join budget b on b.id = budget_id    left jo...

Проверка КЦСР на соответствие Приказу Минфина от 08.06.2018 №132

Ссылка на статью  по этому приказу. Скрипты для проверки: /* Проверка РУС */ SELECT   *   FROM  kcsr k WHERE   ( k . parent_code  LIKE   '%А%'   OR  k . parent_code  LIKE   '%Е%'   OR  k . parent_code  LIKE   '%Т%'   OR  k . parent_code  LIKE   '%Р%' ) OR   ( k . code  LIKE   '%А%'   OR  k . code  LIKE   '%Е%'   OR  k . code  LIKE   '%Т%'   OR  k . code  LIKE   '%Р%' ) ; Обратная проверка /* Проверка ЛАТ */ SELECT   *   FROM  kcsr k WHERE   ( k . parent_code  LIKE   '%A%'   OR  k . parent_code  LIKE   '%E%'   OR  k . parent_code  LIKE   '%T%'   OR  k . parent_code  LIKE   '%P%' ) OR   ( k . code  LIKE   '%A%'   OR  k . code  LIKE   '%E%'   OR ...