我如何在 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[]
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[]