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
原文地址:https://www.cnblogs.com/comrd/p/3578281.html