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;

  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/createyuan/p/6767894.html
Copyright © 2011-2022 走看看