我正在尝试创建一个调用其他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;
答案 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;