ORACLE日常小问题

1.varchar2(20)

支持数字、英文字符长度:20

支持汉字长度:10

EX1: 字段“item1”定义长度varchar2(7)

可以尝试:’1234567‘ 插入到 item1字段,成功

    ‘一二三四五六七’ 插入到item1字段,报错:长度为14,最大值是7

这里的长度是14,14是如何得来的呢?

select lengthb('一二三四五六七') from dual;
执行结果:


如果,想要将一个字符串插入到某个字段(如果前7个字段都是英文字符,数字,就取前七个数字英文),该字段长度varchar2(7),超过长度,默认为‘0100010’,在长度范围内就取原始值

select case when lengthb(nvl(substr('一二三四五六七',0,7),'0100010'))>7 then '0100010' else nvl(substr('一二三四五六七',0,7),'0100010') end from dual;
-- 运行结果:0100010

select case when lengthb(nvl(substr('一二',0,7),'0100010'))>7 then '0100010' else nvl(substr('一二',0,7),'0100010') end from dual;
-- 运行结果:一二

2.空字段null

创建两张测试表:

Create table test007(
       id varchar2(7),
       name varchar2(7)
);

Create table test008(
       id varchar2(7),
       name varchar2(7)
);
插入数据:

insert into test007 values('1','');
insert into test007 values('2','');

insert into test008 values('1','');
insert into test008 values('2','');
查询两张表中,完全一致的记录

SELECT * from test007 a ,test008 b where a.name=b.name and a.id=b.id;
执行结果:


查询id相等,name不等的数据:

SELECT * from test007 a ,test008 b where a.name<>b.name and a.id=b.id;

执行结果:

因此,在查询中,空字段既不会认为是相等,也不能简单地认为不等

若业务上认为都为空的数据表示相等,可将可能为空的字段默认为一个值进行:

SELECT * from test007 a ,test008 b where nvl(a.name,0)=nvl(b.name,0) and a.id=b.id;

执行结果:


或,使用下面的方法:

SELECT * from test007 a ,test008 b where ((a.name is null and b.name is null) or (a.name = b.name)) and a.id=b.id;
执行结果:



下面看下,同一张表空字段分组:

1.首先,向test007表中插入两条数据

insert into test007 values('3','非空');
insert into test007 values('4','');
 当前,test007表中name字段为空的记录有三条,name非空记录有一条,现根据name字段分组,查询相应记录条数

select name,count(id) from test007 group by name;

执行结果:

name:空记录3条,非空记录1条。name空字段默认相等,与上述逻辑有偏差,为什么!!!我不知道......有能帮忙解答的么?疑问

只怪自己接触太浅....


3.排序order by

先看个SQL吧

select distinct (select  codename
          from ldcode
         where codetype = 'selltype'
           and code = (select selltype from lccont where contno = a.contno)) 销售方式,
       b.contno 保单号,
       b.prtno 投保单号
  from ljapayperson a
  left join lcpol b
    on a.polno = b.polno
 where b.salechnl = '08'
   and exists (select 1
          from lccont
         where contno = b.contno
           and signdate >= trunc(sysdate, 'mm'))
 order by (select codename
             from ldcode
            where codetype = 'selltype'
              and code =
                  (select selltype from lccont where contno = a.contno)),b.contno;
这是一个报表的简化SQL,现在要求按子查询的结果及其中一个表的字段值进行排序,执行结果:


提示:不是selected表达式,原因是,排序的子查询条件中a表的字段contno,没有在查询结果中展示,无法按该字段进行排序,即使a表与b表对应字段相等,解决方案:

1.将查询结果项 b.contno 改为 a.contno,排序条件中b.contno 改为 a.contno

2.将排序条件的子查询中a.contno 改为b.contno

以此类推:使用order by时,order by的条件一定是在查询结果中的其中一项

4.分组group by

分组group by,说起来与order by很像,以刚刚的test007为例:

SELECT id,name FROM test007 group by name;
执行结果:

原因:使用group by进行分组时,在查询结果中展示的数据,都必须在group by后出现,聚合函数除外

常见的聚合函数:

