gpt4 book ai didi

PostgreSQL CREATE TEMPORARY TABLE 在 plpgsql 函数中

转载 作者:行者123 更新时间:2023-11-29 11:29:32 25 4
gpt4 key购买 nike

我正在尝试创建一个执行此操作的函数:

drop table t_rv_openitem;
select * into t_rv_openitem from rv_openitem;
select * from t_rv_openitem;

当谈到 PostgreSQL 中的函数时,我有时会感到困惑并得到这个错误:

An error has occurred:

ERROR: syntax error at or near "DROP" LINE 3: DROP TABLE t_rv_openitem;

我知道这似乎是一项简单的任务,但我正在努力解决这个问题。

这是完整的函数创建语句:

CREATE OR REPLACE FUNCTION adempiere.update_t_rv_openitem()
RETURNS rv_openitem AS
$BODY$

Drop table t_rv_openitem;
select * into t_rv_openitem from rv_openitem;
select * From t_rv_openitem;

$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION adempiere.update_t_rv_openitem() OWNER TO adempiere;

最佳答案

只需添加 BEGIN 和 END

CREATE OR REPLACE FUNCTION adempiere.update_t_rv_openitem()
RETURNS rv_openitem AS
$BODY$

BEGIN -- ADD THIS

Drop table t_rv_openitem;
select * into t_rv_openitem from rv_openitem;
select * From t_rv_openitem;

END; -- AND THIS

$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION adempiere.update_t_rv_openitem() OWNER TO adempiere;

如果您使用的是 LANGUAGE sql,则不需要 BEGIN 和 END block ,但如果您使用的是 LANGUAGE plpgsql

,则需要这些 block

更新

关于错误:“t_rv_openitem”处的语法错误详细信息:预期的记录变量...。你的代码没有语法错误,你只需要改变这个:

select * into t_rv_openitem from rv_openitem;

对此:

create table t_rv_openitem as
select * from rv_openitem;

使用 SELECT * INTO tablehere FROM tableSource 创建表只有在 PLPGSQL 之外使用时才有效;当该代码结构在 PLPGSQL 中时,语义会有所不同,这意味着:

SELECT * INTO declaredVariableHere FROM tableSource;

要在独立语句和 PLPGSQL 内部创建表,只需使用:

CREATE TABLE AS SELECT * FROM tableSourceHere;

关于PostgreSQL CREATE TEMPORARY TABLE 在 plpgsql 函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10099230/

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