我已经在支持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')));
好的,所以问题可能出在这里,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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句