postgresql将动态查询结果插入游标中的表

postgresql将动态查询结果插入游标中的表,postgresql,plpgsql,Postgresql,Plpgsql,我有下面的函数,它生成动态查询,最后我想将动态查询的结果插入到表中,但我得到的错误是` 该功能的主体是: CREATE OR REPLACE FUNCTION report_get_result ( datekey integer ) returns setof logic_result_rcd AS $body$ DECLARE LogicID integer; SheetName text; Row_ID text; Column_ID text; F

我有下面的函数,它生成动态查询,最后我想将动态查询的结果插入到表中,但我得到的错误是`

该功能的主体是:

CREATE OR REPLACE FUNCTION report_get_result (
datekey integer
) returns setof logic_result_rcd
AS
$body$
DECLARE
    LogicID integer;
    SheetName text;
    Row_ID text;
    Column_ID text;
    FromTable text;
    Operation text;
    Amount text;
    CriteriaType_1 text;
    Function_1 text;
    Criteria_1 text;
    CriteriaType_2 text;
    Function_2 text;
    Criteria_2 text;
    CriteriaType_3 text;
    Function_3 text;
    Criteria_3 text;
    sql text;
    INC Integer;
begin
 DROP TABLE IF EXISTS loans;
 create temp table loans as
 select * from loan.vfact_state_principal where "DateKey" = datekey;

 DECLARE cursor_logic REFCURSOR;
 BEGIN
 OPEN cursor_logic for execute ('SELECT "LogicID" FROM logic_table_rcd');
 LOOP
    FETCH cursor_logic INTO INC;
    if not found then exit;
    end if;
    BEGIN
 SELECT  LogicID = "LogicID"
            ,SheetName = "SheetName"
            ,Row_ID = "Row_ID"::text
            ,Column_ID = "Column_ID"::text
            ,FromTable = "FromTable"
            ,Operation = "Operation"
            ,Amount = "Amount"
            ,CriteriaType_1 = CASE WHEN "CriteriaType_1" <> '' THEN ('WHERE 
' || "CriteriaType_1") ELSE '' END
            ,Function_1 = CASE WHEN "Function_1" is null THEN 'Empty' ELSE 
"Function_1" END
            ,Criteria_1 = CASE WHEN "Criteria_1" is null THEN 'Empty' ELSE 
"Criteria_1" END
            ,CriteriaType_2 = CASE WHEN "CriteriaType_2" <> '' THEN ' AND ' 
|| "CriteriaType_2" ELSE '' END
            ,Function_2 = CASE WHEN "Function_2" is null THEN 'Empty' ELSE 
"Function_2" END
            ,Criteria_2 = CASE WHEN "Criteria_2" is null THEN 'Empty' ELSE 
"Criteria_2" END
            ,CriteriaType_3 = CASE WHEN "CriteriaType_3" <> '' THEN ' AND ' 
|| "CriteriaType_3" ELSE '' END
            ,Function_3 = CASE WHEN "Function_3" is null THEN 'Empty' ELSE 
"Function_3" END
            ,Criteria_3 = CASE WHEN "Criteria_3" is null THEN 'Empty' ELSE 
"Criteria_3" END
     FROM public.logic_table_rcd WHERE "LogicID" = INC;
     
sql:= 'INSERT INTO public.logic_result_rcd SELECT ' || INC::text || ', 1, ' 
|| EntityID::text || ', ' || DateKey::text || ', ' || 'RCD' || ', ' || 
SheetName::text || ', ' || Row_ID::text || ', ' || Column_ID::text || ', ' 
|| Operation || '(' || Amount || ')' || ' FROM ' || FromTable
    || CriteriaType_1 || ' ' || Function_1 || ' ' || Criteria_1
    || CriteriaType_2 || ' ' || Function_2 || ' ' || Criteria_2
    || CriteriaType_3 || ' ' || Function_3 || ' ' || Criteria_3;

RETURN QUERY EXECUTE sql;
END;
END LOOP;
CLOSE cursor_logic;
END;
END;

$body$

LANGUAGE plpgsql;
创建或替换函数报告\u获取\u结果(
日期键整数
)返回逻辑\u结果\u rcd的集合
作为
$body$
声明
逻辑标识整数;
图纸名称文本;
行标识文本;
列ID文本;
表格文本;
作业文本;
数量文本;
标准类型_1文本;
函数_1文本;
标准1文本;
标准类型_2文本;
函数2文本;
标准2文本;
标准类型_3文本;
函数3文本;
标准3文本;
sql文本;
INC整数;
开始
如果存在贷款,则删除表;
将临时表贷款创建为
选择*from loan.vfact\u state\u principal,其中“DateKey”=DateKey;
声明游标\u逻辑引用游标;
开始
打开用于执行的游标逻辑(“从逻辑表rcd中选择“LogicID”);
环
将游标逻辑读入INC;
如果没有找到,则退出;
如果结束;
开始
选择LogicID=“LogicID”
,SheetName=“SheetName”
,Row_ID=“Row_ID”::文本
,Column\u ID=“Column\u ID”::文本
,FromTable=“FromTable”
,Operation=“Operation”
,Amount=“Amount”
,CriteriaType_1=当“CriteriaType_1”时的情况,然后('WHERE
“| |”标准类型_1”)否则“”结束
,Function_1=当“Function_1”为空时,则为“Empty”,否则为空
“功能_1”结束
,Criteria_1=当“Criteria_1”为空时,则为空,否则为空
"准则1"完
,CriteriaType_2=当“CriteriaType_2”为“THEN”和“AND”时的情况
||“标准类型_2”其他“”结束
,Function_2=当“Function_2”为空时,则为“Empty”,否则为空
“功能2”结束
,Criteria_2=当“Criteria_2”为空时,则为“Empty”,否则为空
"准则2"完
,CriteriaType_3=当“CriteriaType_3”为“THEN”和“AND”时的情况
||“标准类型_3”其他“”结束
,Function_3=当“Function_3”为空时,则为空,否则为空
“功能_3”结束
,Criteria_3=当“Criteria_3”为空时,则为空,否则为空
"准则3"完
来自public.logic_table_rcd,其中“LogicID”=INC;
sql:=“INSERT INTO public.logic_result_rcd SELECT”| | INC::text | |,1,”
||EntityID::text | |'、'| | DateKey::text | |'、'| |'RCD'、'| |
SheetName::text | |','| |行ID::text | |','| |列ID::text | |','
||操作| |'(“| |金额| |')”| |“来自”| |表格
||标准类型| | | | | | | | | | | | | | |标准|1
||准则类型| | | | | | |函数| | | | | | | |准则|
||标准类型| | | | | | | | | | | | | | | | | | | |标准|;
返回查询执行sql;
结束;
端环;
闭合游标逻辑;
结束;
结束;
$body$
语言plpgsql;

