北京oracle培训_oracle培训哪家好_CUUG官方论坛_CUUG培训怎么样_CUUG官网

 找回密码
 立即注册
查看: 10269|回复: 12

oracle 知识共享

[复制链接]
发表于 2012-7-11 16:00:12 | 显示全部楼层 |阅读模式
本帖最后由 2544370078 于 2012-7-11 16:11 编辑



要求:
查询Oracle表中的数据个数为奇数个时,自动加一个空白行,返回偶数个数据;如果表中的数据为偶数个时,直接返回偶数的所有行。
一、在数据库中,新建一个表,如下:
1.create table MONTHSNUM   
2.(   
3.  MONTHS NUMBER   
4.)  
create table MONTHSNUM
(
  MONTHS NUMBER
)二、新增一行数据;
1.insert into monthsnum values(1);  
insert into monthsnum values(1);三、执行SQL:
1.select *   
2. from (select aa.*, mod(bb.countnum, 2) num   
3.         from (select a.*, rownum rownum2   
4.                 from (select rownum rownum1, t.months   
5.                         from monthsnum t   
6.                       union   
7.                       select to_number('') rownum1, to_number('') months   
8.                         from dual) a) aa,   
9.              (select count(*) + 1 countnum from monthsnum t) bb   
10.        order by aa.rownum2)   
11.where rownum <= (case when num = 0 then rownum else   
12.       (select count(*) countnum from monthsnum t) end)     select *
  from (select aa.*, mod(bb.countnum, 2) num
          from (select a.*, rownum rownum2
                  from (select rownum rownum1, t.months
                          from monthsnum t
                        union
                        select to_number('') rownum1, to_number('') months
                          from dual) a) aa,
               (select count(*) + 1 countnum from monthsnum t) bb
         order by aa.rownum2)
where rownum <= (case when num = 0 then rownum else
        (select count(*) countnum from monthsnum t) end)  返回结果:

说明:如果数据行数为奇数时,补一个空白行,使其为行数为偶数。
四、再新增一行数据;
1.insert into monthsnum values(2);  
insert into monthsnum values(2);五、再执行第三步的SQL
返回结果:

说明:如果数据行数为偶数时,直接返回数据行的所有数据。

回复

使用道具 举报

发表于 2012-7-30 23:23:26 | 显示全部楼层
沙发------------坐下
回复 支持 反对

使用道具 举报

发表于 2012-7-31 13:28:28 | 显示全部楼层
谢谢分享。
回复 支持 反对

使用道具 举报

发表于 2012-8-4 07:56:11 | 显示全部楼层
我的Oracle学习笔记 此去经年,多少回忆,都已随风飘去(有点小伤感了哈!)既然不能控制时间的步伐,那就尽可能的留住它的脚印吧(貌似笔者只过农历新年的哦,所以呢,今天过后,明天依然是2011年,(*^__^*) 嘻嘻~!)

最近因为项目需求变动,让我维护之前Java组做的一个项目,SSH+Oracle开发,一个人顶着巨大的压力,不过好在辛勤付出换来了些许回报,在此将自己在使用oracle过程中遇到的各种繁琐问题加以整理发布出来,希望对大家有所帮助,同时也可以方便自己日后查看!(如果没有其他意外,本文将持续更新,欢迎大家持续关注!因为笔者也是第一次使用oracle数据库,完全是个菜鸟级的。)

首先说一下oracle新手常见的问题,怎样创建主键自增?这个问题比较常见,刚开始笔者也非常纠结,历经一番痛苦的折磨后,终于找到了解决方案:通过序列(sequence)+触发器(trigger)实现oracle里的主键自增。

假设我们已经利用PL/SQL Developer建立了一个表,以ID为主键,那么如何实现自增呢?看下面的SQL语句:


--创建自增序列

create sequence pt_seq start with1increment by1

利用这个自增序列pt_seq再来创建一个触发器:


--创建主键自增触发器

CREATE OR REPLACE TRIGGER pt_increment BEFORE

insert ON practise_test FOR EACH ROW

begin

select pt_seq.nextval into:New.id from dual;

end;

利用pt_seq序列的nextval方法,我们就实现了像SQLServer、MySQL那样的主键自增功能,下面写条测试的SQL语句测试一下效果吧:insert into 表名(NAME,SEX,AGE) Values('张三','男','23')

由于时间紧迫,教程到此暂告结束,如需探讨请留言,再次预祝大家在新的一年里身体健康、工作顺利!
回复 支持 反对

使用道具 举报

发表于 2012-8-14 14:02:17 | 显示全部楼层
很好!
回复 支持 反对

使用道具 举报

发表于 2013-4-3 11:58:21 | 显示全部楼层
不错不错不错不错不错
回复 支持 反对

使用道具 举报

发表于 2014-6-21 19:35:06 | 显示全部楼层
新手看看。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|CUUG认证培训 ( 京ICP备11008061号 )

GMT+8, 2024-5-5 14:48 , Processed in 0.020116 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表