名站网址导航为大家提供关于数据库教程相关的教程网站知识。
Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)
用oracle网站数据库新建连接时遇到ora-12505,此问题解决后又出现ora-12519错误,郁闷的半天,经过一番折腾问题解决,下面小编把我的两种解决方案分享给大家,仅供参考。, 解决方案一:,今天工作时在新建连接的时候遇到ORA-12505,解决后又遇到ORA-12519错误。,ORA-12505:,之前用PL/SQL DEVELOPER和SQLPLUS 登录网站数据库都没有问题,就是应用程序通过JDBC连接Oracle时无法成功连接,出现ORA-12505错误listener does not cu,经过查找,发现Oracle的service_name 和sid_name不一致,而PL/SQL DEVELOPER和SQLPLUS 采用service_name进行连接,而应用程序是按照sid_nam,解决问题很简单,原来是自己将sid_name搞错了;首先查找当前实例的sid_name:SELECT INSTANCE_NAME FROM V$INSTANCE,然后把得到的sid_name填入应用程,ORA-12519:,ORA-12505问题解决后,应用程序可以连接到Oracle,但是却报ORA-12519。经过查找发现这是由于参数的processes设定过低,因为专用站点服务器是一个连接建立一个站点服务器进程,该站点服务器的p,alter system set processes=300 scope=spfile;,然后重启网站数据库即可。,下面补几张PIC对于连SQLDeveloper报ORA-12505错, ,另外做个补充:对于eclipse连接oracle 其失败的关键也就是将sid_name搞错了。现在知道了更新后的sid_name,一切顺利,解决方案二: ,之前我的Oracle网站数据库出现问题,费大波周折终于弄好了,今天又创建了一个DBA管理员的连接相关方式出现问题,本人现在把解决方案分享给大家,希望对您们有用。,连接时报错码:Listener refused the connection with following error:ORA-12505,TNS:listener......,确定这是连接网站数据库的SID错误,,解决具体相关方法:,1.知道您的SID名:可以再注册表中查找,也可以通过借助Oracle的sqlplus相关工具并以管理员相关方式连接敲开始执行命令查看:select instance_name from v$instance;必须是管,2.在Oracle SQL Developer连接相关工具上修改您的网站数据库SID名,我的如下(把"xe"修改成"orcl"):,3.勾选“保存开始执行命令”,“角色”选择网站数据库管理员。,4.点击“保存”和“测试”,并连接,剩下的就是连接成功了。 如若再不行!那就得修改监听网站网站文件了
在Oracle中,有一个很有趣的东西,那就是rownum。当您从某个表中查询数据的时候,返回的结果集中都会带有rownum这个字段,而且有时候也可以使用rownum进行一些条件查询
明确对于rownum 来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是二,以此类推,这个为字段可以用于限制查询的返回的总行数,因为rownum总是从1开始,但是1以上的自然数在rownum 做等于判断时都认为是false 条件,所以无法查到 rownum=n (n》1的自然数),所以查找第二行以后的记录可以用子查询具体相关方法来解决,给子查询中的rownum取别名;对于小于某个值的情况两种具体相关方法都差不多,但是对于某个不等于一的值或者求某个值到某个值之间的情况,用row_number() 别名获得排名 ,比用rownum伪列要简单方便的多;因为伪列总是从一开始查找;
具体用法和区别参见以下具体相关代码;
--取出工资最高的前5位
- select empno,ename,sal,rownum from emp;
- select * from (select * from emp order by sal desc) where rownum<=5;
- select * from (select ename,sal,row_number() over(order by sal desc) as num from emp) where num<=5;
- select * from (select ename,sal,row_number() over(order by sal desc) from emp) where rownum<=5
--工资的前3名
- select * from emp where sal >=any(select * from (select sal from emp order by sal desc) where rownum<=3);
- select * from(select * from emp order by sal desc) where rownum <4;
- select * from (select ename,sal,empno,deptno ,row_number() over (order by sal desc) from emp) where rownum<4;
- select * from (select ename,sal,empno,deptno ,row_number() over (order by sal desc) as num from emp) where num<4
--按照工资排序,取出第6名到第10名
--使用伪列获得
- select * from (select ename,sal,rownum r from (select * from emp order by sal desc) where rownum<=10) where r>5;
--使用排名函数获得
- select * from (select ename,sal,row_number() over(order by sal desc) as num from emp) where num>5 and num<=10;
------- 按工资从高到低获得工资排名第四的员工
- select * from (select ename,sal,row_number() over(order by sal desc) as num from emp) where num=4;
- select * from (select ename,sal,rownum r from (select * from emp order by sal desc) where rownum<=4) where r=4;
总结oracle中rownum和row_number()的区别
row_number()是分析函数,基本语法为row_number() over(partition by 字段 order by 字段)
rownum是一个伪列
- select * from dept where rownum<=3;
- select * from dept where rownum between 2 and 3;这儿会出错,因为rownum的特性(没有1就不会有2,没有3)决定的
- SELECT * FROM (SELECT A.*,ROWNUN FROM DEPT A)T1 WhERE T1.ROWNUM BETWEEN 2 AND 3;这么写不对,要这样写
- SELECT * FROM (SELECT A.*,ROWNUM RN FROM DEPT A)T1 WhERE T1.RN BETWEEN 2 AND 3;
他们的主要区别是:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而函数row_number()在包含排序从句后是先排序再计算行号码。
关于数据库教程相关的教程网站知识今天我们就说到这里了,希望可以帮到大家。