SQL查询-设置局部变量(PostgreSQL、MySQL)

😋博主在工作中编写复杂SQL语句时,经常需要替换查询值进行测试。所以需要用到局部变量设置,可以减轻测试时的压力。

目录

使用场景

🤔在user_info表、user_info_ex表、user_info_in表,三个表中查询工号为'STAF0306'的记录并返回,SQL示例如下。

1.常规写法

javascript 复制代码
select 
	user_id, user_name, user_code
from user_info
where
	user_code = 'STAF0306'
	
union 

select 
	user_id, user_name, user_code
from user_info_ex
where
	user_code = 'STAF0306'

union 

select 
	user_id, user_name, user_code
from user_info_in
where
	user_code = 'STAF0306'

2.局部变量写法

如果需要改为查询'STAF0308'的工号时,需要替换三个位置。在简单的语句中替换没有什么影响,但如果在复杂的SQL中,可能会出现漏改的情况😥。

所以,我们可以在顶部显眼位置设置局部参数,直接修改所需的入参,可无视复杂的SQL语句👏。

(1)PostgreSQL示例

🙆‍♂️使用current_setting('parameter_name') 来获取参数值,并注意设置对应的参数类型

javascript 复制代码
SET my.user_code TO 'STAF0308';

select 
	user_id, user_name, user_code
from user_info
where
	user_code = current_setting('my.user_code')::VARCHAR
	
union 

select 
	user_id, user_name, user_code
from user_info_external
where
	user_code = current_setting('my.user_code')::VARCHAR
注意事项
复制代码
1)SET LOCAL 需要在事务块中使用(BEGIN...COMMIT)
2)使用 SET 可以在事务外使用
3)参数值总是字符串,需要根据需要进行类型转换

(2)MySQL示例

🙆‍♀️用户变量以 @ 开头,在会话内有效,注意大小写。

javascript 复制代码
SET @user_code = 'STAF0308';

select 
	user_id, user_name, user_code
from user_info
where
	user_code = @user_code
	
union 

select 
	user_id, user_name, user_code
from user_info_external
where
	user_code = @user_code

union 

select 
	user_id, user_name, user_code
from user_info_in
where
	user_code = @user_code
注意事项
复制代码
1)用户变量以 @ 开头,在会话内有效
2)局部变量在存储过程内使用 DECLARE 定义,不以 @ 开头
3)变量名区分大小写
4)用户变量会在会话结束后自动清除

结语

🎈以上博主仅列出了两种较为简单的设置局部变量方式,还有许多其他的设置方式就不做扩展说明了,感谢阅读。

相关推荐
高溪流22 分钟前
3.数据库表的基本操作
数据库·mysql
alonewolf_9930 分钟前
深入剖析MySQL锁机制与MVCC原理:高并发场景下的数据库核心优化
数据库·mysql
黄宝康1 小时前
sqlyog密钥亲测有效
mysql
YIN_尹1 小时前
【MySQL】数据类型(上)
android·mysql·adb
想唱rap2 小时前
MYSQL在ubuntu下的安装
linux·数据库·mysql·ubuntu
java1234_小锋2 小时前
MySQL中的乐观锁和悲观锁是什么?
mysql
齐 飞3 小时前
快速删除mysql表中所有数据-TRUNCATE TABLE
数据库·mysql
一个天蝎座 白勺 程序猿3 小时前
KingbaseES 处理 PL/SQL 运行时错误全解析:从异常捕获到异常处理的实践指南
数据库·sql·oracle·kingbasees
计算机学姐4 小时前
基于SpringBoot的汉服租赁系统【颜色尺码套装+个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
2301_800256114 小时前
B+树:数据库的基石 R树:空间数据的索引专家 四叉树:空间划分的网格大师
数据结构·数据库·b树·机器学习·postgresql·r-tree