考虑到今后计划学习Oracle,觉得需要记录一下Oracle使用应该注意的地方:
1、修改会话的时间显示格式:
alter session set nls_date_format='YYYY-MM-DD hh24:mi:ss';
2、设置为允许输出:
set serveroutput on;
3、Oracle匿名块不允许直接输出select结果
这样可以;
begin
dbms_output.put_line('想要显示的结果');
end;
这样报错:
begin
select * from employees;
end;
ORA-06550: 第 2 行, 第 1 列:
PLS-00428: 在此 SELECT 语句中缺少 INTO 子句
4、rownum是对查询结果创造的伪列,而非属于表。
下面语句是查不出数据的。
select salary from employees where rownum>5;
可以通过此子查询实现:
select * from
(select rownum num, salary from employees ) T where T.num>5;
5、select 语句投影,不能将*和其他列一起(SQL server无此限制)
select salary ,* from employees;
6、between and用于字符串需要注意
select * from CHLTBL where col2 between 'A' and 'C';
表示的含义是所以以A,B开头的字符串和C,C%是不包含的。
7、long类型的使用
一个表中最多只能存在一个long类型的列,同时long类型的列不能用于group by 子句。
8、集合条件:表达式in ('A','B','C')与表达式='A' or 表达式='B' or 表达式=‘C’,是等价的。这意味着二者之间不会有性能上的不同。
9、表达式 not in 集合这样的条件不能慎用,因为null值会被剔除掉。
10、字符串字段的比较
insert into CHL_UPDATE1(fid,fname,Fname_New) values(2,'cc','');
insert into CHL_UPDATE1(fid,fname,Fname_New) values(2,'dd',null);
insert into CHL_UPDATE1(fid,fname,Fname_New) values(2,'ee',' ');
insert into CHL_UPDATE1(fid,fname,Fname_New) values(2,'ff',' ');
--查询
select * from CHL_UPDATE1 where fid=2;
--返回 cc dd
select * from CHL_UPDATE1 where Fname_New is null;
--返回 无
select * from CHL_UPDATE1 where Fname_New='';
--返回 ee
select * from CHL_UPDATE1 where Fname_New=' ';
--返回 ff
select * from CHL_UPDATE1 where Fname_New=' ';
查询所有为null的或者为空格的记录
select * from CHL_UPDATE1 where replace(Fname_New,' ','') is null
注意:下面语句是查不到数据的
select * from CHL_UPDATE1 where Fname_New='';
11、oracle创建表是 是否允许为空与缺省值的先后顺序
--下面两个语句在sql server下都可以正常执行
--第一句在oracle下执行报错
create table test001(fid int,fdate date,fname char(1) DEFAULT '1' ,flongname nvarchar(2000) null default '000' );
--第二句在oracle下执行不会报错
create table test001(fid int,fdate date,fname char(1) DEFAULT '1' ,flongname nvarchar(2000) default '000' null );
待续
努力不会背叛
博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正