C# 调用存储过程

參考了非常多文章,写了例如以下文字,算是分享吧

目的:更改积分,并作一定校验

一、一般的调试方法:

方法一:带返回out參数,必须定义变量 myresult

DECLARE

myresult INT;

point  VARCHAR2(50) ; //假设要用字符类的变量,须要写长度。

BEGIN 

  P_CHANGEVIPBALANCE('011111111',-1,'TEST',myresult);

END;

/*

假设不带输出參数。则能够直接用:

方法二:call   P_CHANGEVIPBALANCE('018604712233',-1,'TEST');//如果本身就没有要输出的參数。即存储过程定义为:

CREATE OR REPLACE PROCEDURE WX_120719_FLXT.p_changevipbalance ( vipno IN VARCHAR2 , point in VARCHAR2, str_reason IN VARCHAR2  )  //相比之前的没有:,myresult OUT int 这个out 參数  */

方法三:

更具体的调试方法还是PLSQL。选择要调试的过程名,找test。假设不能进入到里面去。好像要要编译,生成debug信息之类的。

二、存储过程定义:2015-7-18 20:00:21更新备注计算方法

CREATE OR REPLACE PROCEDURE WX_120719_FLXT.p_changevipbalance ( vipno IN VARCHAR2 , point in VARCHAR2, str_reason IN VARCHAR2 ,myresult OUT int )





IS

    point_old     INT;

    point_updated INT;

    yhjerror      EXCEPTION;

    tempint       INT;

    tempa         INT;

BEGIN

    myresult:=0;





    SELECT M.POINTS

      INTO point_old

      FROM MEMBERSHIP M

     WHERE TRIM(M.MEMBER_CODE) =vipno;





    UPDATE MEMBERSHIP M

           SET  M.POINTS= M.POINTS+point,

           M.REMARK=TRIM(M.REMARK)||TO_CHAR(SYSDATE,'YY-MM-DD HH24:MI:SS')||':'||str_reason

     WHERE TRIM(M.MEMBER_CODE)=vipno;



    myresult:=SQL%ROWCOUNT;

    dbms_output.put_line(point_old);

    SELECT M.POINTS

      INTO point_updated

      FROM MEMBERSHIP M

     WHERE TRIM(M.MEMBER_CODE) =vipno;





    tempa:=ABS((point_old)-(point_updated));

     tempint:=ABS(point);





    IF ((tempa <>tempint ) or  (myresult<>1)) THEN -- AND

        BEGIN

            myresult:=0;

            RAISE yhjerror;

        end;

    END IF ;

EXCEPTION

WHEN yhjerror THEN

    BEGIN

        ROLLBACK;

    END;

    COMMIT;

END p_changevipbalance;

三、存储过程被C#调用。代码:

public static String CAL_changevipbalancebyStoredProcedure(string vipno, int point, string str_reason )

        {//须要添加日志

            string strCmd = OracleAccess.str_vip_update1 + point + OracleAccess.str_vip_update2 + vipno.Trim() + "\'";

            int old_points = 0; int after_point = 0; int kkk = 0; int myresult = 0;

            //i = Convert.ToInt32(DBUtil.SqlExecuteScalar(strCmd.Replace("TESTA", OracleAccess.str_USER)));

            if (exist_vip(vipno))

            {

                old_points = int.Parse(CAL_VipBalance(vipno));

                OracleParameter[] parameters ={

                                 new OracleParameter("vipno",OracleType.VarChar,50),

                                new OracleParameter("point",OracleType.VarChar,30),

                                 new OracleParameter("str_reason",OracleType.VarChar,20),

                                new OracleParameter("myresult",OracleType.Int32)

                                                };

                parameters[0].Value = vipno; parameters[1].Value = point; parameters[2].Value = str_reason; parameters[3].Value = myresult;  //parameters[13].Value = str_sku;// parameters[10].Value = str_no; parameters[11].Value = str_sku;

                parameters[0].Direction = ParameterDirection.Input; parameters[1].Direction = ParameterDirection.Input; parameters[2].Direction = ParameterDirection.Input; parameters[3].Direction = ParameterDirection.Output;



                try

                {

                    YHJ_StoredProcedure.RunProcedure("WX_120719_FLXT.p_changevipbalance", parameters);

                    kkk = Convert.ToInt32(parameters[3].Value);

                    if (kkk>=1)

                        return OracleAccess.str_db_operate_sucess;

                        else

                    return "ERROR内部校验出错";





                }

                catch (Exception e)

                {

                    throw e;

                }



                //DBUtil.SqlExecuteNonQuery(strCmd.Replace("TESTA", OracleAccess.str_USER)); //ok 防注入,不用

                //after_point = int.Parse(CAL_VipBalance(vipno));

                //if ((after_point - old_points) == point)

                //    return OracleAccess.str_db_operate_sucess;

                //else

                //    return "ERROR内部校验出错";

            }

            else

                return "ERROR会员不存在";

            //return Convert.ToInt32(DBUtil.SqlExecuteScalar(strCmd.Replace("TESTA", OracleAccess.str_USER)));

        }

