2014-09-04 43 views
0

我正在嘗試編寫一個過程,它在表中插入一行,然後返回一個指定的ID。PostgreSQL/PLPGSQL過程,返回變量作爲列

表例如:

CREATE TABLE sometable (
UUID Id, 
varchar field1, 
varchar field2) 

我的功能:

CREATE OR REPLACE FUNCTION insert_sometable(varchar pfield1, varchar pfield2) 
    RETURNS UUID AS $$ 
DECLARE 
pid UUID; 
BEGIN 
pid=uuid_generate(); 
insert into sometable(id, field1, field2) values (pid, pfield1, pfield2); 
return pid; 
END; 
$$ 
LANGUAGE plpgsql; 

,我希望它使用它像:

select pid from insert_sometable('_field1_value', '_field2_value') 

但現在我沒有列名的結果,所以我不能在我的ESB服務中訪問它。 我想在結果集中調用「pid」列。 看起來像簡單的任務,但我沒有找到任何簡單的解決方案。有什麼建議麼?

回答

0

你不應該使用一個函數,其返回值是原子(非行)在FROM條款(這是可能的,但使您的查詢不易讀)。您也可以在SELECT條款中添加別名:

select insert_sometable('_field1_value', '_field2_value') as pid; 
+0

謝謝,pozs。你太快了。 – CaptainFreedom 2014-09-04 10:07:44

1

我想你只是想要別名返回的列名。如果是這樣的:

select pid 
from insert_sometable('_field1_value', '_field2_value') AS inserted_row(pid); 

的PostgreSQL允許你寫的簡寫本作只返回一列功能:

select pid 
from insert_sometable('_field1_value', '_field2_value') pid;