第一次写Oracle碰到的问题

   今天是第一次写Oracle的存储过程,由于新手,被一些东西纠结了一天。特此记录下,让自己以后不要在犯错了。

  1.count(*)

   第一次写Oracle的存储过程,没什么经验,就count(*)这个问题,让我正正花费了一个早上。

  example:

   CREATE OR REPLACE PROCEDURE Demo( IdentityCardNo IN VARCHAR2) as

  

      v_Count number;

  

      Begin ...

  select count(*) into v_Count from userinfo where identityCardNo(身份证)=identityCardNo 按理说,这只是个简单语句。就是看看这个身份证

在userinfo表中是否存在值。v_Count只会是0或者1,可是输出的时候会输出500+或是5000+。直接在SQL窗口执行都没问题,但是在

存储过程里就出现这奇怪的数字。

     解决:

      后来是发现我定义的参数名和数据库中表的字段名一样了,将定义的参数名(IdentityCardNo)成改掉就可以了。(但是还是不清楚原理是为什么?如果大家有知道原理的,请告诉下我。)

2.Net调用问题了

   数据库中一定存在"Demo" 的存储过程,但是调用

        OracleParameter[] parameter = new OracleParameter[]{
                new OracleParameter("Content", OracleType.Number),

       new OracleParameter("result_Num", OracleType.Number)};

    parameter[0].Value = ...;
    parameter[1].Value = ...;

    parameter[0].Direction = ParameterDirection.Input;

    parameter[1].Direction = ParameterDirection.Output;

    int rowEffect;

 DbHelperOra.RunProcedure("Demo", parameter,out rowEffect);就会出现

ORA-06550: 第 1 行, 第 23 列:
PLS-00222: 在此范围中不存在名为 Demo 的函数
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
完全不明所以了,最后终于在google里找到一个方案了。原地址:http://m.blog.csdn.net/blog/mm3646/7848180
对于存储过程中,含有输出类型的参数,如: ResultValue out number   时,在界面上 传参时,不能用   int result= DbHelperOra.RunProcedure("PRJ_PersonalLogTask_PKG.ChangeWorkTask", param,out rowEffect);     这种形式    要修改成:
      修改成:DbHelperOra.RunProcedure("Demo", parameter);
int resuleNum=Convert.ToInt32(parameter[1].Value);
这样就可以了。

由于第一次写Oracle存储过程,就这两个问题真是困扰了一天,先自己记录一下,防止以后犯同样的错误。
posted @ 2014-04-01 18:52  花落花开花满园  阅读(718)  评论(0编辑  收藏  举报