Хранить результат запроса в переменной, используя в PL/pgSQL
как назначить результат запроса переменной в PL / pgSQL, процедурном языке PostgreSQL?
у меня есть функция:
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 else part
end if;
end;
return -- return my process result here
$BODY$
LANGUAGE plpgsql VOLATILE
В приведенной выше функции мне нужно сохранить результат этого запроса:
'SELECT name FROM test_table where id='||x;
переменной name.
как это обработать?
5 ответов:
Я думаю, что вы ищете
SELECT INTO:select test_table.name into name from test_table where id = x;что будет тянуть
nameСtest_tableздесьid- это аргумент функции, и оставить его вnameпеременной. Не оставляйте префикс имени таблицы наtest_table.nameили вы получите жалобы на неоднозначную ссылку.
пока вы назначаете одну переменную, вы также можете использовать простое назначение в функции 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.
я сократил синтаксис с помощью псевдонима таблицы дополнительно.
Обновление: я удалил свой пример кода и предлагаю использовать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, ...
Создать Таблицу Обучения:
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();
вы можете использовать следующий пример для хранения результата запроса в переменной с помощью PL / pgSQL:
select * into demo from maintenanceactivitytrack ; raise notice'p_maintenanceid:%',demo;

Comments