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. java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程

    一.需求 传入一个参数,返回一条或多条记录(列表). 二.实现步骤 1. 编写Oracle存储过程. -- 声明包和包体的语句应该分两次执行,即使声明在前定义在后,如果一起执行依然会编译出错 --调用 ...

  2. Oracle 存储过程定义和优点及与函数区别

    定义: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是 ...

  3. 布尔类型(boolean)在oracle存储过程中支持情况

    文章目录 1.布尔类型在oracle存储过程中支持情况 (1)布尔类型在过程.函数.包中的支持情况 (2)布尔类型与其他类型的兼容情况 (3)布尔类型作为cast函数参数情况 (4)存储过程case- ...

  4. oracle存储过程function,oracle 存储过程跟function

    当前位置:我的异常网» 数据库 » oracle 存储过程跟function oracle 存储过程跟function www.myexceptions.net  网友分享于:2014-11-26   ...

  5. php oracle 存储过程 返回值,PHP 调用 Oracle 存储过程 之 查询

    在网上找了很久都没找到结果,今天看帮助,结合JAVA程序中的一个实例,写出了这个PHP调用Oracle存储过程的例子,也许有人会说PHP调用存储过程是很简单的,但在这里我还是想把这点小成就拿来共享一下 ...

  6. cmd 调用oracle存储过程,asp.net中调用oracle存储过程的方法

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果 ...

  7. sqlplus查oracle存储过程,在SQL PLUS中调试Oracle存储过程

    我们在通常情况下,开发和调试Oracle存储过程都是用可视化工具,如PL SQL DEVELOPER,TOAD等等.不会有人傻到要用 vim 去开发,再用 sql plus 去调试的存储过程的.但在有 ...

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

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

  9. Oracle 存储过程的调试

    Oracle 存储过程的调试 首先,打开PLSQL DEVELOPMENT首先介绍一下,这个软件的各个窗口是用来干什么的. 如图,这是PLSQL工具左侧的窗口,每个窗口的作用,在这里,我们讨论如何在p ...

最新文章

  1. 每日一皮:客户期望 vs 最终产品
  2. C++ auto 关键字的使用
  3. 【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )
  4. Kingbase金仓查看表空间占用率
  5. b-2014四川电子机械职业技术学院计算机科学与技术毕业设计选题,2014届计算机科学与技术专业本科毕业设计(论文)选题指南...
  6. 深度模型压缩论文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self
  7. 企业微信_客户联系,获取客户及客户群列表及详情
  8. kpi绩效考核流程图_公开!松松团队KPI绩效考核表分享
  9. git多项目管理模式_Git十年,一项开放商业模式倡议以及更多新闻
  10. 人工智能/数据科学比赛汇总 2019.5
  11. 可临摹素材,分层可编辑一步一步教你,肯定能把表单做好
  12. netcore5开发Android,那些鼓吹国内首个.NET 5框架的,该醒醒了!
  13. vb.net 使用MD5密碼加密
  14. configure: error: Package requirements (commoncpp 6.2.2) were not met
  15. 【算法原理+洛谷P6114+HDU6761】Lyndon分解
  16. 2 机器学习基本概念
  17. 12款华丽的Admin管理后台模板
  18. java 开源esb_五大开源ESB项目
  19. 如何优雅的美化kali,实现双桌面环境
  20. 英语词频统计器分词器基于Java

热门文章

  1. Mysql Proxy的安装配置详细教程
  2. Photoshop激活教程
  3. 第7部分 组策略应用
  4. .NET新手系列(八)
  5. Tungsten Fabric SDN — 与 OpenStack 的集成架构
  6. 架构师之路 — 数据库设计 — 关系型数据库的外键约束与关联
  7. Python 笔试集(1):关于 Python 链式赋值的坑
  8. Keil错误fatal error: UTF-16 (LE) byte order mark detected
  9. stm32 基本定时器TIM6、TIM7的使用
  10. ##自定义一个自动注入Log 的 插件