PostgreSQL在plpgsql函数内创建临时表
我正在尝试创建一个函数来执行以下操作:PostgreSQL在plpgsql函数内创建临时表,postgresql,plpgsql,temp-tables,Postgresql,Plpgsql,Temp Tables,我正在尝试创建一个函数来执行以下操作: drop table t_rv_openitem; select * into t_rv_openitem from rv_openitem; select * from t_rv_openitem; 有时,当涉及PostgreSQL中的函数时,我会感到困惑,并出现以下错误: 发生了一个错误: 错误:在“DROP”第3行或其附近出现语法错误:DROP TABLE 未清项 我知道这似乎是一项简单的任务,但我正在竭尽全力想办法解决这个问题 以下是完整的函数c
drop table t_rv_openitem;
select * into t_rv_openitem from rv_openitem;
select * from t_rv_openitem;
有时,当涉及PostgreSQL中的函数时,我会感到困惑,并出现以下错误:
发生了一个错误:
错误:在“DROP”第3行或其附近出现语法错误:DROP TABLE
未清项
我知道这似乎是一项简单的任务,但我正在竭尽全力想办法解决这个问题
以下是完整的函数create语句:
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;
只需添加开始和结束
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;
如果您使用的是语言sql
,则不需要开始和结束块,但是如果您使用的是语言plpgsql
更新
关于错误:“t\u rv\u openitem”的语法错误详细信息:预期的记录变量…
。代码中没有语法错误,您只需更改以下内容:
select * into t_rv_openitem from rv_openitem;
为此:
create table t_rv_openitem as
select * from rv_openitem;
仅当您在PLPGSQL之外使用时,使用SELECT*INTO table here FROM tableSource
创建表才有效;当该代码结构位于PLPGSQL内部时,语义将不同,这意味着:
SELECT * INTO declaredVariableHere FROM tableSource;
要在独立语句和PLPGSQL内部创建表,只需使用:
CREATE TABLE AS SELECT * FROM tableSourceHere;
对不起,我不明白上面是什么?我已经添加了整个函数create语句,这是否有帮助。谢谢,但现在我得到了这个错误:“t_rv_openitem”详细信息中的语法错误:预期的记录变量、行变量或后面的标量变量列表。上下文:在第5行附近编译PL/pgSQL函数“update_t_rv_openitem”*********错误******错误:“t_rv_openitem”SQL状态的语法错误:42601详细信息:预期的记录变量、行变量或后面的标量变量列表。上下文:第5行附近PL/pgSQL函数“update_t_rv_openitem”的编译True it(
SELECT*FROM sourceTable
)在plpgsql中不起作用,但在作为独立语句运行时起作用。这让我以前也很困惑,相同的语法,但当它放在过程中时,它会有不同的语义language@DanWalmsley: