Oracle启动和常用知识

1、使用oracle用户登录: oracle/oracle

2、打开终端

3、查看本机IP地址:ifconfig,下图红色框中为ip地址

4、启动数据库:sqlplus sys/oracle as sysdba,在sql视图中输入startup

退出sql视图exit,启动监听lsnrctl start

启动监听:lsnrctl start
查看监听:lsnrctl status
停止监听:lsnrctl stop

 

 

1.ORA-20000: ORU-10027: 执行存储过程的错误 
 
循环执行存储过程时,出现报错:
 
 
解决方法:
        经过一系列的分析以及查看网上的资料终于知道了问题的解决方法,出现的原因是因为我在存储过程中使用了dbms_output.put_line(); 由于过程中有循环,因此输出量比较大,致使缓存不够报错.网上的解决方法是set   serveroutput   on   size   100000 (相当于把缓存设置大一点),但是我执行时候报错 ORA-00922: missing or invalid option,之后还是修改了自己的语句,既然是输出过多导致,我就将数据语句放在循环外面,这样只要输出语句小于缓存就可以了.
 
 
2.Oracle中的trunc函数
ORACLE中TRUNC是截取的函数
用在日期类型上,就是截取到日或时间
SELECT TRUNC(SYSDATE) FROM DUAL;
默认是截取系统日期到日,得到2012-12-19
比如值为"2012-12-19 14:30:50"的日期变量
TRUNC(SYSDATE)得到 2012-12-19 , 和TRUNC(SYSDATE,'DD')一样
TRUNC(SYSDATE,'YYYY'),得到2012-1-1
TRUNC(SYSDATE,'MM'),得到2012-12-1
TRUNC(SYSDATE,'DD'),得到2012-12-19
TRUNC(SYSDATE,'HH')或HH24,得到2012-12-19 14:00:00
TRUNC(SYSDATE,'MI'),得到2012-12-19 14:30:00
TRUNC(SYSDATE,'SS'),是会报错的,直接用SYSDATE不用TRUNC
另外说明一下,截取后得到的仍为date数据类型
 
TRUNC(x,y)用在数值上时(没有四舍五入功能,如果要四舍五入用ROUND(x,y)):
TRUNC(89.985)=89  --缺省的y值默认是0,截取到个位
TRUNC(89.985,1)=89.9 --截取1位小数
TRUNC(89.985,2)=89.98 --截取2位小数
TRUNC(89.985,4)=89.98 --截取4位小数,与原值不变
TRUNC(89.985,-1)=80 --截取到十位,个位补充0
 
 
3.oracle忘记sys密码解决
两种方法找回sys密码:
1.用windows验证(请确认OracleBaseDir/ora92/network/admin/sqlnet.ora文件中
SQLNET.AUTHENTICATION_SERVICES= (NTS)
这行未被注释),然后敲入
sql> connect sys/随意密码 as sysdba;
sql> alter user sys identified by 'new_password';
2.通过orapwd命令重新创建密码文件(每个DB有自己的密码文件)
先把OracleBaseDir/ora92/database/pwd+DBSID名.ora改成另外的文件名,
进入sqlplus,
sql> orapwd.exe file=OracleBaseDir/ora92/database/ pwd myoracle.ora password=newpwd(entries=10);
将OracleBaseDir/ora92/database/myoracle.ora文件名改为pwd+DBSID名.ora
最后,重新启动Oracle服务。
 
4. count(*),count(1)和count(主键)的区别
如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null. 
如: 
    ID     DD 
     1      e 
     2    null 
    select  count(*) from table  --结果是2 
    select  count(DD)  from table  ---结果是1
 
不考虑Null的情况 
count(1)和count(主键) 这两个只扫描主键Index就可以得到数据, 
count(*)是扫描表的。 
所以count(1)和count(主键)这两个效率高。 
还有一种写法是count(ROWID)这也是只扫描Index的,效率高。
 
5.Start with...Connect By子句递归查询
简单介绍如下:
     在扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:
     第一步:从根节点开始;
     第二步:访问该节点;
     第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;
     第四步:若该节点为根节点,则访问完毕,否则执行第五步;
     第五步:返回到该节点的父节点,并执行第三步骤。
 
   总之:扫描整个树结构的过程也即是中序遍历树的过程
 
通过子节点向根节点追朔. 
Sql代码
select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid
(  paredeptid是父id,  deptid是当前id  )
 
通过根节点遍历子节点.
Sql代码
select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid
 
再次复习一下:start with ...connect by 的用法, start with 后面所跟的就是就是递归的种子。
 
递归的种子也就是递归开始的地方 connect by 后面的"prior" 如果缺省:则只能查询到符合条件的起始行,并不进行递归查询;
 
connect by prior 后面所放的字段是有关系的,它指明了查询的方向。
 
 
 
 
 
 
 

 

你可能感兴趣的:(oracle)