PostgreSQL 动态查询通过函数中的 2 个参数将 json string(text) 插入到 table(text)
PostgreSQL Dynamic query to insert a json string(text) to table(text) by 2 param in function
我在调用带有 2 个参数作为文本的函数以使其成为动态函数时遇到问题 SQL。问题是第一个参数有引号 ' 所以我的动态查询失败了。这是我的代码:
CREATE OR REPLACE FUNCTION "dbo"."sp_insertbulk"("tablename" text, "jsonitem" text)
RETURNS SETOF "pg_catalog"."void" AS $BODY$
BEGIN
EXECUTE ('INSERT INTO '|| ||' SELECT * FROM json_populate_recordset(null::'|| ||','''|| ||'''::json)');
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
我也尝试使用 Format():
EXECUTE FORMAT('INSERT INTO %I SELECT * FROM json_populate_recordset(null::%I , %I::json)',,,);
但这会使我的 jsonitem 参数不可读
({""ShortName"":""abc"",""Name"":""abc"",""Slogan"":""abc"" )
您应该使用 quote_ident()
或 %I
作为列名,使用 quote_nullable()
或 %L
作为值。
请参阅 Postgres 文档中的 Executing Dynamic Commands。
我在调用带有 2 个参数作为文本的函数以使其成为动态函数时遇到问题 SQL。问题是第一个参数有引号 ' 所以我的动态查询失败了。这是我的代码:
CREATE OR REPLACE FUNCTION "dbo"."sp_insertbulk"("tablename" text, "jsonitem" text)
RETURNS SETOF "pg_catalog"."void" AS $BODY$
BEGIN
EXECUTE ('INSERT INTO '|| ||' SELECT * FROM json_populate_recordset(null::'|| ||','''|| ||'''::json)');
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
我也尝试使用 Format():
EXECUTE FORMAT('INSERT INTO %I SELECT * FROM json_populate_recordset(null::%I , %I::json)',,,);
但这会使我的 jsonitem 参数不可读
({""ShortName"":""abc"",""Name"":""abc"",""Slogan"":""abc"" )
您应该使用 quote_ident()
或 %I
作为列名,使用 quote_nullable()
或 %L
作为值。
请参阅 Postgres 文档中的 Executing Dynamic Commands。