美文网首页
Oracle基础学习

Oracle基础学习

作者: didadu | 来源:发表于2020-11-03 17:04 被阅读0次
  • oracle实现汉字按照拼音、笔画和部首排序

    • Oracle9i之前,中文是按照二进制编码进行排序的。
    • 在oracle9i中新增了按照拼音、部首、笔画排序功能。
    • 设置NLS_SORT值SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
    • SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
    • SCHINESE_PINYIN_M 按照拼音排序
      1: 按照笔划排序 select * from 表名 order by nlssort(字段名,'NLS_SORT=SCHINESE_STROKE_M');
      2: 按照部首排序 select * from 表名 order by nlssort(字段名,'NLS_SORT=SCHINESE_RADICAL_M');
      3: 按照拼音排序,此为系统的默认排序方式 select * from 表名 order by nlssort(字段名,'NLS_SORT=SCHINESE_PINYIN_M');
  • 使select语句使查询结果自动生成序号:select rownum,字段 from 表;

  • 快速做一个和原表一样的备份表:create table 新表 as (select * from 旧表);


  • Oracle时间
    • date:精确到秒
写法 含义 显示值
year
yy 两位年 21
yyy 三位年 021
yyyy 四位年 2021
Month
mm 两位月 11
mon 字符集表示 11月/nov
month 字符集表示 11月/november
day
dd 当月第几天 02
ddd 当年第几天 307
dy 当周第几天简写 星期五/fir
day 当周第几天全写 星期五/friday
ddspath 日期在月份中的位置 02
Hour
hh 12小时进制 03
hh24 24小时进制 15
minute
mi 60进制 45
seconed
ss 60进制 25
其他
q 季度 4
ww 当年第几周 44
W 当月第几周 1

获取当前季度:select to_char(sysdate,'q') from dual;

  • 集合操作符
    • minus是获取第一张表独有的数据
    • intersect是获取两张表中都有的数据
    • union是整合两张表的数据,都有的只显示一次
    • union all是纯粹的两张表数据整合
    • select 字段 from 表1 minus select 字段 from 表2

  • 序列
    • sequence:序列号生成器,为表中行自动生成序列号,产生等间隔数值(类型为数字),不占用磁盘空间,占用内存
    • 创建序列:
CREATE SEQUENCE 序列名
 [INCREMENT BY n]->定义序列步长,默认为1,负值递减
 [START WITH n]->初始值,默认1
 [{MAXVALUE/ MINVALUE n| NOMAXVALUE}]->最大值 默认没有
 [{CYCLE|NOCYCLE}]->达到最大值,是否循环
[{CACHE n| NOCACHE}]->存放序列内存块大小,默认20
;
  • NEXTVAL,CURRVAL
    • NEXTVAL
      第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加INCREMENT BY的值。调用一次增加一次,可以同一个语句多次调用
    • CURRVAL ,当前值,第一次NEXTVAL初始化之后才能使用,否则出错
    • 使用Sequence的环境
      • 不包含子查询、snapshot、VIEW的 SELECT 语句
        -INSERT语句的子查询中
      • INSERT语句的VALUES中
      • UPDATE 的 SET中

  • 存储过程

    • 创建
    create [or replace] procedure 存储过程名(param1 in type,param2 out type)
    as
       变量1 类型(值范围);
       变量2 类型(值范围);
    begin
       select count(*) into 变量1 from 表A where列名=param1;
       if (判断条件) then
            select 列名 into 变量2 from 表A where列名=param1;
            dbms_output.Put_line('打印信息');
       elsif (判断条件) then
            dbms_output.Put_line('打印信息');
       else
            raise 异常名(NO_DATA_FOUND);
       end if;
    exception
       when others then
            rollback;
    end;
    
    • 参数

      • in :传入参数,存储过程运行时已完成初始化
      • out:在存储过程中赋值,传回
      • in out:接收原有值,并返回更新后的值
    • 变量类型声明

      • 变量 基础类型
      • 变量 指定数据表%rowtype->表中一行数据的变量类型
      • 变量 指定数据表.指定字段%type;->表中指定字段的变量类型
    • into:赋值关键字

    • 异常(Exception):

      • 预定义异常:由PL/SQL定义的异常。由于它们已在standard包中预定义了,因此,这些预定义异常可以直接在程序中使用,而不必再定义部分声明。如:
        NO_DATA_FOUND->select/insert不返回任何行,
        TOO_MANY_ROWS->返回多行
      • 非预定义异常:用于处理预定义异常所不能处理的Oracle错误。
      • 自定义异常:用户自定义的异常,需要在定义部分声明后才能在可执行部分使用。用户自定义异常对应的错误不一定是Oracle错误,例如它可能是一个数据错误。
    • 游标:

      • 游标的属性及意义
        • SQL%ROWCOUNT,成功执行的数据行数
        • SQL%FOUND,值为TRUE代表增删改或单行查询操作成功
        • SQL%NOTFOUND,值为TRUE代表增删改或单行查询操作失败
        • SQL%ISOPEN ,处于执行过程中为真,结束后为假
    • 使用游标

      • 声明游标,进行查询:

         CURSOR 游标名称 IS SELECT 字段1, 字段2 FROM 表;
        
      • 打开游标
        open cursor;

      • 使用游标

       Fetch 游标  Into 变量;
      If 变量%Notfound Then
                  ...
      else
                  ...
       End If;   
      
      • 关闭游标
        close 游标;

  • forall
    • 基于下标,遍历到的下标必须存在,否则报错:forall i in 最小值 … 最大值
    • 基于下标,跳过下标不存在的元素:forall i in indices of 集合变量
    • 基于元素值:forall i in values of 集合变量

  • BULK COLLECT
    • 能进行批量检索,会将检索结果结果一次性绑定到一个集合变量中,而不是通过游标cursor一条一条的检索处理
    • SELECT 字段 BULK COLLECT INTO 变量(集合) FROM 表 where 条件;
    • fetch into
