c# - 在 JSON 中不支持 bigint

标签 c# asp.net json postgresql

我在支持 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返回如下查询

SELECT * FROM transactions.post_transaction
((('[{"audit_user_id":13000057,"book_name":"Withdrawal","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":3,"reference_number":"8001061713","re​​mittance_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":"Withdrawal","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","re​​mittance_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}]')), (('[{"account_duration":null,"account_number_id":13019905,"audit_user_id":13000057,"check_number":8001061713,"credit":null,
"借方":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":null,
"statement_reference":"by self","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":4797,"interest_rate":null,"is_interest":false,"is_loan_collection":false,"is_overdraft “:空值,
"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":null,
"statement_reference":"by self","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":"by self","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":"by self","tran_id":0,"transaction_detail_id":0}]')), (('null' )));

最佳答案

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

所以这意味着在 transactions.tran_detail_type , check_number被声明为整数而不是 bigint。

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

ALTER TABLE transactions.tran_detail_type ALTER COLUMN check_number TYPE bigint;

关于c# - 在 JSON 中不支持 bigint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36819013/

相关文章:

c# - 时区信息对象

c# - 无法加载文件或程序集 CrystalDecisions.ReportAppServer.ClientDoc

javascript - 将 javascript 代码移动到设计 View 不起作用。仅代码隐藏 Attributes.Add ("onclick"有效。困惑

c# - 我可以在以下代码中传递 if 语句吗?如果没有,还有其他选择吗?

sql-server - 在变量中检索和使用 "FOR JSON"查询的输出

c# - xml 错误 : Object reference not set to an instance of an object after SelectSingleNode

c# - NLog 使用 WCF C#.NET 将对象写入数据库

html - 如何控制单选按钮列表控件的单选按钮之间的空间

javascript - 当嵌套函数仍在运行时暂停外部函数

java - 如何从 gson 生成的字符串中转义或删除 "\"?