Oracle (PL/SQL)学习经历-7/14

一、如何将列值合并

关键字:“||”

postgreSQL 拼接带特殊字符的字符串 plsql字符串拼接_上传

方法二:

关键字: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函数应该是做了截取后传入数值,从其他表中找到具体的数据后返回结果。但是这样没有幸福感啊,不如只要按照下图的三部曲轻松理解用法和大致意思就可以了。

postgreSQL 拼接带特殊字符的字符串 plsql字符串拼接_ide_02

六、具体实战

postgreSQL 拼接带特殊字符的字符串 plsql字符串拼接_ide_03

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函数

postgreSQL 拼接带特殊字符的字符串 plsql字符串拼接_oracle_04

这里就是用了replace函数

postgreSQL 拼接带特殊字符的字符串 plsql字符串拼接_ide_05

postgreSQL 拼接带特殊字符的字符串 plsql字符串拼接_ide_06

小学习:Union All

巩固练习

小学习:Union All

postgreSQL 拼接带特殊字符的字符串 plsql字符串拼接_ide_07