2017-06-21 23 views
0

我創建了一個postgres sql函數,它執行truncate並將行插入到表中。下面是功能postgres帶截斷的sql函數並插入

CREATE OR REPLACE FUNCTION reset_Default()   
RETURNS VOID AS ' 
BEGIN 
     TRUNCATE TABLE details; 
     INSERT INTO details values('car',2); 
     INSERT INTO details values('bus',4); 


     RETURN; 
END;  
' LANGUAGE 'plpgsql'; 

但即時得到下面的錯誤

錯誤:語法錯誤或接近 「車」 LINE 6:VALUES( '車',2 ^ CREATE FUNCTION

錯誤:無法更改現有功能的返回類型

建議:先使用DROP FUNCTION。

我可以知道原因嗎?

回答

1

爲什麼你單引用你的函數的主體。雖然這可能會起作用,但它可能會導致您遇到的問題。由於wildplasser使用美元符號。然後你的函數會編譯好。

CREATE OR REPLACE FUNCTION reset_Default()   
RETURNS VOID AS $$ 
BEGIN 
    TRUNCATE TABLE details; 
    INSERT INTO details values('car',2); 
    INSERT INTO details values('bus',4); 
RETURN; 
END;  
$$ LANGUAGE plpgsql; 
0

你需要在一個字符串中加倍單引號。所以:

CREATE OR REPLACE FUNCTION reset_Default()   
RETURNS VOID AS ' 
BEGIN 
    TRUNCATE TABLE details; 
    INSERT INTO details(col1, col2) values(''car'',2); -- use actual column names 
    INSERT INTO details(col1, col2) values(''bus'',4); 

    RETURN; 
END;  
' LANGUAGE 'plpgsql' 
+4

還是用美元報價的函數體。 – wildplasser