PostgreSQL执行动态sql,应用在存储过程

本文介绍了在PostgreSQL中如何在存储过程中执行动态SQL,强调了查询参数绑定的重要性,尽管性能可能不高,但这种方法在某些场景下仍具有一定价值。通过returns table定义返回字段和类型,并使用$1引用过程参数。当遇到SQL执行速度不稳定的情况,可以利用这种动态SQL调试,根据不同值观察执行计划,以理解索引使用的影响。
摘要由CSDN通过智能技术生成

虽然真的很鸡肋,并且性能不杂滴,但聊胜于无吧.

drop function if exists exe_dynamic_sql(bigint);
drop function if exists exe_dynamic_count(bigint);
--返回记录集
create or replace function exe_dynamic_sql(ival bigint)
    returns table(objectid bigint,name varchar(128))
as $$
	declare
	begin
		return query execute 'select objectid,name from dictionarys where parentid=$1 order by parentid,sort' using $1; 
	end;
$$ language plpgsql;

--赋值给变量
create or replace function exe_dynamic_count(ival bigint)
    returns bigint
as $$
	declare
		v_count bigint;
	begin
		execute 'select count(*) from dictionarys where parentid=$1' using $1 into v_count;
		return v_count;
	end;
$$ language plpgsql;
--测试
select * from exe_dynamic_sql(26);
select exe_dynamic_count(26);

要点:

  • returns table(objectid bigint,name varchar(128)),定义返回的字段和类型
  • using $1执行时使用过程参数;

准备一个语句用于执行,这个就比较重要了,查询参数绑定,开发利

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值