РЕДАКТИРОВАТЬ: я неправильно понял вопрос ОП. Он искал решение, в котором обе таблицы получали бы один и тот же порядковый номер для каждой строки (я думаю, что ответили в комментариях) Этот ответ показывает, как получить уникальную последовательность для всей загрузки. Хотя это и не ответ, я думаю, что информация будет полезна, поэтому я оставлю ее.
Как вы уже узнали, вызов вашего sequence.nextval в управляющем файле приводит к тому, что он увеличивается для каждой загруженной строки. Хитрость заключается в том, чтобы вызвать пакет, который устанавливает значение один раз при создании экземпляра, а затем вызвать функции пакета, которые возвращают значения для каждой загруженной строки. Так как я уже настроил это для своих нагрузок, я поделюсь с вами тем, что сделал с объяснением. Наши загрузки добавляют в таблицы load_date и load_sequence_id, так что вы увидите это в этих примерах. Предполагается, что читатель уже понимает структуру пакета, поскольку это слишком много, чтобы объяснить здесь, не путая главный вопрос.
Вам нужно будет создать последовательность (у вас уже есть) и пакет. Пакет содержит 2 переменные для хранения load_date и load_seq_id, 2 функции «getter» для их возврата и код для их установки при создании экземпляра. Затем ваш управляющий файл вызовет функции «getter», чтобы вернуть load_date и load_seq_id из пакета, которые будут одинаковыми для каждой строки.
Итак, при запуске загрузки, когда первая строка для загрузки вызывает Функция, чтобы получить последовательность, экземпляр пакета и дата и последовательность устанавливаются, а затем возвращаются. Пока сеанс активен, с этого момента дата / последовательность не будут меняться, и последующие вызовы функций-получателей будут возвращать те же значения.
Пакет spe c и тело:
CREATE OR REPLACE PACKAGE SCHEMA.LOAD_SEQ AS
/******************************************************************************
NAME: LOAD_SEQ
PURPOSE: Sets unique load_date and Load_seq_id per session when
the package is instantiated. Package functions are
intended to be called from control files so all rows in a
file load will have the same load_date and
load_seq_id.
When the functions are called, the package is instantiated and
the code at the bottom is run once for the session, setting the
load_date and load_seq_id. The functions simply return the values
which will remain the same for that session.
load_date date "MM/DD/YYYY" "to_char(trunc(schema.load_seq.get_load_date), 'mm/dd/yyyy')",
load_seq_id decimal external "schema.load_seq.get_load_seq_id"
(each row then has the same load_seq_id).
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2/20/2017 Gary_W 1. Created this package.
******************************************************************************/
NEXT_LOAD_SEQ_ID NUMBER;
NEXT_LOAD_DATE DATE;
FUNCTION GET_LOAD_SEQ_ID
RETURN NUMBER;
FUNCTION GET_LOAD_DATE
RETURN DATE;
END THC_LOAD_SEQ;
/
CREATE OR REPLACE PACKAGE BODY SCHEMA.LOAD_SEQ AS
/******************************************************************************
NAME: GET_LOAD_SEQ_ID
PURPOSE: Return the package variable LOAD_SEQ.NEXT_LOAD_SEQ_ID
which is set when the package is instantiated. It does not
change during the session.
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2/20/2017 Gary_W 1. Created this package.
******************************************************************************/
FUNCTION GET_LOAD_SEQ_ID
RETURN NUMBER IS
BEGIN
RETURN LOAD_SEQ.NEXT_LOAD_SEQ_ID;
END GET_LOAD_SEQ_ID;
/******************************************************************************
NAME: GET_LOAD_DATE
PURPOSE: Return the package variable LOAD_SEQ.NEXT_LOAD_DATE
which is set when the package is instantiated. It does not
change during the session.
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 2/20/2017 Gary_W 1. Created this package.
******************************************************************************/
FUNCTION GET_LOAD_DATE
RETURN DATE IS
BEGIN
RETURN LOAD_SEQ.NEXT_LOAD_DATE;
END GET_LOAD_DATE;
BEGIN
-- Code outside of the procedures/functions defined in the spec runs
-- once on instantiation of the package, when the package is first called by the session.
-- It sets the package variables which then do not change during the life of the session.
SELECT SYSDATE, partnersequence.NEXTVAL
INTO LOAD_SEQ.NEXT_LOAD_DATE, LOAD_SEQ.NEXT_LOAD_SEQ_ID
FROM DUAL;
END LOAD_SEQ;
/
В вашем контрольном файле:
LOAD_DATE date "MM/DD/YYYY" "to_char(trunc(schema.load_seq.get_load_date), 'mm/dd/yyyy')"
cust_ref_col "decimal external "schema.load_seq.get_load_seq_id""