2012-04-11 205 views
4

我試圖創建一個做到這一點的一個函數裏:PostgreSQL的創建臨時表PLPGSQL功能

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; 
+0

我對不起,以上我不明白?我已經添加了整個函數create語句,這有幫助嗎? – 2012-04-11 03:16:17

回答

2

只需添加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; 

你不需要BEGIN和END塊,如果你正在使用LANGUAGE sql,你需要那些雖然如果您正在使用LANGUAGE plpgsql

UPDATE

關於ERROR: syntax error at "t_rv_openitem" DETAIL: Expected record variable...。有一個在你的代碼中沒有語法錯誤,你只需要改變這一點:

select * into t_rv_openitem from rv_openitem; 

要這樣:

create table t_rv_openitem as 
select * from rv_openitem; 

僅使用,如果你正在使用它PLPGSQL之外SELECT * INTO tablehere FROM tableSource作品表的創建;當代碼結構是內PLPGSQL,意義就不同了,它的意思是:

SELECT * INTO declaredVariableHere FROM tableSource; 

爲了讓兩個獨立的語句和內部PLPGSQL表的創建工作,只需使用:

CREATE TABLE AS SELECT * FROM tableSourceHere; 
+0

謝謝,但現在我得到這個 錯誤:「t_rv_openitem」處的語法錯誤 細節:預計的記錄變量,行變量或INTO後面的標量變量列表。 背景:PL/pgSQL函數的彙編 「update_t_rv_openitem」 近線5 **********錯誤********** ERROR:在 「t_rv_openitem」 語法錯誤SQL狀態:42601 細節:預期的記錄變量,行變量或INTO後面的標量變量列表。 上下文:第5行附近的PL/pgSQL函數「update_t_rv_openitem」的編譯 – 2012-04-11 03:26:01

+0

啊我c選擇進入不工作在plpgsql – 2012-04-11 03:32:20

+1

真的嗎('SELECT * INTO newTable FROM sourceTable')在plpgsql中不起作用,但它工作時它作爲獨立聲明運行。這也讓我感到困惑,同樣的語法,當它被放置在過程語言中時它將具有不同的語義 – 2012-04-11 03:39:49