从 postgres 函数中动态创建的变量中获取结果集

Get result set out of a dynamically created variable in a postgres function

提问人:Inbalza 提问时间:11/7/2023 更新时间:11/7/2023 访问量:32

问:

我正在尝试创建一种为数据库中任何表中的记录生成 INSERT 语句的方法。 我已经创建了一个函数,用于生成最终将返回所需结果集的动态代码。 但是,我被困在将此变量执行到结果集中的阶段。 此函数调用创建动态代码变量的另一个函数:

CREATE OR REPLACE FUNCTION dbo.script_insert3(
    v_table_name character varying,
    v_where_clause character varying)
    RETURNS table(c1 text)
    LANGUAGE 'plpgsql'
AS $BODY$
declare v_cmd varchar(4000);
BEGIN         
    select dbo.script_insert2(v_table_name,v_where_clause) into v_cmd;  
    return query execute v_cmd;
END; 
$BODY$; 

插入到v_cmd中的字符串为:

select 'insert into dbip(dbipserver,dbipsubnet) values(',dbo.quotenamemax(dbipserver),',',dbo.quotenamemax(dbipsubnet),');' from dbip ;

当我这样运行它时:

select dbo.script_insert3('dbip','');

我收到错误:

ERROR:  Number of returned columns (5) does not match expected column count (1).structure of query does not match function result type 

我尝试使用返回类型 - record、setof record、void...... 但我似乎无法得到我想要的结果,即:

insert into dbip(dbipserver,dbipsubnet) values( '10.0.0.0'  ,   '255.255.255.0' );
insert into dbip(dbipserver,dbipsubnet) values( '10.0.1.0'  ,   '255.255.255.0' );

请帮忙。

PostgreSQL pgadmin

评论


答: 暂无答案