PostgreSQL 14存储过程插入JSON数据报错:列'code'不存在
PostgreSQL存储过程JSON插入报错:column "code" does not exist 解决方法
错误根源是你引用JSON对象键时的语法错误:jsnBranch->>code里的code会被PostgreSQL当作数据库列名解析,而非JSON的键名,因此触发“column 'code' does not exist”错误。
修正后的存储过程代码,只需把JSON键名用单引号包裹:
CREATE OR REPLACE PROCEDURE sp_insert_or_update_branch(jsnBranch JSONB, jsnSqlRes OUT JSON) AS $$ DECLARE objSpOutRes TYP_SP_OUT_RES; objFnCheckRes TYP_FN_CHECK_RES; BEGIN INSERT INTO organization.tbl_branch (fk_company_id, vhr_branch_code, vhr_branch_name, ars_product_ids) VALUES(1, jsnBranch->>'code', jsnBranch->>'name', '{1}'); -- 给JSON键名添加单引号 --COMMIT; objSpOutRes.binSqlPk := 1::BIGINT; objSpOutRes.sinSqlCustomStatus := 1::SMALLINT; objSpOutRes.strSqlCustomStatusCode := 'SUCCESS'; objSpOutRes.strSqlCustomMessage := 'Branch Saved'; SELECT * FROM fn_convert_type_out_object_to_out_json(objSpOutRes) INTO jsnSqlRes; RAISE NOTICE 'jsnSqlRes: %', jsnSqlRes; END; $$ LANGUAGE plpgsql;
补充说明
PostgreSQL中,->>操作符用于提取JSON对象的文本值,后面必须跟带单引号的字符串字面量作为键名。如果不加单引号,PostgreSQL会尝试将其识别为数据库中的标识符(如表列名),这就是报错的核心原因。
内容的提问来源于stack exchange,提问作者C47_C0D3R
相关产品推荐
相关产品推荐

