oracle 版本 11.2.0
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 356518272 bytes
Database Buffers 58720256 bytes
Redo Buffers 6094848 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 4545
Session ID: 1 Serial number: 5
----------------------------------------------------------------
1:查看trace文件 (位置:http://blog.csdn.net/yfb8530/article/details/8997374)
/u01/app/oracle/diag/rdbms/orcl/ORCL
2:按trace记录的原因操作
Recovery Manager: Release 11.2.0.1.0 - Production on Fri May 31 00:12:52 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN> startup mount
Oracle instance started
database mounted
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 356518272 bytes
Database Buffers 58720256 bytes
Redo Buffers 6094848 bytes
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;
RMAN> alter database open;
database opened
本文链接:http://www.cnblogs.com/yacob/archive/2013/06/12/3132552.html,转载请注明。
1、nvl('A','B') 如果a为null,则显示B
2、DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
3、grouping函数用法,带一个参数,参数为字段名,结果是根据该字段得出来的就返回1,反之返回0
4、Over
over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。
其参数:over(partition by col1 order by col2)
含义:按col1指定的字段进行分组,然后再按照col2进行排序
4、开窗函数:rank() over ( partition by [col1],[col2]... by [col3]desc)
rank,dense_rank,row_number的区别:
结果集中如果出现两个相同的数据,那么rank会进行跳跃式的排名,
比如两个第二,那么没有第三接下来就是第四;
但是dense_rank不会跳跃式的排名,两个第二接下来还是第三;
row_number最牛,即使两个数据相同,排名也不一样。
5、distinct 去重复
6、Lag和Lead函数可以在一次查询中取出某个字段的前N行和后N行的数据(可以是其他字段的数据,比如根据字段甲查询上一行或下两行的字段乙),原来没有分析函数的时候采用子查询方法,但是比较麻烦,惭愧,我用子查询有的还查不出来呢。
语法如下:
lag(value_expression [,offset] [,default]) over ([query_partition_clase] order_by_clause);
lead(value_expression [,offset] [,default]) over ([query_partition_clase] order_by_clause);
其中:
value_expression:可以是一个字段或一个内建函数。
offset是正整数,默认为1,指往前或往后几点记录.因组内第一个条记录没有之前的行,最后一行没有之后的行,
default就是用于处理这样的信息,默认为空。
求出每个打工者上个月和下个月有没有赚钱(personincome大于零即为赚钱)
lag(decode(nvl(personincome,0),0,'No','Yes'),1,0) over(partition by sname order by earnmonth) PerMonth,
lead(decode(nvl(personincome,0),0,'No','Yes'),1,0) over(partition by sname order by earnmonth) NextMonth
from earnings;
详细内容:http://love-flying-snow.iteye.com/blog/573083
7、两种CASE
简单case:
WHEN expression1 THEN result1
WHEN expression2 THEN result2
...
WHEN expressionN THEN resultN
ELSE default_result
如果search_expression 是null,则会走ELSE,不会进行其他匹配,而decode无此问题。
搜索case:
直接使用case when +比较条件 到end为返回的结果,end之后可以做运算。
语法:
when Boolean then return value
...
Else
Returnvalue
End
简单case和searched case之间的区别:
一、 简单case只能是when后面的表达式完全匹配case后的表达式,相当于 =,所以也不
能匹配null。
二、 searched case可以作为比较条件,那么可以使用like,!=,between ..and,<,=,
is null,is not null等,比简单case的使用更加广泛,完全可以替代简单case。
8、存储过程基本结构
(
参数1 IN NUMBER,
参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
...
END 存储过程名字
9、触发器基本结构
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;
本文链接:http://www.cnblogs.com/fuxinci/archive/2013/06/11/3131766.html,转载请注明。
想当初我在做一个ASP.NET网站的时候,用的是Oracle数据库更新数据。表里面的字段有int类型的,string类型的,还有date类型的,在和asp.NET前台控件绑定更新的时候总是出现问题,我当时上网查了好多东西,总是看的模棱两可,毕竟也是头一次接触操作Oracle。我把我最初写的更新贴出来(现在这个问题已经解决了),你们看看:
sql = string.Format("update xxt_registration r set r.name='{0}',r.ip='{1}',r.port='{2}',r.time='{3}',r.location='{4}',r.installtime='{5}',r.type=(select d.id from xxt_devicetype d where d.name='{6}') where r.id='{7}'",
this.txtname.Text.Trim(), this.txtip.Text.Trim(), this.txtport.Text.Trim(), this.txttime.Text.Trim(), this.txtlocation.Text.Trim(), this.txtinstalltime.Text.Trim(), this.DropDownList_tname.Text.Trim(), this.txtid.Text.Trim());
首先,出现的问题就是“类型”与“单引号”的问题,报的错误是,如下图:
这个错误是,ORA-01861: 文字与格式字符串不匹配。
可能是因为你那个表里面的time这一列,数据类型是date类型的。
你传递一个字符格式的内容进去以后,数据库不知道如何格式化这个字符信息为日期。
下面是一个网友提供的,错误重现的例子与解决的办法。在这里非常感谢他的热心帮助(链接地址是http://zhidao.baidu.com/question/551220541?quesup2&oldq=1)
表已创建。
SQL> insert into test_time values('2013-05-17 16:55');
insert into test_time values('2013-05-17 16:55')
*
ERROR 位于第 1 行:
ORA-01861: 文字与格式字符串不匹配
SQL> insert into test_time values('2013-05-17 16:55:30');
insert into test_time values('2013-05-17 16:55:30')
*
ERROR 位于第 1 行:
ORA-01861: 文字与格式字符串不匹配
SQL> insert into test_time values( TO_DATE('2013-05-17 16:55:30', 'YYYY-MM-DD HH24:MI:SS') );
已创建 1 行。
对于上面的更新语句,我总结如下:
string类型的可以加单引号,像r.name='{0}',r.ip='{1}',r.port='{2}'等等都是可以的;
int类型的在Oracle数据库更新语句中是不能加单引号的,像id='{7}'是不行的,应该去掉单引号改为id={7};
date类型可以加单引号,但不是像r.time='{3}'这样的,应该应用TO_DATE()来转换格式,如:r.time=to_date('{3}','yyyy-mm-dd')。asp.net前台控件中输入的是字符串类型的数据,更新的时候当然要转换成时间类型格式的,修改后的更新语句如下:
this.txtname.Text.Trim(), this.txtip.Text.Trim(), this.txtport.Text.Trim(), this.txtlocation.Text.Trim(), this.Calendarinstalltime.SelectedDate.ToString("yyyy-MM-dd"), this.DropDownList_tname.Text.Trim(), this.txtid.Text.Trim());
最后,如果您还需要Oracle中TO_DATE格式的其它解答,下面的链接地址有详细的解说,相信一定能帮助您的。
http://www.cnblogs.com/ajian/archive/2009/03/25/1421063.html
本文链接:http://www.cnblogs.com/litao4047/archive/2013/06/08/3127237.html,转载请注明。