bigint不支持JSON

耶万·加蒂(Jeevan Gharti)

我已经在支持JSON的postgresql中创建了函数。当插入查询中没有bigint数据时,它可以正常工作,但是当check_number列中存在bigint数据时,它会失败。数据库表中存在bigint数据类型。我在pgsql中的功能如下:

    CREATE OR REPLACE FUNCTION transactions.post_transaction(
    tran_ json,
    detail_ json,
    share_tran_ json)
  RETURNS bigint[] AS
$BODY$
    DECLARE r           transactions.tran_type;
    DECLARE _tran_id    bigint;
    DECLARE _tran_ids   bigint[];
BEGIN

    FOR r IN SELECT * FROM json_populate_recordset(null::transactions.tran_type, $1)
    LOOP

        INSERT INTO transactions.transactions(
            office_id, tran_date, value_date, book_name, collector_id, 
            total_amount, teller_id, is_auto_payment, is_compounded, is_flagged, instrument_id, 
            instrument_number, verification_status_id, verified_by_user_id, audit_user_id, collection_sheet_id,
            loan_receipt_id, loan_reimburse_id, cash_transfer_id, remittance_id, standing_instruction_id, ibt_tran_id
        )
        SELECT r.office_id, r.tran_date, r.value_date, r.book_name, r.collector_id, 
            r.total_amount, r.teller_id, r.is_auto_payment, r.is_compounded, false, r.instrument_id, 
            r.instrument_number, r.verification_status_id, r.verified_by_user_id, r.teller_id, r.collection_sheet_id,
            r.loan_receipt_id, r.loan_reimburse_id, r.cash_transfer_id, r.remittance_id, r.standing_instruction_id, r.ibt_tran_id;

        SELECT CURRVAL('transactions.transactions_tran_id_seq') INTO _tran_id;
        IF _tran_ids IS NULL THEN
        _tran_ids := array[_tran_id];

        ELSE
            _tran_ids := _tran_ids || _tran_id;
        END IF;


        INSERT INTO transactions.transaction_details(
            tran_id, account_number_id, loan_id, gl_account_id, share_account_id, repository_id,is_interest, 
            slip_number, check_number, is_loan_collection, debit, credit, statement_reference, audit_user_id, deno_id, ref_dep_ac_id)

        SELECT _tran_id, td.account_number_id, td.loan_id, td.gl_account_id, td.share_account_id, td.repository_id, td.is_interest, 
            td.slip_number, td.check_number, td.is_loan_collection, td.debit, td.credit, td.statement_reference, r.teller_id, td.deno_id, td.ref_dep_ac_id
        FROM json_populate_recordset(null::transactions.tran_detail_type, $2) td
        WHERE td.office_id = r.office_id;

        INSERT INTO transactions.share_transaction(tran_id, share_account_id, kitta_from, kitta_to, audit_user_id)
        SELECT tran_id, share_account_id, kitta_from, kitta_to, audit_user_id
        FROM json_populate_recordset(null::transactions.share_tran_type, null) s
        WHERE s.office_id = r.office_id;
    END LOOP;

    RETURN _tran_ids;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION transactions.post_transaction(json, json, json)
  OWNER TO postgres;}

Json返回如下查询

