`
zzzwp
  • 浏览: 20666 次
社区版块
存档分类
最新评论

Oracle应用笔记

 
阅读更多
1、数字型的字符串在order by排序时会出现错乱,如对1、2、3……11,12进行排序,查询结果为1、10、11、12、2、3……9,解决的办法是,可以使用函数to_number()。

2、计算字符串[abca]中某个字符[a]出现的次数,可以使用regexp_count([abca],[a]),如果字符是[.],要加上转义,regexp_count(er.code,'\.')。

3、计算字符串[abca]中某个字符[c]出现的位置,可使用函数instr([abca],[c],[startIdx],[num]),startIdx是指定从第几个位置开始找,num指定查找第几次出现的,如果找不到,返回0。

4、截取字符串,使用函数substr([string],[startIdx],[length]),最后一个参数不填表示截取到最后。

5、decode([条件],[结果1],[返回1],[无结果返回]),结果和返回可多个。

6、树形查询,exp:
select decode(m.lev,1,'一级菜单',2,'二级菜单',3,'功能菜单') 层次,m.name 功能菜单,SYS_CONNECT_BY_PATH(m.name, '>') 路径 
from menu m where m.lev!=4 and m.enabled = 'USERED' 
start with m.pk_id=10 connect by prior m.pk_id=m.fk_parent

可使用level关键字获得数据的层级

7、执行not in null,会产生预料之外情况,查询不到数据,详细原因可参考:
http://www.cnblogs.com/killkill/archive/2010/09/04/1817266.html

8、with as :其实就是把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它。这样对于大批量的SQL语句起到一个优化的作用,而且清楚明了。

9、列转行函数 listagg()
结合with as举个例子:
with temp as(
  select 'China' nation ,'Guangzhou' city from dual union all
  select 'China' nation ,'Shanghai' city from dual union all
  select 'China' nation ,'Beijing' city from dual union all
  select 'USA' nation ,'New York' city from dual union all
  select 'USA' nation ,'Bostom' city from dual union all
  select 'Japan' nation ,'Tokyo' city from dual
)
select nation,listagg(city,',') within group(order by city)
from temp
group by nation
查询结果:
China Beijing,Guangzhou,Shanghai
Japan Tokyo
USA Bostom,New York

10、count加条件计算分组内的数据
count(1) 计算+1
count(null) 不计算
--以下例子源自其他博客:http://blog.csdn.net/yin_jw/article/details/38893607
--学生表
create table t_student
(
  id   number,
  name varchar2(100),
  sex  number
)
;
-- Add comments to the columns
comment on column t_student.id
  is 'id';
comment on column t_student.name
  is '姓名';
comment on column t_student.sex
  is '性别0:男 1:女';
 
--查询男、女生的数量
--count(1),算在总数内。
--count(null),不算在总数内。
select count(decode(sex, 0, 1, null)) boyNum,
       count(decode(sex, 1, 1, null)) girlNum
  from t_student

11、declare程序实例
declare
  stuid number(30) :=135181;
  oldId number(30) :=0;
  maxId number(30) :=0;
  canId number(30) :=0;
  flag number(30) :=1;
begin
     select max(et.id) into maxId from edu_thesis_info et
     where length(et.id)!=7 and et.enabled_flag=1
     and et.student_id=stuid
     and et.elective_id<(select t.elective_id from edu_thesis_info t where length(t.id)=7 and t.enabled_flag=1
     and t.student_id=stuid);
    if maxId is null then
       select min(et.id) into maxId from edu_thesis_info et
       where length(et.id)!=7 and et.enabled_flag=1
       and et.student_id=stuid
       and et.elective_id>(select t.elective_id from edu_thesis_info t where length(t.id)=7 and t.enabled_flag=1
       and t.student_id=stuid);
    end if;
    
    for i in REVERSE (maxId-1000)..maxId loop
        select count(1) into flag from edu_thesis_info et where et.id=i;
        if flag=0 then
           canId:=i;
           exit;
        end if;
    end loop;
    select et.id into oldId from edu_thesis_info et where et.student_id=stuid and length(et.id)=7 and et.enabled_flag=1;
    dbms_output.put_line('学生论文的最大id');
    dbms_output.put_line(maxId);
    dbms_output.put_line('可用id');
    dbms_output.put_line(canId);
    dbms_output.put_line('原论文id');
    dbms_output.put_line(oldId);
end;

12、导出所有的表信息:
select u.table_name 表名,utc.comments 表注释, u.column_name 字段名,a.DATA_TYPE 字段类型,u.comments 注释
from user_col_comments u,all_tab_columns a,user_tab_comments utc
where u.table_name=a.TABLE_NAME and a.OWNER='XMUEDU' and u.column_name=a.COLUMN_NAME and utc.table_name=a.TABLE_NAME
--and a.TABLE_NAME= 'BASIC_CODE'
order by u.table_name,a.DATA_TYPE,u.column_name;

13、获得根据特定属性排序的序号
ROW_NUMBER() OVER(order by es.examno asc)

14、VARCHAR2(20)和CHAR(20)区别:字符串长度小于20时,VARCHAR2(20)字段的长度为实际字符串的长度,CHAR(20)长度固定为20,不足20补空格。

15、
-- 获取序列下一个值
create or replace function get_seq_next (seq_name in varchar2) return number
is
  seq_val number ;
begin
  execute immediate 'select '|| seq_name|| '.nextval from dual' into seq_val ;
  return seq_val ;
end get_seq_next;

-- 获取序列当前值(无需先执行nextval也可使用)
create or replace function get_seq_curr (seq_name in varchar2) return number
is
  seq_val number ;
begin
  execute immediate 'select '|| seq_name|| '.currval from dual' into seq_val ;
  return seq_val ;
end get_seq_curr;
分享到:
评论

相关推荐

    Oracle学习笔记-日常应用、深入管理、性能优化

    资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...

    Oracle学习笔记 PDF

    ### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...

    Oracle学习笔记——日常应用、深入管理、性能优化 示例代码

    Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...

    oracle培训笔记2

    在"Oracle培训笔记2"中,我们可以看到一系列的课程涵盖了XML基础和多行函数的应用,这些都是Oracle数据库管理和开发中的关键知识点。 XML(可扩展标记语言)在Oracle中的应用非常广泛,特别是在数据交换和存储非...

    韩顺平oracle课堂笔记

    《韩顺平Oracle课堂笔记》是一份详尽的Oracle数据库学习资料,涵盖了多个关键知识点,旨在帮助学习者深入理解并掌握Oracle数据库系统的核心技术。在这些笔记中,主要讲解了以下几个方面: 一、存储过程 存储过程是...

    Oracle学习笔记.pdf

    在Oracle学习笔记中,对安装卸载和配置的详尽讲解,不仅为学习者提供了操作指导,而且还涉及到了数据库管理的一些基础知识点。这些内容对于数据库管理员和开发人员来说都是十分重要的,因为它们是操作Oracle数据库的...

    Oracle课堂笔记(很全很详细的Oracle笔记)

    根据提供的信息,我们可以总结出以下关于Oracle的相关知识点: ### Oracle基础知识与分类 #### DDL (Data Definition Language) 数据定义语言 - **DDL** 主要用于创建、修改或删除数据库对象,如表、索引等。 ###...

    ORACLE学习笔记:日常应用、深入管理、性能优化.part1/2

    ORACLE学习笔记:日常应用、深入管理、性能优化.part1

    oracle实用笔记 命令 文档 pdf

    Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据主导地位。这份"Oracle实用笔记 命令 文档 PDF"很可能是对Oracle数据库管理、查询和维护的一份详细指南,涵盖了各种关键的Oracle...

    Oracle数据库笔记大全

    Oracle数据库是世界上最流行的关系型数据库管理系统之一,广泛应用于企业级数据管理、数据分析和应用程序开发。以下将详细阐述Oracle的一些核心知识点。 1. **基础概念和术语**: - **关系型数据库**: 数据以表格...

    李兴华—oracle课堂笔记(全).rar

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,由甲骨文公司开发,它以其高度的稳定性和灵活性在企业级应用中占据重要地位。"李兴华-oracle课堂笔记(全).rar"是一份完整的Oracle数据库学习资料,包含了...

    oracle教程笔记

    首先,Oracle是全球最大的企业级数据库管理系统之一,广泛应用于大型企业的数据存储和处理。它的强大功能包括事务处理、数据仓库、数据集成和安全性等。 在Oracle的安装与配置环节,你需要了解如何在不同的操作系统...

    Oracle学习笔记 Oracle学习笔记

    ### Oracle 学习笔记概览 在Oracle学习过程中,掌握基础的命令与权限管理是至关重要的。以下内容将围绕Oracle数据库的基础操作、用户管理以及权限控制等方面展开。 ### 基础操作 1. **连接与断开** - 使用`conn...

    oracle学习笔记整理

    以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...

    oracle_sql笔记

    这篇笔记主要涵盖了Oracle SQL的基础知识、高级特性和实际应用技巧。 一、基础SQL语法 Oracle SQL遵循标准的SQL语法,包括SELECT、INSERT、UPDATE、DELETE四大语句。用于查询数据的基本结构是SELECT字段列表FROM...

    韩顺平oracle视频笔记

    ### 韩顺平Oracle视频笔记知识点概览 #### 1. Oracle 用户管理 - **概念**:在Oracle数据库中,用户是用来管理访问权限的基本单位。每个用户都可以有自己的模式(schema),其中包含各种对象如表、视图等。 - **创建...

    2011MLDN李兴华Oracle课堂笔记PDF档

    1. **00-开课简介.pdf**:这部分可能包含了Oracle数据库的基本介绍,包括Oracle的历史、发展、应用领域,以及学习Oracle的重要性等基础知识。 2. **01-Oracle简介、安裝、配置.pdf**:这部分将涵盖Oracle数据库系统...

    oracle经典笔记

    这份笔记涵盖了从Oracle PL/SQL编程到SQL查询语言的广泛主题,旨在帮助读者深入理解Oracle数据库的运作机制和应用技巧。 首先,我们来看看《Oracle PL-SQL入门教程(经典).doc》。这份文档详细介绍了PL/SQL,Oracle...

Global site tag (gtag.js) - Google Analytics