Извлечь изменил данные для таблицы в Oracle Database на CSV - PullRequest
0 голосов
/ 24 октября 2019
  • Мне нужно получить измененные данные для таблицы в Oracle. Нужна помощь с sql query, который будет извлекать только измененные данные каждые 20 минут.

  • Или есть другой способ для этого, где мы можем получить измененные данные?

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

Вам нужен столбец last_updated типа datetime / date в вашей таблице. Затем, чтобы получить обновление за последние 20 минут, запрос может выглядеть следующим образом.


select t.*
from table t
where t.last_updated >= sysdate - 20/(24*60)

, где t - ваше имя таблицы, а last_updated - последнее обновленное время и дата.

0 голосов
/ 24 октября 2019

Если у вас нет способа определить, когда строки в таблице изменяются, вы можете использовать запрос флешбэка в вашей базе данных (если он настроен на его поддержку).

Чтобы получить новые / измененные строки:

SELECT *
FROM   table_name
MINUS
SELECT *
FROM   table_name AS OF TIMESTAMP( SYSTIMESTAMP - INTERVAL '20' MINUTE )

и получить удаленные строки:

SELECT *
FROM   table_name AS OF TIMESTAMP( SYSTIMESTAMP - INTERVAL '20' MINUTE )
WHERE  primary_key_column NOT IN ( SELECT primary_key_column FROM table_name )
0 голосов
/ 24 октября 2019

Если вы знаете, как обнаружить «только измененные данные» - я полагаю, у вас должен быть какой-то столбец «отметки времени» - тогда это будет

select columns
from your_table
where timestamp_column >= sysdate - 20/(24*60);

из-за этого: 20 минут / (24 часа в день * 60 минут в час)

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss'

Session altered.

SQL> select sysdate right_now,
  2         sysdate - 20/(24*60) twenty_minutes_ago
  3  from dual;

RIGHT_NOW           TWENTY_MINUTES_AGO
------------------- -------------------
24.10.2019 08:40:18 24.10.2019 08:20:18

SQL>

Как создать CSV?

Один из вариантов - сохранить ваш запрос в .SQLфайл и использовать планировщик задач операционной системы (для MS Windows) или cron (для Unix) или любой другой операционной системы. Пусть скрипт спул результат. Существует множество опций SQL * Plus SET, которые вы можете использовать, чтобы сделать вывод красивым;например:

set termout off 
set trimspool on 
set echo off 
set verify off 
set autoprint off 
set serveroutput off 
set arraysize 1000 
set pagesize 0
set linesize 100
set long 10000
set numwidth 10
set feedback off
set colsep ';'
col empno format 99999
col ename format a10
col sal format 999G990
spool emps.txt
select empno, ename, sal from emp
where timestamp_column >= sysdate - 20/(24*60);
spool off

Другой вариант - создать хранимую процедуру, которая будет использовать пакет UTL_FILE, и создать этот файл в каталоге (вам придется поговоритьвашему администратору базы данных об этом, обычно - на сервере базы данных; администратор базы данных должен создать каталог (как объект Oracle) и предоставить вам права на чтение / запись).

ЗатемВы должны создать задание базы данных (используя пакеты DBMS_JOB или DBMS_SCHEDULER), планируя его запуск каждые 20 минут.


Возможно, первый вариант проще реализовать;если ничего другого, CSV создается на вашем локальном компьютере, а не на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...