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。但我不能告诉你,因为你的帖子没有评论。选择进入不适用于已经存在的表?我说的对吗?在代码的这一部分,谢谢。我已成功为变量赋值。现在,问题是“错误:无法以游标形式打开插入查询”。请将代码、错误和问题作为新帖子发布,谢谢。我已经成功地将值分配给变量。现在,问题是“错误:无法以游标形式打开插入查询”。请将代码、错误和问题作为新帖子发布