将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
.....
现在,有我的getid1
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;
谢谢。它很好用。我有一大堆函数,必须在其中添加类似于表的参数,这让我很头疼;-)