选择* FROM transaction.post_transaction(((((('[{“ audit_user_id”:13000057,“ book_name”:“提现”,“ cash_transfer_id”:null,“ collection_sheet_id”:null,“ collector_id”:15000089,“ flagged_by_user_id”:null, “ ibt_tran_id”:null,“ instrument_id”:null,“ instrument_number”:null,“ is_auto_payment”:null,“ is_compounded”:null,“ is_flagged”:false,“ loan_receipt_id”:null,“ loan_reimburse_id”:null,“ “:3,” reference_number“:” 8001061713“,” remittance_id“:null,” standing_instruction_id“:null,” statement_reference“:null,” teller_id“:13000057,” total_amount“:15000,” tran_date“:” 4/22 / 2016 12:00:00 AM“,” tran_id“:0,“ value_date”:“ 4/22/2016 12:00:00 AM”,“ verification_status_id”:1,“ verified_by_user_id”:0},{“ audit_user_id”:13000057,“ book_name”:“提款”,“ cash_transfer_id”: null,“ collection_sheet_id”:null,“ collector_id”:15000089,“ flagged_by_user_id”:null,“ ibt_tran_id”:null,“ instrument_id”:null,“ instrument_number”:null,“ is_auto_payment”:null,“ is_compounded”:null, “ is_flagged”:false,“ loan_receipt_id”:null,“ loan_reimburse_id”:null,“ office_id”:16,“ reference_number”:“ 8001061713”,“ remittance_id”:null,“ standing_instruction_id”:null,“ statement_reference”:null, “ teller_id”:13000057,“总计”:15000,“ tran_date”:“ 4/22/2016 12:00:00 AM”,“ tran_id”:0,“ value_date”:“ 4/22/2016 12:00:00 AM”,“ verification_status_id”:1,“ verified_by_user_id “:0}]')))((('[{[account_duration”:null,“ account_number_id”:13019905,“ audit_user_id”:13000057,“ check_number”:8001061713,“ credit”:null,“ debit”:15000, “ decimal_value”:0,“ deno_id”:null,“ gl_account_id”:4849,“ interest_rate”:null,“ is_interest”:false,“ is_loan_collection”:false,“ is_overdraft”:null,“ loan_days”:null,“ loan_id” “:null,” loan_receipt_type“:null,” office_id“:3,” ref_dep_ac_id“:null,” repository_id“:null,” share_account_id“:null,”slip_number“:空,” statement_reference“:”自行“,” tran_id“:0,” transaction_detail_id“:0},{” account_duration“:空,” account_number_id“:空,” audit_user_id“:13000057,” check_number“: null,“信用”:15000,“借方”:null,“十进制值”:0,“ deno_id”:null,“ gl_account_id”:4797,“ interest_rate”:null,“ is_interest”:false,“ is_loan_collection”:false, “ is_overdraft”:null,“ loan_days”:null,“ loan_id”:null,“ loan_receipt_type”:null,“ office_id”:3,“ ref_dep_ac_id”:null,“ repository_id”:null,“ share_account_id”:null,“ slipnumber” “:null,” statement_reference“:”自行“,” tran_id“:0,”transaction_detail_id“:0},{” account_duration“:null,” account_number_id“:null,” audit_user_id“:13000057,” check_number“:null,” credit“:null,” debit“:15000,” decimal_value“:0,” deno_id“:null,” gl_account_id“:4801,” interest_rate“:null,” is_interest“:false,” is_loan_collection“:false,” is_overdraft“:null,” loan_days“:null,” loan_id“:null,” loan_receipt_type“ :null,“ office_id”:16,“ ref_dep_ac_id”:13019905,“ repository_id”:null,“ share_account_id”:null,“ slip_number”:null,“ statement_reference”:“由自己”,“ tran_id”:0,“ transaction_detail_id “:0},{” account_duration“:null,” account_number_id“:null,”audit_user_id“:13000057,“ check_number”:null,“ credit”:15000,“ debit”:null,“ decimal_value”:0,“ deno_id”:null,“ gl_account_id”:4781,“ interest_rate”:null,“ is_interest” :false,“ is_loan_collection”:false,“ is_overdraft”:null,“ loan_days”:null,“ loan_id”:null,“ loan_receipt_type”:null,“ office_id”:16,“ ref_dep_ac_id”:null,“ repository_id”:79 ,“ share_account_id”:null,“ slip_number”:null,“ statement_reference”:“通过自己”,“ tran_id”:0,“ transaction_detail_id”:0}]]')),(('null')));gl_account_id“:4781,” interest_rate“:null,” is_interest“:false,” is_loan_collection“:false,” is_overdraft“:null,” loan_days“:null,” loan_id“:null,” loan_receipt_type“:null,” office_id“ :16,“ ref_dep_ac_id”:null,“ repository_id”:79,“ share_account_id”:null,“ slip_number”:null,“ statement_reference”:“ by self”,“ tran_id”:0,“ transaction_detail_id”:0}]]' )), (('空值')));gl_account_id“:4781,” interest_rate“:null,” is_interest“:false,” is_loan_collection“:false,” is_overdraft“:null,” loan_days“:null,” loan_id“:null,” loan_receipt_type“:null,” office_id“ :16,“ ref_dep_ac_id”:null,“ repository_id”:79,“ share_account_id”:null,“ slip_number”:null,“ statement_reference”:“ by self”,“ tran_id”:0,“ transaction_detail_id”:0}]]' )), (('空值')));“ share_account_id”:null,“ slip_number”:null,“ statement_reference”:“ by self”,“ tran_id”:0,“ transaction_detail_id”:0}]')),(('null')));“ share_account_id”:null,“ slip_number”:null,“ statement_reference”:“ by self”,“ tran_id”:0,“ transaction_detail_id”:0}]')),(('null')));

克莱门特·普雷沃斯特(ClementPrévost)

好的,所以问题可能出在这里,json_populate_recordset(null::transactions.tran_detail_type, $2)因为这是您使用此特定json数据的唯一地方。

因此,这意味着在transactions.tran_detail_typecheck_number被声明为一个整数,而不是一个BIGINT。

如果我做对的话,这应该可以解决它:

ALTER TABLE transactions.tran_detail_type ALTER COLUMN check_number TYPE bigint;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章