我将JSON值作为枚举存储到我的表中时遇到问题。我的功能如下:
CREATE TYPE public.alertcategory AS ENUM
('All', 'Network', 'System');
CREATE OR REPLACE FUNCTION updateEventTable(inputdata json)
RETURNS void AS $$
DECLARE
alcategory text;
BEGIN
alcategory := inputdata ->'alertCategory';
INSERT INTO "MyTable" ("ALERT_CATEGORY")
values (alcategory ::alertcategory);
END;
$$
LANGUAGE PLPGSQL;
下面是我在参数字段中使用JSON字符串的存储过程调用
SELECT * from updateEventTable('{"alertCategory": "System"}');
我想存储价值"系统"以枚举进入我的表格。
类型为ALERT_CATEGORY
的表MyTable
中的alertcategory
字段。
执行存储过程后出错:
错误:枚举alertcategory的输入值无效:"字符串"
请告诉我这里可以使用哪些JSON帮助函数。
答案 0 :(得分:1)
您必须使用->
运算符替换->>
运算符,该运算符为您提供TEXT
而不是JSON字符串:
CREATE OR REPLACE FUNCTION updateEventTable(inputdata json)
RETURNS void AS $$
DECLARE
alcategory text;
BEGIN
alcategory := inputdata ->>'alertCategory';
INSERT INTO "MyTable" ("ALERT_CATEGORY")
values (alcategory ::alertcategory);
END;
$$
LANGUAGE PLPGSQL;
应该有效。注意:
inputdata ->'alertCategory'
在
时返回"System"
inputdata ->>'alertCategory'
返回System
(不带双引号)。