从另一个函数调用一个函数时出现语法错误

时间:2018-02-16 10:11:28

标签: postgresql function plpgsql

我正在尝试创建一个调用其他2个函数的函数。

下面是调用函数的代码,我试图调用另外两个函数schema1.func1()schema1.func2()

但它在SELECT schema1.func1(temp_val);行说错误:

  

语法错误在" SELECT"。

我试图找出正确的语法,但无法解决。

我正在使用Postgres版本1.14.3

DECLARE 
  temp_val   int;
  cursor1 CURSOR
  FOR 
  SELECT col1 from schema1.table1;

BEGIN
  OPEN cursor1;
  LOOP
    FETCH cursor1 INTO temp_val;
    EXIT WHEN NOT FOUND;
      SELECT CASE 
              WHEN NOT EXISTS (SELECT col2 FROM schema1.table2 WHERE col2 = temp_val) 
              THEN 
                BEGIN 
                SELECT schema1.func1(temp_val);
                SELECT schema1.func2(temp_val);
                END;
             END CASE;
  END LOOP;
  CLOSE cursor1;
END;

2 个答案:

答案 0 :(得分:0)

缺少;

SELECT CASE WHEN NOT EXISTS (SELECT col2 FROM schema1.table2 WHERE col2 = temp_val)

所以..

SELECT CASE WHEN NOT EXISTS (SELECT col2 FROM schema1.table2 WHERE col2 = temp_val);

答案 1 :(得分:0)

您不能将PL / pgSQL BEGIN ... END块与SQL语句混合 - 即使该SQL语句是PL / pgSQL函数的一部分。因此BEGIN表达式的THEN部分内的CASE无效。 SQL CASE 表达式仅以END结尾。 PL / pgSQL CASE 语句将以END CASE结尾。当您尝试使用CASE表达式时,只需要END end case

您还需要使用perform来调用要放弃结果的函数。

我不清楚你想要达到什么目标。如果你只想调用那两个函数,如果table2中不存在一行,那么你可以用一个循环来完成:

DECLARE 
  t1_rec record;
BEGIN

  FOR t1_rec IN select t1.col1
                from table1 t1
                where not exists (select *
                                  from table2 t2
                                  where t2.col2 = t1.col1)
  LOOP
    perform schema1.func1(t1_rec.col1);
    perform schema1.func2(t1_rec.col1);
  END LOOP;
END;