Подтвердить что ты не робот

Храните результат запроса в переменной, используя 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;

этот запрос возвращает результат к имени переменной

как обрабатывать это? пожалуйста, дайте мне знать

4b9b3361

Ответ 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: введите описание изображения здесь