2017-06-23 24 views
0

我有.sql文件,我在其中創建一個表並插入行。表創建後調用psql函數

CREATE TABLE vehicle ( 
    name    TEXT PRIMARY KEY,  
    id INTEGER DEFAULT 0 
) 
INSERT INTO vehicle values('car',1); 
INSERT INTO vehicle values('bus',2); 

而不是執行插入命令我想有一個函數,將插入上面兩行。我如何調用這個函數?

CREATE OR REPLACE FUNCTION insert() 
     RETURNS VOID AS $$ 
BEGIN 
     INSERT INTO vehicle values('car',1); 
INSERT INTO vehicle values('bus',2); 
     RETURN; 
END; 
$$ LANGUAGE 'plpgsql'; 
+0

'選擇insert();' –

+0

試試爲你的函數選擇一個別名 –

+0

函數定義是否應該在之前添加,然後調用select insert(); – user3755420

回答

1

爲什麼你需要這樣的功能? 也許,你所需要的只是將所有東西都包裝到單個交易區塊中?

begin; 
    CREATE TABLE vehicle ( 
    name    TEXT PRIMARY KEY,  
    id INTEGER DEFAULT 0 
); 
    INSERT INTO vehicle values('car',1); 
    INSERT INTO vehicle values('bus',2); 
commit; 

如果沒有,可以考慮使用「匿名」 PLPGSQL塊,W/O exclicitly定義一個函數 - 它是有用的,當你需要一次運行一些代碼:最後

do $$ 
begin 
    INSERT INTO vehicle values('car',1); 
    INSERT INTO vehicle values('bus',2); 
end; 
$$ language plpgsql; 

,如果你確實需要一個函數,好的,你已經正確定義了,所以讓我們來運行它。在Postgres裏,存儲過程是功能,什麼手段,他們可以很容易地集成到普通的SQL語句,所以我們只用SELECT(從Postgres,SELECT語句都不允許有沒有FROM子句):

select insert(); 
相關問題