我如何在 PostgreSQL 过程中调用 json 参数

How can i call json parameter In PostgreSQL Procedure

Postgressql - 14 我如何在 PostgreSQL 存储过程中调用 json 参数,当我这样做时我收到了这些错误

-- Table

CREATE TABLE tbl_user (
        pk_user_id BIGSERIAL PRIMARY KEY,

        vhr_name VARCHAR(100) NOT NULL,
        vhr_password VARCHAR(500) NULL,
    
        sin_record_status SMALLINT DEFAULT 1
);

-- 程序

CREATE OR REPLACE PROCEDURE sp_add_users(arrJsnUsers JSON[]) AS $$
DECLARE
    intSpStatus INT;
BEGIN
    BEGIN
        INSERT INTO tbl_user
            (vhr_name, vhr_password, sin_record_status)
        VALUES
            (arrJsnUsers.strName, arrJsnUsers.strPassword, arrJsnUsers.intRecordStatus);

        COMMIT;
        intSpStatus = 1;
        RAISE INFO '% User Created...', arrJsnUsers.strName;
        
    EXCEPTION WHEN others THEN
        ROLLBACK;
        intSpStatus = -1;
        RAISE EXCEPTION '% User Insertion Faild...', arrJsnUsers.strName;
    END;
END;
$$ LANGUAGE plpgsql;

-- 过程调用

CALL sp_add_users('[{"strName":"ASD", "strPassword":"asd123", "intRecordStatus":1}, {"strName":"XYZ", "strPassword":"XYZ123", "intRecordStatus":1}]'::JSON[]);

--错误

ERROR:  malformed array literal: "[{"strName":"ASD", "strPassword":"asd123", "intRecordStatus":1}, {"strName":"XYZ", "strPassword":"XYZ123", "intRecordStatus":1}]"
LINE 1: CALL sp_add_users('[{"strName":"ASD", "strPassword":"asd123"...
                      ^
DETAIL:  "[" must introduce explicitly-specified array dimensions.
SQL state: 22P02
Character: 19

您可能会将 Postgres 数组与 JSON 数组混淆。如果要使用 JSON 数组,正确的数据类型是 json,而不是 json[]

select '[{"foo":"bar"}]'::json

如果你真的想要一个 JSON 对象的 Postgres 数组,正确的初始化方法是:

select array['{"foo":"bar"}']::json[]