postgresql - 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;
我有 print v_count ,它给出了每次差异值。当我在函数外运行查询时,第一次打印给我 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;
推荐阅读
- python-3.x - 我得到 ConnectionResetError: [Errno 54] Connection reset by peer 在尝试抓取时
- c# - 在另一个窗体上访问 DataGridView 数据
- mysql - MySQL - 如何将子查询中的列别名用于另一个子查询?
- python - 如何在 python 上显示所有 8 位图像
- java - 打印多维数组行元素的替代方法
- python - Python,过滤csv以获取column1中的唯一值并返回
- javascript - RXJS:从 Promise 创建的级联 observables 的非顺序行为
- visual-studio - Postman JSON 不适用于 ASP.NET Core Web API
- cmake - cmake 使用通配符作为 find_library NAMES 选项
- python - Python:Discord.py 错误:无法为使用 PEP 517 且无法直接安装的 multidict、yarl 构建轮子