将select值赋给变量,使其在PostgreSQL 9.3函数中执行

将select值赋给变量,使其在PostgreSQL 9.3函数中执行,postgresql,Postgresql,考虑这样一个函数: CREATE OR REPLACE FUNCTION public.foo( string1 character varying ) RETURNS integer AS $BODY$ DECLARE id1 INTEGER; BEGIN id1 := (SELECT id FROM mytable WHERE mycolumn = string1); END; ...... 它工作正常,我得到了id1值,用于函数的其他部分 现在,我想重写

考虑这样一个函数:

CREATE OR REPLACE FUNCTION public.foo(
    string1 character varying    
    )
  RETURNS integer AS
$BODY$
DECLARE
id1 INTEGER;

BEGIN

id1  := (SELECT id FROM mytable WHERE mycolumn = string1);
END;
......
它工作正常,我得到了
id1
值,用于函数的其他部分

现在,我想重写函数并传递一个名称,该名称的作用类似于表的标识符

  CREATE OR REPLACE FUNCTION public.foo(
        string1 character varying,
        tablecode character varying --new argument
        )
      RETURNS integer AS
    $BODY$
    DECLARE
    id1 INTEGER;

    BEGIN
.....
现在,有我的get
id1
value的ATTEPM和错误:

EXECUTE FORMAT('id1 := (SELECT id FROM %I WHERE mycolumn = %s)', tablecode||'_Conceptos', quote_literal(string1));
错误:

ERROR:  syntax error at or near "id1"
LINE 1: id1 := (SELECT id FROM "CENZANO_Conceptos" WHERE codigo ...
        ^
QUERY:  id1 := (SELECT id FROM "CENZANO_Conceptos" WHERE codigo = 'CENZANO')
ERROR:  EXECUTE of SELECT ... INTO is not implemented
HINT:  You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead.
--第二次下午

 EXECUTE FORMAT ('SELECT %I.id INTO id1 FROM %I WHERE mycolumn = %s', tablecode||'_Conceptos',tablecode||'_Conceptos',quote_literal(string1));

END;
......
错误:

ERROR:  syntax error at or near "id1"
LINE 1: id1 := (SELECT id FROM "CENZANO_Conceptos" WHERE codigo ...
        ^
QUERY:  id1 := (SELECT id FROM "CENZANO_Conceptos" WHERE codigo = 'CENZANO')
ERROR:  EXECUTE of SELECT ... INTO is not implemented
HINT:  You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead.

提前感谢

您可以使用
进入

EXECUTE FORMAT('(SELECT id FROM %I WHERE mycolumn = %s)'
                , tablecode||'_Conceptos', quote_literal(string1)) INTO id1;

谢谢。它很好用。我有一大堆函数,必须在其中添加类似于表的参数,这让我很头疼;-)