2016-11-10 123 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来传递数据的参数。