zoukankan      html  css  js  c++  java
  • oracle-sql分析练习

    http://blog.chinaunix.net/uid-13552913-id-3028644.html

    Oracle 修改字段顺序的两种方法

    如果要修改字段顺序,一般情况可以使用以下步骤:
    --(1)备份目标表数据
    create table 临时表 as select * from 目标表;
    --(2)drop 目标表
    drop table 目标表;
    --(3)再重新按照要求的字段顺序建表;
    create table 临时表 (col1,................coln);
    --(4)之后用select将数据从临时表导回。

    ----------------------------------------------

    伪列rownum,连接操作符,别名,select list(select之后,from之前的部分)

    select user_id,user_account||','||user_type aa
    from tis_ft_user
    where rownum<5;

    --------------------------------------------

    select systimestamp - 7 from dual;

    systimestamp这个函数返回的数据类型是TIMESTAMP WITH TIME ZONE.

    The return type is TIMESTAMP WITH TIME ZONE.

    systimestamp -7这个表达式

    通常一个表达式不能包含不同数据类型的值,那么上面这个表达式发生隐式的数据转换,将7转成datetime类型,

    数据类型优先级,datetime和interval数据类型>binary_double>binary_float>number>character>所有其它的内置数据类型。


    select * from e1 as of timestamp systimestamp - interval '6' minute
    where id not in(select id from e1);

    这个表达式是一个函数减去一个间隔常量

    两种数据类型进行运算

    systimestamp - interval '6' minute

    ------------------------------------------

    select * from tis_ft_recharge_record t
    where
    t.waybill_id is not null
    and instr(t.audit_time,'2017-04-26')>0
    and t.status='99';

    where condition

    一个条件指定了一个组合,这个组合是由一个或多个表达式和逻辑操作符,并返回true,false,unknown值。

    t.waybill is not null这是一个null条件  格式是 expr is not null

    instr(t.audit_time,'2017-04-26')>0这是一个比较条件,而且前面是一个函数表达式,后面是一个常量表达式,由一个比较条件构成一个简单比较条件。

    格式是 expr1 >|<|=|<>|... expr2

    t.status='99'这是一个比较条件,等号两边都是一个简单表达式,左边是一个列,右边是一个字符串。

    三个条件用逻辑条件and结合起来构成一个条件。

    1=1总是计算为true

    ----------------------------------------------------

    表结构

    desc TMP_UPSTATE_CASEKEY
    Name                Null     Type       
    ------------------- -------- ----------
    TMP_UPSTATE_CASEKEY NOT NULL CHAR(14)   
    TMP_NUM_STATUS_ID   NOT NULL NUMBER(38)
    UPDATED_DATE        NOT NULL DATE  

    需要生成的SQL

    insert into TMP_UPSTATE_CASEKEY values('TMP0000001', 1, sysdate);

    存储过程实现

    create or replace procedure proc_casekey_upstate
    as
      casekey char(14);
    begin
      for i in 1..10000000 loop
        casekey := 'TMP'||lpad(i,7,0);   -- TMP0000001
        insert into TMP_UPSTATE_CASEKEY values(casekey, 1, sysdate);
      end loop;
      commit;
    end;

    begin
      proc_casekey_upstate();
    end;

    测试发现生成一千万条数据用了14分钟左右,性能还是可以了,如果先去掉TMP_NUM_STATUS_ID的外键估计更快。

    下面的方式速度更快,我测试插入一百万条记录十秒左右,当然了,这跟机器性能也有关系。

    insert into TMP_UPSTATE_CASEKEY select 'TMP'||LPAD(rownum,7,0),1,sysdate from dual connect by level <= 1000000;

  • 相关阅读:
    Django的高级用法
    Django信号和缓存
    初识Django框架
    虚拟化之KVM(上)
    jQuery操作页面-day13
    SSM整合
    新闻发布系统
    jsp
    分层
    简单工厂
  • 原文地址:https://www.cnblogs.com/createyuan/p/6767894.html
Copyright © 2011-2022 走看看