从.net调用postgres函数时出现问题

yrwegjxp  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(183)

我在postgresql中有一个关日函数

CREATE OR REPLACE FUNCTION transactions.start_eod_operation(
    value_date_ date,
    user_id_ integer)
    RETURNS void
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
BEGIN
    IF NOT EXISTS(SELECT * FROM core.day_operation WHERE is_eod_completed = false AND value_date = value_date_) THEN
        RAISE EXCEPTION 'BOD for this date was never started.';
    END IF;

    IF EXISTS(SELECT * FROM transactions.transactions WHERE verification_status_id = 0) THEN
        RAISE EXCEPTION 'Voucher(s) pending for verification, cannot perform EOD!';
    END IF;

    DELETE FROM history.balance_holder WHERE value_date::date = value_date_;
    INSERT INTO history.balance_holder(office_id, account_number_id, value_date, balance, minimum_balance, audit_user_id)
    SELECT 1, t.account_number_id, value_date_, SUM(COALESCE(t.credit,'0') - COALESCE(t.debit, '0')), p.minimum_balance, user_id_
    FROM deposit.transaction_view t
    INNER JOIN deposit.account_holders a ON a.account_number_id = t.account_number_id
    INNER JOIN core.deposit_products p ON a.deposit_product_id = p.deposit_product_id
    WHERE t.value_date <= value_date_
    GROUP BY  t.account_number_id, p.minimum_balance;

    PERFORM deposit.post_interest_transit(value_date_, user_id_);

    PERFORM deposit.auto_transfer_interest(value_date_, user_id_);

    PERFORM deposit.auto_transfer_fd($1, $2);

    PERFORM loan.post_interest_transit(value_date_);

    UPDATE core.day_operation SET is_eod_completed = true, eod_started_on=NOW(), eod_user_id = user_id_ WHERE value_date = value_date_;

END
$BODY$;

当用户从软件开始日关闭过程时
执行存款、过息、转帐(价值、日期、用户id);此函数或此函数中的命令每天运行两次,而不是每天在连接或服务器计算机性能出现问题或在正常情况下运行。在这里面执行存款。过帐利息运输(价值日期,用户id);函数有删除命令,如果当天有数据存在,只开始插入命令,但在表中插入2次。如果我直接从数据库运行这个函数两次或多次,没有任何问题。这个postgres bug或web浏览器bug是什么解决方案?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题