oracle使用小结

 

1.存储过程出错 :PLS-00103: 出现符号 "("在需要下列之一时: := . ) , @
CREATE or replace  PROCEDURE UDF_SP_TLog_Add(
in_l_id Number,
in_l_type Number,
in_b_id Number,
in_l_desc VARCHAR2(200),
in_l_time DateTime,
in_l_where VARCHAR2(200),
in_o_path VARCHAR2(200)
)
is
begin
INSERT into TLog(l_id,l_type,b_id,l_desc,l_time,l_where,o_path) VALUES(in_l_id,in_l_type,in_b_id,in_l_desc,in_l_time,in_l_where,in_o_path);
END UDF_SP_TLog_Add;
执行就包了这个错误:
”PLS-00103: 出现符号 "("在需要下列之一时: := . ) ,@% default character 符号 “:=“被替换为"("后继续。

解决方法:存储过程定义的时候不需要指定VARCHAR2的长度!,我把v_date in varchar2(200) 改为:varchar2 就ok了。

2.oracle 没有DateTime类型,只有Date类型;
3.oracle按照日期时间查询的方法(to_date):
sbWhere.AppendFormat(" and l_time >=to_date('{0}','yyyy-mm-dd hh24:mi:ss')  and l_time <= to_date('{1}','yyyy-mm-dd hh24:mi:ss')",
                  OBDOverSeas.Common.TimeParser.GetDatetimeToString(DateTime.Parse(strStarTime).AddMinutes(-iTimezoneOffset)),
                  OBDOverSeas.Common.TimeParser.GetDatetimeToString(DateTime.Parse(strEndTime).AddDays(1).AddMinutes(-iTimezoneOffset))
                  );
3.在Oracle数据库中,bitand( )函数返回两个数值型数值在按位进行AND运算后的结果。例如:bitand(base.b_userType, 1) = 1,判断b_userType的值是否含1;

4.出现错误:“ORA-00979: 不是 GROUP BY 表达式”。在mysql中可以根据部分字段进行分组,但是在oracle中如果要分组,就要把所有的查询字段都放到GROUP BY后面。
解决方案:I.把查询表达式中的所有字段都放到GROUP BY后面;
II.把要查询的字段加上一个函数min或者max;

5.Oracle存储过程判断字段是否为空时,不能写成if orgpath<>'' then...而要写成if orgpath is not null then...,因为穿过程的值为空(''),但是到存储过程中解析成了NULL;

6.oracle关键字NVL相当于mysql的IFNULL;

你可能感兴趣的:(数据库)