使用postgresql存储过程将查询结果存储在variables中

如何使用postgresql存储过程将查询结果存储在variables中

我有一个存储过程

CREATE OR REPLACE FUNCTION test(x numeric) RETURNS character varying AS $BODY$ DECLARE name character varying(255); begin name ='SELECT name FROM test_table where id='||x; if(name='test')then --do somthing else --do the eles part end if; end; return -- return my process result here $BODY$ LANGUAGE plpgsql VOLATILE 

在上面的过程中,我需要存储

 'SELECT name FROM test_table where id='||id; 

这个查询将结果返回给variables名称

如何处理这个? 请告诉我

我想你正在寻找SELECT INTO

 select test_table.name into name from test_table where id = x; 

这将从test_table name ,其中id是您函数的参数,并将其保留在namevariables中。 不要在test_table.name表名前缀,否则会收到关于模糊引用的投诉。

只要你分配一个variables,你也可以在plpgsql函数中使用普通赋值:

 name := (SELECT t.name from test_table t where t.id = x); 

或者使用SELECT INTO就像已经提供的@mu一样。

这也适用于:

 name := t.name from test_table t where t.id = x; 

但更好的使用前两个,更清晰的方法之一,@Pavel评论。

我用表别名缩短了语法。
更新:我删除了我的代码示例,并build议使用IF EXISTS()而不是像@Pavel提供的 。

通常的模式是EXISTS(subselect)

 BEGIN IF EXISTS(SELECT name FROM test_table t WHERE t.id = x AND t.name = 'test') THEN --- ELSE --- END IF; 

这种模式用于PL / SQL,PL / pgSQL,SQL / PSM,…

创build学习表:

 CREATE TABLE "public"."learning" ( "api_id" int4 DEFAULT nextval('share_api_api_id_seq'::regclass) NOT NULL, "title" varchar(255) COLLATE "default" ); 

插入数据学习表:

 INSERT INTO "public"."learning" VALUES ('1', 'Google AI-01'); INSERT INTO "public"."learning" VALUES ('2', 'Google AI-02'); INSERT INTO "public"."learning" VALUES ('3', 'Google AI-01'); 

步骤:01

 CREATE OR REPLACE FUNCTION get_all (pattern VARCHAR) RETURNS TABLE ( learn_id INT, learn_title VARCHAR ) AS $$ BEGIN RETURN QUERY SELECT api_id, title FROM learning WHERE title = pattern ; END ; $$ LANGUAGE 'plpgsql'; 

步骤:02

 SELECT * FROM get_all('Google AI-01'); 

步骤:03

 DROP FUNCTION get_all(); 

演示: 在这里输入图像说明