我在支持 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","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":"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","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}]')), (('[{"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/