日期:2014-05-16  浏览次数:20405 次

oracle小总结
删除掉重复数据的语句,但是这个语句执行的效率有点低,很慢,暂时还没找到好的解决方法。
delete from t_user where rowid not in (select max(rowid) from t_user group by user_id )

注意:在很多数据库中,字段默认值如果没有设置或没有指定NOT NULL的话,默认就是NULL,所以在
涉及到程序编程的时候可能会遇到这样的问题:在程序中我要取得这个值,并把它转成相应的类型显示出来
但是有时候这个字段并没有赋值,我们通常希望输出是0,而实际在数据库中是NULL,这样就会抛出类型不匹配的异常。
所以,在建表时,对涉及到数值类型的字段,最好指定默认值,如0,0.00等。
例:
create table test(
id number(10,2)default 0,
name varchar2(20)
);
再执行insert into test(name) values('a');后
查询 select id from test where name='a';
结果就是0.00

Oracle的授权:EXECUTE IMMEDIATE的权限问题
当执行DDL语句时,仅有DBA权限是不够的,必须要分配权限,如:
grant create table to 用户名

导入导出命令(可以在命令行运行):
导出:exp cnc4006/cnc4006@chorpin file='E:\cnc4006.dmp';
导入:imp cnc4006/cnc4006@chorpin file='E:\cnc4006.dmp' full=y;
这样是把整个数据库的结构跟数据一起导,如果想要单独导一个或几个表的话,可以用PL/SQL developer的菜单来操作:
tool->export tables | tool->import tables

创建一个新表,这个表的字段是从另外一个表得到,连值一起拷过来:
create table t_bill_test as select * from t_bill;

如果不想把值一起拷过来,可以加条件,设置主键为空
create table t_bill_test as select * from t_bill where flow_id='';

下面的例子中会为"Persons"表制作一个备份
SELECT * INTO Persons_backup FROM Persons