• oracle 常用参考


    to_char(sysdate ,'yyyy-mm-dd');
    select to_char(2,'000') from dual;

    to_date(sysdate ,'yyyy-mm-dd');

    --获取当前天(第多少号)
    select to_char(SYSDATE,'dd') from dual;
    --本月最后一天
    select to_char(last_day(sysdate),'dd') from dual;

    --取前一天

    to_char(sysdate -1,'yyyy-mm-dd')

    --取当前日期前一个月的第一天的日期
    SELECT last_day(add_months(SYSDATE, -2)) + 1  FROM dual;

    --取当前日期前一个月的最后一天的日期
    SELECT last_day(add_months(SYSDATE, -1)) FROM dual;

    --转大写去空格

    select upper(trim(列名)) from dual;

    --调用远程时

    select "fdbs" from xsmx@cs

    --下面这句话是有错误:因为存的列是rq且是远程访问sqlserver,所以日期要小写(rq),并且加上双引号

    select "fdbs" from xsmx@cs where RQ=to_char(sysdate -1,'yyyy-mm-dd')

    select length('aaa') from dual;

    --oracle查询的时候,区分大小写,sqlserver不区分

    --使用like时,不要以%号开头,因为以%开头查询时,不会使用索引

    select * from t_jzt_common_branch where higherbranchflag like 'FDJ%'  

    1、 创建表空间:

    create tablespace 表空间名称 datafile ‘文件地址以及文件名’ [ size ] [ autoextend [ on | off ] ];

         注:【 size 】 表示要创建的表空间的大小。单位可以为 K 或者 M。

        【 autoextend 】 表示创建的表空间是否为自动扩展类型。
    2、 创建新用户:
    create user 用户名 identified by 密码 [ default tablespace 表空间名 ] [ temporary tablespace 表空间名 ];
    注:【default】 语句表示为新创建的用户分配一个默认的表空间;【tempporary】表示为新创建的用户提供一个临时的表空间。
    3、 为新用户授予权限:
    grant connect to 用户名;   表示授予用户连接数据库,创建表以及其他结构。
    Grant resource to 用户名; 表示授予用户使用数据库空间的权限
    Grant select | update on emp to 用户名;
    注:select 表示授予用户查询emp 表的权限,update 表示授予用户修改emp 表的权限。
    4、 修改密码:
    alter user 用户名 identified by 新密码;
    5、 删除用户:
    drop user 用户名 cascade ;
    注:当用户拥有模式对象时必须使用 cascade;
    6、 创建表:
    create table 表名称 (字段1 类型,字段2 类型,……..字段N 类型);
    7、 修改表结构:
    alter table 表名称 madofy (列名 类型,………);
    表示修改表中的类型和字段的大小。
    alter table 表名称 add (字段 类型,……..);
    表示向表中添加新列。
    Alter table 表名称 drop column 列名称;
    表示删除表中的现有列。
    8、 清除表中所有数据:
    truncate table 表名称;
    truncate 命令和 delete 命令相似,都可以用于删除表中所有的记录,不同的是:truncate 命令表示删除表中所有记录并立即释放空间,而delete 则需要提交事务后才能释放空间,当确定数据无用时使用truncate 比使用delete 效率更高。
    9、 查看表结构:
    desc 表名称;
    10、              删除表
    drop table 表名称;
    11、              查询无重复列:
    select distinct 列名 from 表名;
    12、              根据现有表创建新表:
    create table 新表名 as select * from 旧表名;
    注:改语句非常灵活,新表中的字段和数据根据查询语句而定。如: 可以将查询的 * 改为旧表中存在的列,可以在查询语句后添加where 条件以控制记录插入到新表。
    13、              插入来自其他表的记录:
    insert into 表名A select * from 表名B [ where 条件];
    注:改语句要求表A要于表B具有相同的表结构。
    14、              将表的操作权限授予给其他用户:
    grant select | delete | update on 表名 to 用户名 [ whit grant option];
    注:【with grant option】表示改授权用户可以将此权限授予其他用户。另外,改语句还可以只授予用户对某个表的某些列的修改权限,其语法如下:
    grant update (列名1 ,列名2~~~) on 表名 to 用户名;
    15、              撤销已授权用户的权限:
    revoke select | update | insert on 表名 from 用户名;
    16、              集合操作符:
    a)         union 操作符用于返回两个查询选定的所有不重复的行。例如:
    select ID from  表名1 union select ID from 表名2;
    b)        union all 操作符用于返回两个查询选定的所有行。例如:
    select ID from  表名1 union all select ID from 表名2;
    c)        intersect 操作符用于只返回两个查询选都有的行。例如:
    select ID from 表名1 intersect select ID from 表名2;
    d)        minus 操作符用于返回第一个表有的行而表二没有的行。例如:
    select ID from 表名1 minus select ID from 表名2;

     17、              函数:略

     18、              表分区:

    一般表的分区是在创建表的时候便已经完成。例如:
    范围分区:
    create table 表名称
    (
            ID number(4),
            Name char(20)
    )
    partition by range (列名)
    (
            partition 分区名 values luess than (分区边界值1) [tablespace 表空间名],
            partition 分区名 values luess than (分区边界值2) [tablespace 表空间名],
            partition 分区名 values luess than (分区边界值3) [tablespace 表空间名],
    partition 分区名 values luess than (maxvalue) [tablespace 表空间名]
    );
    散列分区:
    partition by hash (列名)
    (
            partition 分区名 [tablespace 表空间名],
            partition 分区名 [tablespace 表空间名],
            partition 分区名  [tablespace 表空间名],
    partition 分区名 [tablespace 表空间名]
    );
    列表分区:
    partition by list (列名)
    (
            partition 分区名 values (‘匹配值’) [tablespace 表空间名],
            partition 分区名 values (‘匹配值’) [tablespace  表空间名],
            partition 分区名 values (‘匹配值’) [tablespace 表空间名],
    partition 分区名 values (‘匹配值’) [tablespace 表空间名]
    );
    19、              分区的维护:(主要用于对已经创建的分区进行操作)
    添加分区:
    alter table 表名称 add partition 分区名称 values less than (数字值);
    注: 添加分区可以用于所有类型的表分区,其语法与对应的分区语法类似。
    删除分区:
    alter table 表名称 drop partition 分区名称;
    注: 删除表分区的前提是必须创建了该分区,另外,在删除分区时,分区中的数据也会删除,所以在删除之前必须确定该分区中的数据已经没有存在的必要。
    截断分区:截断分区的作用是删除分区中的所有记录。
       Alter table 表名称 truncate partition 分区名称;
    合并分区:
    alter table 表名称 merge partition 分区名称1,分区名称2 into partition 新分区名称;
    注: 合并分区可以将范围分区复合分区表的两个相邻分区连接起来。结果分区将集成北合并的两个分区的较高上界。
    拆分分区:
    alter table 表名称 split partition 要分区的分区名称 at (创建分区时的条件值) into(partition 新分区名称1,partition 新分区名称2);
    注:拆分分区只可用于范围分区。另外也还可以重命名新分区。例如:
        alter table 表名称 rename partition 旧分区名称 to 新分区名称;
    20、              表锁定:
    行级锁:
    select * from 表名称 where 条件 for update [ of 字段1,字段2,……];
    注:该锁为行级锁,只对满足条件的指定的字段实行锁定。
    表级锁:
    loca table 表名称 in share mode  [ nowait ];
    注:【nowait】表示避免因为延迟的等待。该语句只对表实现共享锁,还有其他锁模式。请看书78页
    21、              创建同义词:(所谓同义词就是对象的别名)
    私有同义词:
    create [ or replace ] synonym 新建同义词名称 for 要创建同义词的对象名称;
    注:私有同义词,顾名思义,旧时创建以后只能由该创建用户使用。创建它的前提条件是,用户必须具有对该表或其他结构的访问权限。
    公有同义词:
    create [ or replace ] public synonym 新建同义词名称 for 要创建同义词的对象名称;
    注: 公有同义词对所有的用户都有效,但是创建它的前提条件是:用户必须是管理员的身份。另外当公有同义词和本地对象名称由重复时,本地对象优先。
    22、              删除同义词:
    drop [ public ] synonym 同义词名称;
    注: 当要删除公有同义词时,用户页必须时管理员的身份。
    23、              序列:(所谓序列,就是实现数据自动递增的种子)
    a)         创建序列:
    create sequence 序列名称 
    [ start with 开始的序列号 ]
    [ increment by 序列号的间隔 ]
    [ maxvalue 序列号的最大值 | nomaxvalue ] -- 表示指定序列的最大值。Nomaxvalue 表示没有最大值。
    [ minvalue 序列号的最小值 | nominvalue ] -- 表示指定序列的最小值,它必须小于或等于start with 的值,并且小于 maxvalue。Nominvalue 表示没有最小值。
    [ cycle | nocycle ];   -- 表示当序列到达最大或最小值时 是否从头开始
    b)        访问序列:
    序列名.nextval 表示获得序列的下一个值;――主要用于向表中插入记录。例如:
    insert into 表名称 values (序列名.nextval,~~~~~~~);
    序列名.currval 表示获得序列的当前值;―― 主要用于查看。 例如:
    select aa.currval  from  dual; 
    注: aa 为已经创建的序列,dual 是系统表。
    c)        更改序列:
    alter sequence 序列名称 
    [ increment by 序列号的间隔 ]
    [ maxvalue 序列号的最大值 | nomaxvalue ] -- 表示指定序列的最大值。Nomaxvalue 表示没有最大值。
    [ minvalue 序列号的最小值 | nominvalue ] -- 表示指定序列的最小值,它必须小于或等于start with 的值,并且小于 maxvalue。Nominvalue 表示没有最小值。
    [ cycle | nocycle ]; -- 表示当序列到达最大或最小值时 是否从头开始
    注:不可以更改序列的start with 的值。
    d)        删除序列:
    drop sequence 序列名;
    a)         创建视图:
    create or replace view 视图名称 as 
    select 表A.字段1,表A.字段2,……,表B.字段1,表B.字段2……
    from 表A,表B  on 表A. 字段=表B.字段;
    b)        删除视图:
    drop view 视图名称;
    25、              索引:
    a)         创建索引:
    create index 索引名称 on 表名称 (列名称) [ tablespace 表空间名称];
    注:索引还有其他多种类型,请参看书102-103页。
    26、              游标的使用:
    a)         动态游标:示例如下:
    declare
        存储游标的变量 test_tab%rowtype;
    --定义游标
    cursor 游标名称 is select * from test_tab where 条件; 
    begin
            open 游标名称;--打开游标
               loop – 对游标进行循环操作
                  fetch 存储游标的变量 into 游标名称; --将游标的值赋给变量
                  exit when 游标名称%notfound; --结束循环的条件
                  dbms_output.put_line (游标名称.字段名); --对赋值的变量操作
                end loop;
                close 游标名称;
        end;
    b)        循环游标:(特点:可以直接对有表进行操作,不需要打开、显示赋值、显示判断结束的条件、关闭游标等建议使用改类型游标。示例如下:
    declare
          cursor 游标名称 is select * from cs_test where name='chenshan'; 
    begin
               for 变量 in 游标名称
                loop
                   dbms_output.put_line(变量.字段名称);
               end loop;
    end;
    c)        ref 游标:(特点:可以在运行时才确定游标要执行的sql 语句,更加灵活)。其示例如下:
    declare
          type temp is ref cursor;
           aa temp;
    begin
         if 条件 then
            open 游标名称 for select * from cs_test where 条件;
         elsif 条件 then
           open 游标名称for select * from cs_goods where 条件;
         else
             open 游标名称for select * from cs_test where 条件;
         end if;
         fetch 游标名称 into 存储游标的变量
         loop
             具体的操作;
         end loop;
         close 游标名称;
    end;
    27、              过程:
    a)         创建过程:
    create or replace procedure (参数列表)
    as
     --本地变量申明
    begin
         --过程的主体操作
    exception
            when 条件 then
                --错误处理;
    end
    b)        :执行过程:
    execute 过程名称(参数列表);
    注:过程
    c)        :将执行过程的权限授予其他用户
    grant execute on  过程名 to 用户名;
    注:过程的调用不应该在sql 语句块中;
    d)        :删除过程
    drop procedure 过程名;
    28、              函数:
    a)         :创建函数
    create [ or replace ] function function_name(parameter1,parameter2,......)—参数列表
    return 要返回的数据类型
    is | as
    [ 本地变量声明 ]
    begin
                【函数主体】;
    exception
                 when tiaojian then
                    【错误处理主体】
    end;
    b)        :调用函数
    可以为查询语句:
    select 函数名称 from dual;;
    也可以为pl / sql 语句块调用
    begin
           。。。。。。。。。。。。
           调用函数;
           。。。。。。。。。。。。
    end;
    c)        将函数的使用权限授予其他用户:
    grant execute on 函数名 to 用户名;
    d)        删除函数:
    drop function 函数名称;
    29、              程序包:
    a)         程序包规范的创建:
    create or replace package cs_manage_findindent as
           --声明函数
    function func_addgoodds (goodstypeid  number , goodstypename varchar2) return  varchar2
           --声明过程
           procedure 过程名称(参数);
           --声明游标
           cursor 游标名称(参数) return 返回的数据类型;
    end;
    b)        程序包主体的创建:
    create  [ or  replace ]  package  body  程序包名称  is | as
           --下面是函数主体
    function  func_addgoodds ( goodstypeid  number , goodstypename varchar2 )
    return  varchar2  as
          begin
    insert  into  cs_ProduceType  values ( goodstypeid , goodstypename );
               return '操作成功' ;
           exception
                   when others then
                       return '操作失败' ;
           end
          --下面是过程主体
           procedure 过程名 (参数列表) as
           begin
             过程主体;--pl/sql 语句块)
          exception
                 when others then
                      错误主体;
          end;
           --下面是游标主体
    cursor 游标名称 (参数列表) return 应该返回的数据类型(一般为表名称或者为 (表名称 % ROWTYPE) is  查询语句;
    end;
    注:程序包主要是用于包含过程,函数,游标等操作的集合,它的使用能够让pl/sql代码变得更加简洁、易懂,同时管理员管理起来也更加轻松。
    程序包分为两个部分:一个为规范声明,另一个为程序包主体。顾名思义,规范声明是声明程序包中具体要实现的各种对象,而程序包主体则是具体实现规范声明中已经声明的各种对象。
    程序保就好比是一本书,书的目录就相当于程序保的规范声明,而书中的章节内容就相当于是程序包的主体,它是对目录的一个实现。
    30、              触发器:
    a)         创建触发器:
    create or replace trigger 触发器名称
    before | after [ delete | update | insert ]
    on 表名称
    for each row
    begin
        --开始实现触发器的主体
    insert into cs_test_temp values(:old.name,:old.age,:new.sex);
        dbms_output.put_line('已经启动了触发器!!!');
    exception
            when others then
                dbms_output.put_line('发现未知错误!!!');
    end;
    before | after 表示改触发器是在事件之前还是事件之后被触发。
    [ delete | update | insert ]表示选择可以触发该触发器的事件。
    for each row 表示对每一行的修改都会触发该触发器,即创建了一个行级触发器。
    :old.name 表示事件之前name的值。
    :new.sex   表示事件之后name的值。
    31、              产生随机数字的语法
    num := dbms_random . random ;
    32、              删除重复的记录:
    delete from 表名称 where id in
           ( select id from 表名称 group by id having count( * ) > 1)
    and
              ( select min( rowid ) from 表名称 group by id having count( * ) > 1) ;
    注:group by 关键字用于将不重复的字段全部列出,以及将重复的字段列出一个。having 则表示在group by 语句后的条件关键字,因为在group by 后面不能使用where条件关键字来使用条件语句。
  • 相关阅读:
    nginx 启用http2 https 无法访问的问题
    Automating CSS Regression Testing
    jasmine 使用
    编写浏览器和Node.js通用的JavaScript模块
    Cucumber 使用例子
    Cucumber 之Gherkin
    Cucumber
    Cobertura 代码覆盖率测试
    spring && Cobertura && maven &&junit 单元测试以及测试覆盖率
    spring retry 使用
  • 原文地址:https://www.cnblogs.com/pan11jing/p/1503646.html
Copyright © 2020-2023  润新知