北京偶遇的技术

      回头看看,从北京回来也已经有足足一个月了,这半年的时光直在脑海中打转。每每想起在北京生活的半年,心中满满的都是欢喜。

        从去年9月22欢喜的踏上廊坊到北京早上最早的那趟列车时,注定接下来的半年生活一定是五彩缤纷的,也一定是伴随成长和适应的。

        9月24日早上我们如约到达金融街公司门口,透过门上的玻璃,办公室里简约的布置直接映入眼帘,那一刻心中除了欢喜,还是欢喜,满脑子都是“我终于来北京了!”;在这半年里,从项目的改造1.0开始到结束,不断经历了解-熟悉-应用的过程,渐渐的进入Oracle和dorado的世界,去独立的体验首都的生活;

       在公司的项目中使用的dorado(一个我从未听过的框架)+Oracle(数据库界响当当的称呼)+ 报表,下面我就把这半年对它们的认识总结如下:

  ♚  dorado--简单“易用”的展现中间件

         在色调上,效果类似于前台的easyui:淡蓝色与白色结合,形成简约不简单的界面;

在使用上,主要包括两部分(view.xml + jsp):

         view.xml相当于一个布局器,我们将我们需要的控件和相应的时间添加好:


         添加好之后右击view.xml会在指定路径下生成一个jsp文件(同Java中的jsp文件),而jsp就是外界访问页面的入口;

♚   响当当的oracle

        无论是什么项目,数据库是我们的必备品,至于选择适合小型的sql Server ,适合中小型的Mysql还是适合大型项目的Oracle,具体根据项目的情况进行选择即可;

      由于之前的项目的增删改查都直接调用底层便好,sql始终是个弱到弱爆的能力项;所以在总结Oracle之前先做一下小编的面试题:

     

    如上图所示,现有一张表(姓名和身份证),其中有很多重复数据,请根据下面的题目作答:

◐ .查询姓名重复三次以上的姓名和对应的身份证号;

温馨提示:group by,count关键字

◐. 使用子查询完成第一题;

◐. 将表中的重复数据只显示一条;

温馨提示:distinct关键字

◐. 去除表中的重复数据 ;

    热身完事之后,我们开始进入Oracle的生活:

  1.事务管理(《自治事务(一)》,《自治事务(二)

         事务这个字眼我们都不陌生,事务固然好,但是总有一种情况它不能发光发热:当多个操作同时进行,按照事务的原理,如果不能全部执行成功,添加日志的语句也执行不了:

所以不论sql操作是否执行成功,我们都要更新日志表的插入操作,怎么办?

        这个时候,Oracle的自治事务就可以很好的帮我们解决这个问题,实时监视数据库中sql语句的执行情况;

  2.函数运用:

 sum(decode())  

        遇到多种情况不免进行逻辑判断,我们总会想到if ……else, 虽然在数据库中也可以使用if……else 但是N种(N>5)的逻辑判断,未免让我们对数据库的执行性能担忧,这种情况下我们就可以使用decode(),无论多少逻辑判断,我们都是一个函数便可以完美解决;

sum(decode()):行转列,比如:

select 
	sum(decode(re.reportdate, l_year, re.totalassets, 0)) curtotalassets,
	sum(decode(re.reportdate, l_curLastMonth, re.totalassets, 0)) lmtotalassets,
	sum(decode(re.reportdate, l_lastYear, re.totalassets, 0)) lymtotalassets,
from t_a

       上述的代码就是针对re.reportdate 的参数进行判断,而获取相应的报送日期对应的资产值;

  wm_concat:字符串拼接/列转行

        项目中是否有 将某个或者某几个字段的值拼接显示,并且每列值以“,”分隔而显示的一行数据的需求??

Create table test(id number,name varchar2(20));
insert into test  values(1,'a');
insert into test  values(1,'b');
insert into test  values(1,'c');
insert into test  values(1,'d');
insert into test  values(1,'e');
commit;
       执行上述代码之后,我们使用该函数获取所有的姓名并以逗号隔开显示:
<span style="font-size:18px;">select wm_concat(name) from test;

执行结果为:
   a,b,c,d,e</span>
      也许您会有疑问:我不用逗号分隔成行的数据不行吗?答案是:当然行:

<span style="font-size:18px;">select replace(wm_concat(name),',','|') from test;

执行结果为:
      a|b|c|d|e</span>

  Provit,unprovit  :行转列,列转行

Provit 通过表达式将某列的值转换成行,相当于将数据表旋转后的该字段显示;

下面是一个简单的demo:

create table tb(姓名 varchar(10),课程 varchar(10),分数 int)
insert into tb values('张三','语文',74)
insert into tb values('张三','数学',83)
insert into tb values('张三','物理',93)
insert into tb values('李四','语文',74)
insert into tb values('李四','数学',84)
insert into tb values('李四','物理',94)

select * from tb;
-----------------执行结果-------------------
姓名         课程         分数
---------- ---------- -----------
张三         语文         74
张三         数学         83
张三         物理         93
李四         语文         74
李四         数学         84
李四         物理         94
  我们可以使用普通的sql语句实现每一科目中最高分,相应的课程名称和对应的姓名:

select 姓名,
 max(case 课程 when '语文' then 分数 else 0 end)语文,
 max(case 课程 when '数学'then 分数 else 0 end)数学,
 max(case 课程 when '物理'then 分数 else 0 end)物理
from tb
group by 姓名
      但是数据量大了之后这种方法毕竟性能不高,也不是明智之选,所以我们可以试试下面的方法:

select * from tb pivot(max(分数) for 课程 in (语文,数学,物理))a
--------------------------------结果-----------------------------------
姓名         语文          数学          物理
---------- ----------- ----------- -----------
李四         74          84          94
张三         74          83          93
3.oracle的job定时任务:

具体请参照《oracle的定时任务》,这里就不再赘述;

4.利用随机数插入数据

for i in 1..10 loop
    insert into t_yscvalues(
        i, to_char(dbms_random.random()),i);
end loop;
commit;
    以上就是小编在工作中遇到的技术总结,有些没有太详细的写,如有需要请通过评论及时联系小编喏!
      





  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 37
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值