Oracle常出现的问题
1、很多程序员,为了测试,创建用户时都喜欢用123为密码。在oracle里,密码不能以数字开头。
密码前面加个字母就可以创建成功了。
2、创建成功后,首先想到的就是试着连接一下呀,好了,又报错:
要在sysdba里操作授权(conn /as sysdba)不然的话,会报“未连接”的错误。
完整的授权语句一般是:
grant connect,create session,resource,dba to test;
3、如果您在创建用户时确认加上密码,连接也带上正确的密码,但还是出现以下错误的话(至于是什么原因,请看红色字体标示),
就要用:alter user test identified by a123;来修改一下密码了。
在pl/sql developer里登录时,如果在登录框里的“连接为”选择Normal也会出现这种情况,选择:sysdba却可以成功登录。
Oralce用户以normal状态登录不进去了,但是用sysdba确可以登录。究其原因有以下两点:
A. oracle的dba组是操作系统相关的,ORA_DBA是windows下的dba组。因为使用了操作系统认证的原因。不要用户名和密码都能以sysdba身份登陆。
B. 通过重新设置system用户的密码,可以解决以上问题。(以system用户sysdba状态登录,然后用alter user system identified by system(system为密码)语句修改密码,修改成功后即可登录。)
4、当你登录时如果有以下错误提示(这种错误很简单,记住以下解锁语句即可):
conn /as sysdba;---在sysdba用户下才可以进行解锁操作。
alter user test account unlock;
以下为一些常用操作语句:
1 --给用户解锁命令: 2 alter user scott account unlock;(在sys用户下执行) 3 4 --查询表结构: 5 desc emp; 6 desc dept; 7 desc salgrade; 8 9 --查询系统当前时间 10 select sysdate from dual; 11 12 selec ename,sal*12 from emp;--每人的年薪 13 14 用双引号括着的字段表示外号,能保持原形(不会大小写改变) 15 注意:任何含有空值的数学表达式最后都是空值 16 字符串连接用:|| 17 去除重复记录:select distinct deptno from emp; 18 select ename,sal from emp where ename>'CBA';--比较字符串实际和 19 java一样,都是比较ASCII码 20 21 select ename,sal from emp where sal between 800 and 1500;与 22 select ename,sal from emp where sal >=800 and sal<=1500 等值的 23 select ename,sal,comm from emp where comm is null;--查询空值,不能comm=null; 24 不是空值:is not null; 25 26 select ename,sal from emp wehre ename like '%$%%' escape '$'-- 查询含有%有,且自定义$为转义字符(一般/为转义字符)。
oracle版本之间的差异造成的问题:
1、innerjoin:
1 select * from tab1 a inner join tab2 b on a.id=b.id --在oracle 8i里出现上图的错误 2 3 --改为以下写法则没问题 4 select * from tab1 a ,tab2 b where a.id=b.id
2、正则表达式:
1 select * from tab 2 where 3 regexp_like(substr(code, -2) ,'^[0-9]+[0-9]$') --过滤字段为数字 4 order by code desc 5 --以上写法在oracle 8i里出现上图的错误,改为以下写法问题解决: 6 7 select * from tab 8 where 9 trim(translate(substr(code, -2) ,'\1234567890','\')) is null --过滤字段为数字
oracle实现TOP N的功能:
select * from ( select name,age,sex from tab order by a.t_date desc) where rownum<=200