Звучит так, как будто вы хотите синхронизировать данные между SQL * Server и Oracle. Лучший способ - использовать коммерческий продукт, который делает это. Я разработал некоторые процедуры в нашем магазине, которые делают это, но это не тривиально.
Самый простой способ сделать это, если у вас есть восходящий UID. Запишите наибольшее значение в таблицу в конце синхронизации. В следующий раз, когда вы запустите синхронизацию, начните с> уникального значения.
Я стараюсь избегать курсоров, я использую insert / select. Их гораздо проще кодировать, они работают очень быстро и не работают как единое целое. Я копирую 600K записей каждые 4 часа из Oracle на SQL Server.
Пример ниже - T SQL и выполняется с SQL Server. Этот же код легко переводится в PL / SQL, если вам нужно выполнить из Oracle. Я сделал это обоими способами.
- @ last_loaded - отследить самый высокий идентификатор, который был загружен в базы данных
- tracker_table - таблица, используемая для хранения значений last_loaded.
- load_type = 2 - таблица отслеживания может использоваться для отслеживания идентификаторов для различных нагрузок.
- oracledb .. - имя сервера SQL Server, связанного с Oracle
- COPYSCHEMA - имя схемы, содержащей таблицу Oracle. ВСЕГДА УКАЗАТЬ!
COPYTABLE - имя таблицы Oracle, из которой мы копируем
- Пример кода
DECLARE @last_loaded INT;
SELECT last_loaded
INTO @last_loaded
FROM tracker_table
WHERE load_type = '2';
INSERT INTO LOAD_TABLE ( ID
, COLUMNA
, COLUMNB
, COLUMNC )
SELECT ID
, columna
, columnb
, columnc
FROM oracledb..COPYSCHEMA.COPYTABLE
WHERE ID > coalesce(@last_loaded, 0);
SELECT MAX(LAST_LOADED)
INTO @last_loaded
FROM LOAD_TABLE;
UPDATE TRACKER_TABLE
SET
LAST_LOADED = @last_loaded
WHERE LOAD_TYPE = 2;