1.求最大值函数max()
2.求最小值函数min()
3.求平均值函数avg()
4.求记录数函数count()
5.求和函数sum()

不常用的聚合函数
6.求中位数函数median()
7.求标准差函数stddev()
8.求协方差函数variance()

修改SQL:

1.group by添加分组条件

SELECT id,name FROM test007 group by name,id;
查询结果:


2.查询结果添加聚合函数

select max(id),name from test007 group by name;
查询结果:

分组后再进行排序筛选数据,取各组的第一条数据,要如何处理?

    ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段 DESC) 作为新表的字段行数

示例,在test007表中插入数据:

insert into test007 values('5','非空');
insert into test007 values('6','第三组');
insert into test007 values('7','第三组');
insert into test007 values('8','第四组');
insert into test007 values('9','第四组');
insert into test007 values('10','第四组');
当前test007表中数据如下:

现要按name分组,按id倒序排序,取各组的前两项id(请注意,id的类型是varchar2(),10比9小哦)

首先根据name分组,id倒序,并对每组的数据标注序号

select row_number() over(partition by name order by id desc),id,name from test007;
执行结果:


再对结果进行筛选

select * from (select row_number() over(partition by name order by id desc) as rn,id,name from test007) m where m.rn<3;


哦了!

这次先写这么多吧...







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1 每天监控内容 .............................................................................................................................................................. 4 1.1 内存使用是否超过 90% ................................................................................................................................... 4 1.2SWAP 使用是否超过 50%.................................................................................................................................. 4 1.3 硬盘空间使用是否超过 85% ........................................................................................................................... 4 1.4 归档日志路径是否足够 ................................................................................................................................... 5 1.5 检查数据库进程状态 ....................................................................................................................................... 5 1.6 数据文件状态是否异常 ................................................................................................................................... 6 1.7 是否为 OPEN 模式 ............................................................................................................................................ 6 1.8 监听状态是否正常 ........................................................................................................................................... 6 1.9 告警日志是否存在新的告警 ........................................................................................................................... 6 1.10 检查警告日志、 TRC 文件及 listener 日志 .................................................................................................... 7 1.11 最近一次备份是否成功 ................................................................................................................................. 8 1.12 是否存在 1 周内失败的 JOB .......................................................................................................................... 8 1.13 是否存在新增的无效对象 ............................................................................................................................. 8 1.14 检查表空间的使用情况 ................................................................................................................................. 8 1.15 数据文件是否自动扩展,且数据文件已接近最大值 ...............................................................................10 1.16 在线日志是否存在小于 50M 的及状态不正常 ..........................................................................................11 1.17 检查锁阻塞 ...................................................................................................................................................11 1.18 查看是否有僵死进程 ...................................................................................................................................11 1.19 检查失效的索引 ...........................................................................................................................................11 1.20 检查不起作用的约束 ...................................................................................................................................12 1.21 检查数据库性能, buffer 命中率等 ............................................................................................................12 1.21.1 缓冲区命中率 ...................................................................................................................................12 1.21.2 数据字典命中率 ...............................................................................................................................12 1.21.3 库缓存命中率 ...................................................................................................................................12 1.21.4 内存中的排序 ...................................................................................................................................13 1.21.5 磁盘中的排序 ...................................................................................................................................13 2 每周的工作 ................................................................................................................................................................14 2.1 服务器硬盘空间大于 85%列表 .....................................................................................................................14 2.2 备份情况总结 .................................................................................................................................................14 2.3 安全检查总结 .................................................................................................................................................14 2.4JOB 故障总结 ...................................................................................................................................................14 2.5 新增无效对象总结 .........................................................................................................................................14 2.6 表空间预警情况总结 .....................................................................................................................................14 2.7 告警日志中其他错误总结 .............................................................................................................................15 3 每月的工作 ................................................................................................................................................................15 3.1 文件和目录权限 .............................................................................................................................................15 3.2DB 初始化参数.................................................................................................................................................16 3.3 用户权限 .........................................................................................................................................................16 3.4 备份集有效性检测 .........................................................................................................................................16 《Oracle 日常维护手册》 第 3 页 共 18 页 3.5 检查表空间碎片 .............................................................................................................................................16

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值