首页 > 解决方案 > 调用返回无效函数时在“执行”处或附近出现语法错误

问题描述

功能

create function public.perform1(myid integer)
returns void
language 'plpgsql'
volatile security definer
as $$
begin
    delete from tbl where tblid=myid;
end;
$$;

PERFORM在 pgAdmin 和 SQL Shell 中调用时出错:

perform public.perform1(123);

ERROR:  syntax error at or near "perform"
LINE 1: perform public.perform1(123)
        ^
SQL state: 42601
Character: 1

SELECT public.perform1(123);也不好:

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function perform1(integer) line 3 at SQL statement
SQL state: 42601

标签: postgresql

解决方案


perform只在里面使用plpgsql。你要:

select public.perform1(123);

更新:

函数内部是您需要perform. 我提到它然后忘记显示它:

create function public.perform1(myid integer)
returns void
language 'plpgsql'
volatile security definer
as $$
begin
    perform delete from tbl where tblid=myid;
end;
$$;

更新 2:

好吧,这将教我实际测试代码。经过测试的有效代码:

create function public.perform1(myid integer)
returns void
language 'plpgsql'
volatile security definer
as $$
begin
    delete from tbl where tblid=myid;
end;
$$;


推荐阅读