由于某些原因,在一个新公司只呆了一个多月就走了,学了些oracle的东西,觉得有必要记录下来。可能有些地方不是很完善,欢迎指正。
1. sql语句中in的对象是一种集合,里面数据重复不重复无影响
2. Oracle的导出可以用pl/sql developer或Oracle sql developer等工具进行导出;还可以在cmd命令行下使用exp或expdp命令等导出,expdp是exp的加强版,都需要exp.exe文件的支持,orcle的精简版中没有exp.exe文件。
导出语句: exp system/test@192.168.1.198/orcl file=d:\exp_test.dmp tables=TABLE_%
导入语句:imp user/pwd@db_name file=D:\table.dmp log=d:\imptable.log tables=(table1)
3.Oracle SQL Developer 的高级特性:http://www.oracle.com/ocom/groups/public/@otn/documents/webcontent/229077_zhs.htm
4.Oracle SQL Developer的导入导出注意事项
导出:导出ddl选项中,想要不同的数据库中建立,只要选中“美化显示”和“终止符”标签即可,“显示方案”和“存储”不要选
导入:导入前需要将原来同名的表删除包括约束等信息。数据预览模块很卡
5.oracle中的rownum只有<或<=,没有>,对于=也只能设定=1的情况,具体原因查看rownum的实现机制
rownum不受order by的影响,是根据数据库中数据存在的顺序定的
例子:查找第600行与700行之间的数据select taxno,name from bc_enterprise where rownum <700 minus select taxno,name from bc_enterprise where rownum <600
6.Oracle的CONCAT()只允许两个参数,可以用||来一次串联多个字符
7.修改数据前先备份一下
8.union是对两部分数据进行合并,数据的字段内容是一样的,单用union是合并重复行,可以去重,用union all 不可以合并重复行
9.可以用create or replace的对象有:functions, procedures, packages, types, synonyms, trigger and views,就是没有table,也没有sequence。
10.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,
那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
11.rollback to savepoint 只能适用于没提交之前,一旦commit之后,定义的savepoint都将删掉,一旦commit,rollback也不起作用。
12.exit是跳出循环,没有break关键字,支持continue,用法与高级语言中差不多,不过好像是新版本才支持,具体哪个版本没有考究。一般不建议用goto语句,容易引起混乱。
13.oracle中<>、!=、~=、^=都是不等于号的意思,但有的为null的字段只能用is null和is not null来查询出来,不等于号是查不出来为null的字段的。
14.存储过程的begin和and之间相当于程序中的'{'和'}',但二者之间必须有语句,否则编译不过,没有要写的语句时可以用null;
15.有的时候存储过程中使用dbms_output.putline(xxx);这样的语句打印时,会报“buffer overflow”之类的错误,就是你要打印的东西太多了,缓存大小有限,溢出了,解决办法是在打印之前加入dbms_output.enable(50000);这样的语句,扩大缓存大小,只可以自己设定,最大到多少没有测试过。
16.create table需要create any table权限,而权限来自DBA角色,默认在回话中有效,但在存储过程中无效,可以显式的将权限赋予用户:GRANT CREATE ANY TABLE TO USER;,不然会报“ORA-01031:权限不足”的错误。
17.“select ... into 新表 from 旧表 where ...” 的句型只适用于sqlserver,在oracle中要实现将一个现有表的记录复制到新表中,用“create table 新表 as select ... from 旧表 where ...”。在oracle中,select into用于将select出的数据赋值给某一个变量,select后的只能是一个数据。如果表的结构已经存在,只需要填值,则需要insert into 需要填入值的表(字段1,字段2,字段3...) select 字段1,字段2,字段3 from 源数据表