2016-11-10 121 views
1

執行查詢字符串我試圖從一個函數返回一個ID是這樣的:返回值從PLPGSQL

CREATE OR REPLACE FUNCTION fx (myTable text, myValue text) returns int 
as $$ 
DECLARE 
    sqlQuery TEXT; 
    resultId INT; 
BEGIN 
    sqlQuery := 
    'INSERT INTO ' 
    || myTable || ' (id, some_column) values' 
    || ' (' 
    || 'nextval(' || quote_literal('seq_' || myTable) || ')' 
    || ',' || myValue 
    || ') RETURNING id INTO ' || resultId; 

    EXECUTE sqlQuery; 
    RETURN resultId; 

END; 
$$ 
LANGUAGE plpgsql; 

select fx('some_table', 'some_value'); 

但不工作。

如何從執行的sql查詢字符串中獲取此ID?

+1

我從來沒有見過Postgres錯誤信息'但是不行。嚴重:請提供適當的信息與您的問題。始終包含您的Postgres版本,並始終包含* verbatim *錯誤消息(如果適用)。 –

回答

1
create or replace function fx (mytable text, myvalue text) 
returns int as $body$ 
declare 
    sqlquery text; 
    resultId int; 
begin 

    sqlquery := format ($$ 
     insert into %I (id, some_column) values ($1, $2) 
     returning id 
     $$, mytable 
    ); 
    execute sqlquery 
     into resultId 
     using nextval('seq_' || mytable), myvalue; 
    return resultId; 

end; 
$body$ language plpgsql; 

%I使用說明符format傳遞標識符和execute using來傳遞數據的參數。