Postgres sql 函数没有给出正确的计数
Postgres sql function is not giving proper count
我正在使用下面的查询来检查下面数据库中的数据计数是代码。
--- 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;
我有 print v_count ,它给出了每次差异值。第一个打印给我 v_count 0 另一个打印给出每次差异计数当我 运行 查询外部函数时它给我正确的 1 计数。我不知道我做错了什么请帮忙。
我认为问题出在你的临时工上 table 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;
我正在使用下面的查询来检查下面数据库中的数据计数是代码。
--- 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;
我有 print v_count ,它给出了每次差异值。第一个打印给我 v_count 0 另一个打印给出每次差异计数当我 运行 查询外部函数时它给我正确的 1 计数。我不知道我做错了什么请帮忙。
我认为问题出在你的临时工上 table 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;