oracle 存储过程定义及调试,并终于被C# 调用 代码的更多相关文章

  1. oracle 存储过程 clob 字段 调试

    clob 没法直接赋值调试,可以新建一个存储过程,赋值给clob字段,然后调试

  2. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  3. JDBC调用oracle 存储过程

    1.创建一个oracle存储过程 p_empInfo2 并执行,使这段sql代码能编译存储到oracle数据库中. --输入员工号查询某个员工(7839)信息,将薪水作为返回值输出,给调用的程序使用 ...

  4. Oracle存储过程单步调试方法

    oracle存储过程单步调试的方法 1.在要调试的过程上单击test,如下图所示: 2.出现如下界面时单击最左上方的按钮:,如下图所示: 3.单击后呈现如下画面: 其中: 表示要停止test; 表示要 ...

  5. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  6. Oracle存储过程学习使用

    存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值 ...

  7. oracle存储过程 --1

    一,oracle存储过程语法   1.oracle存储过程结构  CREATE OR REPLACE PROCEDURE oracle存储过程名字 (     参数1 IN NUMBER,     参 ...

  8. oracle 存储过程的基本语法

    原文:oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) I ...

  9. Oracle存储过程和自定义函数

    新博客文章链接,欢迎大家评论探讨 概述 存储过程和存储函数是指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 异同点: 存储过程和存储函数的相同点:完成特定功能的程序. 存储过程和存储 ...

随机推荐

  1. [terry笔记]一个在线美化sql的网站

    http://www.dpriver.com/pp/sqlformat.htm 甚是好用.

  2. 洛谷 P3133 [USACO16JAN]无线电联系Radio Contact

    P3133 [USACO16JAN]无线电联系Radio Contact 题目描述 Farmer John has lost his favorite cow bell, and Bessie the ...

  3. PHP中对hmac_sha1签名算法的实现方法

    最近研究网宿云文档API,其中用到了一种叫hmac_sha1的签名算法: HMAC-SHA1: HMAC是哈希运算消息认证码 (Hash-based Message Authentication Co ...

  4. ORA-38760: This database instance failed to turn on flashback database

    ORA-38760: This database instance failed to turn on flashback database 问题背景:        測试数据库运行shutdown ...

  5. 【甘道夫】Hadoop2.2.0环境使用Sqoop-1.4.4将Oracle11g数据导入HBase0.96,并自己主动生成组合行键

    目的: 使用Sqoop将Oracle中的数据导入到HBase中,并自己主动生成组合行键! 环境: Hadoop2.2.0 Hbase0.96 sqoop-1.4.4.bin__hadoop-2.0.4 ...

  6. hdoj--1260--Tickets(简单dp)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  7. VMware虚拟机ubuntu显示屏幕太小解决办法

    使用VMware安装的ubuntu虚拟机的显示屏幕太小,可以通过在VMware里安装"VMware Tool"插件解决,安装步骤记录一下. 1. 更改ISO文件路径 安装VMwar ...

  8. CSS3个人盲点总结【总结中..........】

    ~:表示同辈元素之后指定类型的元素,如;elm1 ~ elm2表示,elm1之后的所有elm2元素,且elm1与elm2都是在同一个父级元素. +:表示同辈元素的兄弟元素. \A:一个空白换行符 &l ...

  9. 【原创】Google的文本内容对比代码

    /* * Diff Match and Patch * * Copyright 2006 Google Inc. * http://code.google.com/p/google-diff-matc ...

  10. thread.h

    https://github.com/wookayin/pintos/blob/master/src/threads/thread.h #ifndef THREADS_THREAD_H   #defi ...