postgresql - Postgres FOR LOOP 语法错误

标签 postgresql stored-procedures for-loop plpgsql

我在 postgres 函数中遇到问题:

CREATE OR REPLACE FUNCTION linkedRepoObjects(id bigint) 
        RETURNS int  AS $$ 
          DECLARE catNumber int DEFAULT 0;
          DECLARE cat RECORD;
        BEGIN
        WITH RECURSIVE children(categoryid,category_fk) AS (
         SELECT categoryid, category_fk
         FROM b2m.category_tab 
         WHERE categoryid = 1
           UNION ALL
         SELECT c1.categoryid,c1.category_fk
         FROM b2m.category_tab c1, children 
         WHERE children.categoryid = c1.category_fk
         )


    FOR cat IN SELECT * FROM children LOOP
      IF EXISTS (SELECT 1 FROM b2m.repoobject_tab WHERE category_fk = cat.categoryid)   THEN
            catNumber = catNumber +1
      END IF;
    END LOOP;

         RETURN catNumber;

         END;
    $$ LANGUAGE 'plpgsql';

我有错误:

FEHLER:  Syntax error near »FOR«
LINE 1: ...dren WHERE children.categoryid = c1.category_fk ) FOR  $2  I...

最佳答案

语法错误是因为它期望 WITH ... 后跟 SELECT它在哪里找到FOR .

我没有在 plpgsql 的查询中使用 WITH 子句,但我会尝试将 FOR cat IN 移动到 WITH 之前,这是查询的一部分。

关于postgresql - Postgres FOR LOOP 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839479/

相关文章:

postgresql - Postgres到ELK Stack的ElasticSearch数据索引

ruby-on-rails - Rails 中一对一关系的奇怪之处

sql - PostgreSQL 插入用户定义对象数组并从中选择

database - 如何在 H2 中创建过程

mysql - 无法在 PHPMyAdmin 中创建触发器

mysql - 为什么我的存储过程在插入时返回 "?"或在 UTF-8 的 select 语句中返回空

postgresql - 在 PostgreSQL 中锁定表时,出现错误 : LOCK TABLE can only be used in transaction blocks

c# - 将单独的列从 .csv 拉入 c# 中的单独数组

java - For 循环产生部分正确的结果

java - 删除一个实体,然后在其位置添加一个新实体