使用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
是您函数的参数,并将其保留在name
variables中。 不要在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();
演示: