微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Postgres sql 函数没有给出正确的计数

如何解决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 举报,一经查实,本站将立刻删除。