//创建游标
cursor 游标 is select 字段 from 表 where 条件
//创建和游标元素类型一样的指定大小的联合数组类型
type 集合变量类型 is varray(大小) of 游标%rowtype
//声明是集合数组类型的变量
集合变量 集合变量类型;
begin 
    fetch 游标 bulk collect into 集合变量 [limit rows];
    //遍历集合,forall批量操作
    //SAVE EXCEPTIONS->当在执行过程中如果遇到异常,数据处理会继续向下进行,发生的异常信息会保存到SQL%BULK_EXCEPTONS的游标属性中
        forall i in 起始值(1) .. 集合变量.count  SAVE EXCEPTIONS
            update 表 set a=b where 集合变量(i);
        COMMIT;
    END
  • RETURNING INTO
    • 在进行insert、update和delete操作的时候,都可以在末尾加入returning into字句。这字句的作用是将进行DML操作影响到数据行的列值,保存进指定的PL/SQL变量中。
      insert into 表 vlues (值1,值2,值3) returning 字段1,字段2 into 变量1 ,变量2

相关文章

  • Oracle基础学习

    oracle实现汉字按照拼音、笔画和部首排序Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9...

  • Oracle数据库学习整理(一)

    Oracle 基础知识 查询数据 本节将学习如何从Oracle数据库中查询数据。 ●Select语句-演示如何查询...

  • Oracle学习笔记(二):SQL基础

    自己学习Oracle的相关笔记,主要备忘,并不详细,如有错误欢迎大家指正~~~ Oracle基础语法 DDL使用C...

  • Oracle基础学习(一)

    数据库体系结构和ASM oracle数据库是一中关系型数据库,简称rdbms 上图我们可以看到oracel数据库主...

  • oracle 入门与应用

    Oracle入门学习阶段:本阶段通过15个讲义与练习步骤, 可以打下oracle的入门和管理基础。 第1讲:ora...

  • oracle基本操作

    oracle基础部分:基本使用;用户管理;表管理 oracle高级部分:oracle表的查询;oracle的权限、...

  • 2019-01-10

    小编正在学习c#http://ADO.NET连接Oracle数据库的知识,刚好又可以重新去回顾下Oracle的基础...

  • Oracle 数据库 知识总结

    Oracle 基础 一、概述 Oracle的安装 下载地址:oracle官网卸载: 安装目录/dbhome_1/d...

  • 大数据学习一般都学什么,学习路线

    基础阶段:Linux、Docker、KVM、MySQL基础、Oracle基础、MongoDB、redis。hado...

  • 推荐一个Oracle学习网站

    推荐一个我个人的Oracle数据库学习网站,比较系统性的整理,会持续更新的网站。网址: Oracle基础教程: h...

网友评论

      本文标题:Oracle基础学习

      本文链接:https://www.haomeiwen.com/subject/rnhivktx.html