hun*_*rex 6 sql postgresql plpgsql pgadmin
我有一个在 pgadmin 中运行的命令,如下所示:
SELECT format('SELECT * FROM %I.%I CROSS JOIN LATERAL json_to_record(%I::json) AS rs(%s)', 'public', 'vehicles', 'column_A', array_to_string(
(SELECT ARRAY(SELECT DISTINCT col FROM vehicles CROSS JOIN LATERAL json_object_keys(column_A::json) AS t(col) ORDER BY col)), ' text , '
) || ' text')
Run Code Online (Sandbox Code Playgroud)
它打印以语句开头的字符串 SELECT。
如何直接从返回的字符串中获取查询结果FORMAT?
我尝试过类似的事情:
DO
$$
WITH str as( SELECT format('SELECT * FROM %I.%I CROSS JOIN LATERAL json_to_record(%I::json) AS rs(%s)', 'public', 'vehicles', 'column_A', array_to_string(
(SELECT ARRAY(SELECT DISTINCT col FROM vehicles CROSS JOIN LATERAL json_object_keys(column_A::json) AS t(col) ORDER BY col)), ' text , '
) || ' text'))
BEGIN EXECUTE str;
END
$$
Run Code Online (Sandbox Code Playgroud)
但是,我收到一条错误消息:
错误:“WITH”处或附近的语法错误
我在这里错过了什么?请指教!!
结合以下专家的回答,更新版本如下,供以后参考:
do $$
DECLARE
query text;
begin
query := format('SELECT * FROM %I.%I CROSS JOIN LATERAL json_to_record(%I::json) AS rs(%s)', 'public', 'vehicles', 'column_A', array_to_string(
(SELECT ARRAY(SELECT DISTINCT col FROM vehicles CROSS JOIN LATERAL json_object_keys(column_A::json) AS t(col) ORDER BY col)), ' text , '
) || ' text');
execute format('create or replace temp view tmp_view_vehicles as %s', query);
end $$;
select * from tmp_view_vehicles;
Run Code Online (Sandbox Code Playgroud)
谢谢大家以及你们的耐心!
如果您不想创建存储函数但想使用匿名do块获取结果,那么您可以使用临时视图:
do $$
begin
execute format('create or replace temp view tmp_view_123 as select ...', ...);
end $$;
select * from tmp_view_123;
Run Code Online (Sandbox Code Playgroud)
创建的视图仅对当前会话可见。
| 归档时间: |
|
| 查看次数: |
1945 次 |
| 最近记录: |