Я создал процедуру из запросов к другим таблицам, включая транзакцию tbl, для сопоставления всех записей транзакций со ссылочным номером и автоматически отмеченной датой.
Я пытаюсь сгенерировать мою settle_transaction
процедурумой запрос из выбранного оператора и вставить их в таблицу расчетов.Между тем, мне также нужно update
ref_num и обработанная дата как «штамп» к таблице транзакций, чтобы у меня не было дублированного расчета при повторном вызове процедуры.В противном случае, я не знаю, как прекратить показывать одни и те же данные расчета дважды
Ниже приведена процедура вывода таблицы расчета и структуры, аналогичной приведенной ниже:
BEGIN
for r_client in
(
select clientid,
client_name, sum(transaction) total_amount
from transaction_tbl tran join terminal_tbl term
on tran.terminalid = term.terminalid join client_tbl c on c.clientid = term.clientid
where refnr is null
)
loop
v_refnr := get_refnr;
insert into settlement_tbl
(
Ref_Num,
Total,
CLIENTID,
TITLE,
processeddate
)
values (v_refnr, total_amount, clientid,
name,sysdate);
update_refnr(v_refnr, sysdate)
end loop;
END
Вывод:
| reference_num | total amount | client id | client name | processed_date |
|---------------|--------------|-----------|-------------|----------------|
Когда я выполняю описанную выше процедуру, он заполняет все результаты запроса select.Тем не менее, если я выполню снова, он будет дублировать тот же результат, особенно общую сумму.
Я ищу решение, чтобы поместить другую процедуру / функцию в эту процедуру расчета, чтобы предотвратить дублирование записей из выбранного запроса в этом
Я использую ref. no#
и process_date
для обновления существующего ссылочного номера и даты до транзакции, показанной ниже.
| transaction_num | transaction amount | reference_num | processed_date |
|-----------------|--------------------|---------------|----------------|
Вот код попытки, который я поместил внутрипроцедура расчета, но все еще показывает дублированные записи и не может обновиться до транзакции tbl.
procedure update_refnr(
p_refnr in number,
p_processeddate in date
)
is
begin
UPDATE TRANSACTION t
SET t.refnr = p_refnr
WHERE EXISTS (SELECT p_processeddate
FROM terminal_tbl
WHERE t.TERMINALID= term.TERMINALID
AND t.processeddate = p_processeddate
AND t.refnr IS NULL);
--exception handling below
end update_refnr;
Я также пробовал другой SQL ссылка , но не может скомпилировать.
В идеале,У меня нет дублированных записей в моей таблице расчетов при извлечении каждой записи из моей хранимой процедуры.