Синтаксическая ошибка около FOR L OOP в хранимой процедуре Postgres - PullRequest
1 голос
/ 24 января 2020

Ниже моя хранимая процедура, которую я пытаюсь создать. Я преобразовываю данные таблицы в json и l oop JSON, которые я создал. Но при этом я сталкиваюсь с проблемой.

CREATE OR REPLACE FUNCTION file_compare()

    RETURNS text
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
    AS $BODY$
    declare 
    fpo_data jsonb;
    loopupto INTEGER := 0;

    begin

    select  json_agg(("fpdata"))::jsonb
    FROM (
      SELECT "fo_data" as fpdata
     from fpo
    limit 100
    ) t  INTO "fpo_data";

    FOR i IN "fpo_data"
  LOOP
    RAISE NOTICE 'output from space %', i;
  END LOOP;


    return fpo_data;
    end;
$BODY$;

Я получаю сообщение об ошибке ниже

 ERROR:  syntax error at or near ""fpo_data""
 LINE 27:  FOR i IN "fpo_data"

В чем проблема? Пожалуйста, помогите !!

1 Ответ

1 голос
/ 24 января 2020

Вы забыли объявить i, есть несколько бесполезных ", и вы пытаетесь перебрать переменную jsonb.

Предполагая, что fpo_data имеет сохраненный массив jsonb, попробуйте это :

CREATE OR REPLACE FUNCTION file_compare()
RETURNS TEXT LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$
DECLARE
  fpo_data jsonb;
  i JSONB;
BEGIN
  SELECT json_agg((fpdata))::jsonb
  FROM (SELECT fo_data AS fpdata
        FROM fpo LIMIT 100
    ) t  INTO fpo_data; 
  FOR i IN SELECT * FROM jsonb_array_elements(fpo_data) LOOP
    RAISE NOTICE 'output from space %', i;
  END LOOP;
  RETURN fpo_data;
END;
$BODY$;

Редактировать : Чтобы извлечь только элемент bene_first_name в операторе уведомления о повышении, просто выполните:

RAISE NOTICE 'output from space %', (i->>0)::JSONB->'bene_first_name';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...