如何解决Postgres sql 函数没有给出正确的计数
--- select "fn_delete_data"('7503','Test','ONE');
-- DROP FUNCTION fn_delete_data(character varying,character varying,character varying)
CREATE OR REPLACE FUNCTION public."fn_delete_data"(
IN IN_id character varying,IN IN_source character varying,IN IN_deletion_type character varying,OUT Out_message character varying,OUT Out_is_success INTEGER
)AS $$
DECLARE
v_count integer := 0;
BEGIN
raise notice 'v_count %',v_count;
CREATE TEMP TABLE "simple_count" ON COMMIT DROP AS(select * from public.client where "other_id" = IN_id
UNION
select * from public.client where "id" = IN_id);
select count(*) INTO v_count from simple_count;
raise notice 'v_count %',v_count;
IF (v_count > 0) THEN
Out_is_success = 0;
Out_message = 'Data Found. Not Allow to delete';
ELSE
Out_is_success = 1;
Out_message = 'No Data found. Allow to delete';
END IF;
END
$$ LANGUAGE plpgsql;
我打印了 v_count,它给出了每次 diff 值。第一个打印给我 v_count 0 另一个打印给我每次 diff 计数,当我在函数外运行查询时,它给我正确的 1 个计数。我不知道我做错了什么,请帮忙。
解决方法
我认为问题出在您的临时表 ON COMMIT DROP
上,我认为它在创建后自行消失,因为没有事务,
所以你可以将你的功能简化为这个,它应该可以工作:
CREATE OR REPLACE FUNCTION public."fn_delete_data"(
IN IN_id character varying,IN IN_source character varying,IN IN_deletion_type character varying,OUT Out_message character varying,OUT Out_is_success INTEGER
)AS $$
DECLARE
v_count integer := 0;
BEGIN
raise notice 'v_count %',v_count;
select count(*) INTO v_count from public.client where IN_id in ("Id","other_id");
raise notice 'v_count %',v_count;
IF (v_count > 0) THEN
Out_is_success = 0;
Out_message = 'Data Found. Not Allow to delete';
ELSE
Out_is_success = 1;
Out_message = 'No Data found. Allow to delete';
END IF;
END
$$ LANGUAGE plpgsql;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。