使用
变量名称为值赋值:=''构造,下面是一个示例:

t=# create function f(_i int) returns table (a int) as $$
declare sql text;
begin
 sql := format('select %s',_i);
 return query execute sql;
end;
$$
language plpgsql
;
CREATE FUNCTION
t=# select * From f(3);
 a
---
 3
(1 row)

VAR\u NAME:=''赋值构造,下面是一个示例:

t=# create function f(_i int) returns table (a int) as $$
declare sql text;
begin
 sql := format('select %s',_i);
 return query execute sql;
end;
$$
language plpgsql
;
CREATE FUNCTION
t=# select * From f(3);
 a
---
 3
(1 row)

选择进入。。。或执行选择(丢弃结果)谢谢。但我是博士后的新手,不知道如何将select写入。。。或执行选择(丢弃结果)。您是否可以编写不正确的部分代码???错误发生在
选择LogicID=“LogicID”,SheetName=“SheetNa…”处,其中“LogicID”=INC;
-您应该“结果在某个地方,或者丢弃它。从您的代码中,我假设您希望将thiatsql作为文本值分配给变量sql。但我不能告诉你,因为你的帖子没有评论。选择进入不适用于已经存在的表?我说的对吗?在代码选择的这一部分。。。或执行选择(丢弃结果)谢谢。但我是博士后的新手,不知道如何将select写入。。。或执行选择(丢弃结果)。您是否可以编写不正确的部分代码???错误发生在
选择LogicID=“LogicID”,SheetName=“SheetNa…”处,其中“LogicID”=INC;
-您应该“结果在某个地方,或者丢弃它。从您的代码中,我假设您希望将thiatsql作为文本值分配给变量sql。但我不能告诉你,因为你的帖子没有评论。选择进入不适用于已经存在的表?我说的对吗?在代码的这一部分,谢谢。我已成功为变量赋值。现在,问题是“错误:无法以游标形式打开插入查询”。请将代码、错误和问题作为新帖子发布,谢谢。我已经成功地将值分配给变量。现在,问题是“错误:无法以游标形式打开插入查询”。请将代码、错误和问题作为新帖子发布