Храните результат запроса в переменной, используя postgresql Сохраненная процедура
Как сохранить результат запроса в переменной с помощью 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 eles part
end if;
end;
return -- return my process result here
$BODY$
LANGUAGE plpgsql VOLATILE
в описанной выше процедуре мне нужно сохранить
'SELECT name FROM test_table where id='||id;
этот запрос возвращает результат к имени переменной
как обрабатывать это? пожалуйста, дайте мне знать
Ответы
Ответ 1
Я думаю, что вы ищете SELECT INTO
:
select test_table.name into name from test_table where id = x;
Это вытащит name
из test_table
, где id
- ваш аргумент функции и оставьте его в переменной name
. Не оставляйте префикс имени таблицы на test_table.name
, или вы получите жалобы на неоднозначную ссылку.
Ответ 2
Пока вы назначаете одну переменную, вы также можете использовать простое назначение в функции 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.
Ответ 3
Обычный шаблон 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,...
Ответ 4
Создать таблицу обучения:
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();
Demo:
![введите описание изображения здесь]()