gpt4 book ai didi

sql - 在 postgres 的存储过程中将查询传递给 row_to_json 函数

转载 作者:行者123 更新时间:2023-11-29 13:49:26 31 4
gpt4 key购买 nike

我正在尝试编写一个存储过程,我将查询传递到一个存储过程,该存储过程将在内部调用 row_to_json 函数。我们有多个 DBMS(Oracle、SQL Server 和 postgres),并希望编写一个通用过程来充当 json 处理函数的包装器。

我正在看这样的东西

CREATE OR REPLACE FUNCTION proj.sql_row_to_json(sql_t text)
RETURNS json
LANGUAGE sql
AS $function$
with t as (select sql_t )
select row_to_json(t) from t;
$function$

我会在我的应用程序中调用函数

select SQL_ROW_TO_JSON('<sql query>') -> 应该跨不同的数据库工作

但是上面的过程给了我下面的结果而不是实际数据。

select SQL_ROW_TO_JSON('SELECT id,name FROM emp')

{"sql_t":"SELECT id,name FROM emp"}

最佳答案

你必须使用 plpgsql 和 dynamic sql .

create or replace function sql_row_to_json(sql_t text)
returns json language plpgsql as $function$
declare rslt json;
begin
execute
format($ex$
select json_agg(row_to_json(t))
from (%s) t
$ex$, sql_t)
into rslt;
return rslt;
end;
$function$;

select sql_row_to_json('select 1 as id, ''abcd'' as value');

sql_row_to_json
-------------------------
{"id":1,"value":"abcd"}
(1 row)

请注意,该函数容易出现 SQL-injection attacks .

关于sql - 在 postgres 的存储过程中将查询传递给 row_to_json 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43557703/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com