Dan*_*ley 5 postgresql temp-tables plpgsql
我正在尝试创建一个执行此操作的函数:
drop table t_rv_openitem;
select * into t_rv_openitem from rv_openitem;
select * from t_rv_openitem;
Run Code Online (Sandbox Code Playgroud)
当涉及到PostgreSQL中的函数时,我有时会感到困惑并得到此错误:
发生了错误:
错误:语法错误在"DROP"处或附近第3行:DROP TABLE t_rv_openitem;
我知道这似乎是一个简单的任务,但我正在试图解决这个问题.
这是完整的函数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;
Run Code Online (Sandbox Code Playgroud)
只需添加 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;
Run Code Online (Sandbox Code Playgroud)
如果您使用的是,则不需要 BEGIN 和 END 块LANGUAGE sql,但如果您使用的是,则需要它们LANGUAGE plpgsql
更新
关于ERROR: syntax error at "t_rv_openitem" DETAIL: Expected record variable...。您的代码没有语法错误,您只需更改以下内容:
select * into t_rv_openitem from rv_openitem;
Run Code Online (Sandbox Code Playgroud)
对此:
create table t_rv_openitem as
select * from rv_openitem;
Run Code Online (Sandbox Code Playgroud)
SELECT * INTO tablehere FROM tableSource仅当您在 PLPGSQL 之外使用它时,表创建才有效;当该代码结构位于 PLPGSQL 内部时,语义会有所不同,这意味着:
SELECT * INTO declaredVariableHere FROM tableSource;
Run Code Online (Sandbox Code Playgroud)
要在独立语句和 PLPGSQL 内部创建表,只需使用:
CREATE TABLE AS SELECT * FROM tableSourceHere;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10176 次 |
| 最近记录: |