簡體   English   中英

存儲過程 Postgres 中 FOR LOOP 附近的語法錯誤

[英]Syntax error near FOR LOOP in stored procedure Postgres

下面是我要創建的存儲過程。 我正在將表數據轉換為 json 並循環我創建的 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"

問題是什么? 請幫忙!!

您忘記聲明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$;

編輯:要僅檢索 raise notice 語句中的元素bene_first_name ,只需執行以下操作:

RAISE NOTICE 'output from space %', (i->>0)::JSONB->'bene_first_name';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM