Oracle (PL/SQL)学习经历-7/14
一、如何将列值合并
关键字:“||”
方法二:
关键字:concat
注意oracle我真的觉得concat非常麻烦,所以不具体介绍,虽然mysql中concat函数可以连接多个,但是oracle只能两两嵌套执行。
e.g concat(concat(u.city_cn_name,’_’),u.flt_route_name)
结果:
[城市英文名字,飞行路线名字]
但是你用||难道不香吗,当然这里不涉及性能调优之类的话题就是了,因为我只是为了做绘制报表所以对性能(执行花费时间)没什么要求。
二、如何在id字段前添加指定字符串‘dev’
还是相同的方法使用"||"关键字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xUkVMGMw-1595208858493)(assets/如何在具体列的数据上添加字符.PNG)]
三、case end条件,根据条件,返回指定的结果(也可返回字符如‘T’)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UfqJ7sKz-1595208858500)(assets/条件case when then end.PNG)]
四、如何取前10条记录
select * from table where rownum <=10
*然后当要取中间2-10项之类的用minus减去吧,反正好麻烦的说,因为oracle没有limit函数
五、如何学会查看oracle中前辈写的函数
首先我看到这个函数的时候是因为要跨数据库查询,虽然在开发环境普遍使用数据库名.表名没有什么问题,但是可能会在测试或者预发布环境发生bug,为了保险起见,如果有函数的话最好使用函数的方式实现调用,也能使得代码可观性增强。
但是因为学长学姐可能不会特意去写大量注释,可能你扫一眼不能知道主要功能,当然像下面这种看到substr函数应该是做了截取后传入数值,从其他表中找到具体的数据后返回结果。但是这样没有幸福感啊,不如只要按照下图的三部曲轻松理解用法和大致意思就可以了。
六、具体实战
select p.route "航点",
p.deptName "航食公司",
p.mealType "餐种",
p.mealCategory "舱位",
replace(to_char(wm_concat(p.mealName)),',','__') "特餐名称"
--to_char(wm_concat(p.mealName)) "特餐名称"
from (select
(select concat(concat(u.city_cn_name,'_'),u.flt_route_name)
from pns.flt_flight_route_basic u
where c.route_stop = u.flt_route_code) as route,
-- c.route_stop as route,
b.dept_name as deptName,
sysmng.fun_get_dict_name(t.meal_type ,'DIC_MEALS_TYPE') as mealType,
case t.meal_category
when '32' then '经济舱'
when '22' then '公务舱'
else '其他' end as mealCategory,
t.meal_name as mealName
from pns.idvm_provide_meal t
join pns.idvm_provide_goods_dept a
on t.id = a.goods_id
join pns.idvm_dept_provide_meal b
on a.prvm_dept_id = b.id
join pns.idvm_dept_prvm_route_stop c
on b.id = c.meal_provide_dept_id
where t.status = '1'
and a.status = '1'
and b.status = '1'
and c.status = '1'
and t.meal_category in (22,32)) p
group by p.route,p.deptName,p.mealType,p.mealCategory;
首先我们观察内表结构,其实就是里面一张表外面使用刚刚wm_concat()进行合并,使用replace替换逗号。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aMFnUnc3-1595208858517)(assets/内表结构.png)]
下面我们把嵌套语句去了,简化代码,然后具体观察replace函数对于逗号改成“_”的变化
这里就是没有replace函数
这里就是用了replace函数
小学习:Union All
巩固练习
小学习:Union All