oracle-sql分析练习
http://blog.chinaunix.net/uid-13552913-id-3028644.html
Oracle 修改字段顺序的两种方法
一
----------------------------------------------
伪列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;
相关文章
- 《精通Oracle SQL(第2版) 》
- oracle创建HR示例数据库脚本hr_main.sql分享
- Oracle实现SQL的isnumeric 函数
- SQL中Len, Datalength 对应Oracle中Length,Lengthb
- Oracle数据库安全面面观
- Oracle SQL Developer出现错误 【ora-28002:the password will expire within 7 days】的解决办法
- Oracle expdp导出多表或表中的部分数据
- java.lang.ClassCastException: oracle.sql.TIMESTAMP cannot be cast to java.sql.Timestamp
- sql server 导出的datetime结果 CAST(0x00009E0E0095524F AS DateTime) 如何向mysql,oracle等数据库进行转换
- 《Oracle SQL疑难解析》——1.1 从表中查询数据
- oracle 识别’低效执行’的SQL语句
- oracle函数 SOUNDEX(c1)
- c 语言写的高级Oracle®数据库调优及监控工具
- oracle (DBaaS) 服务介绍
- Oracle SQL 性能优化技巧
- 深入内核:从Oracle ASM自动备份头块到ASMFD
- oracle 在表中有数据的情况下修改表字段类型或缩小长度
- Oracle数据库 | Oracle并发与一致性
- Oracle的 EXEC SQL CONTEXT学习
- oracle 查看表属主和表空间sql
- Oracle PL/SQL编程之变量
- Java笔记4:JDBC纯驱动方式连接Oracle
- Oracle、SQL Server、MySQL分页方法
- 远程桌面连接:出现身份验证错误,要求的函数不受支持,可能是由于CredSSP加密Oracle修正的解决方法
- SQL查询效率(Oracle)
- windows命令创建Oracle新用户并授权导入dmp文件
- Oracle数据库的函数,存储过程,程序包,游标,触发器