oracle 存储过程定义及调试,并最终被C# 调用 代码

C# 调用存储过程

参考了很多文章,写了如下文字,算是分享吧

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

一般的调试方法:

DECLARE

myresult INT;

BEGIN

P_CHANGEVIPBALANCE(‘018604712233‘,-1,‘TEST‘,myresult);

END;

更详细的调试方法还是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)));

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-07 21:18:16

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

oracle 存储过程定义及调试,并终于被C# 调用 代码

C# 调用存储过程 參考了非常多文章,写了例如以下文字,算是分享吧 目的:更改积分,并作一定校验 一.一般的调试方法: 方法一:带返回out參数,必须定义变量 myresult DECLARE myresult INT; point  VARCHAR2(50) ; //假设要用字符类的变量,须要写长度. BEGIN P_CHANGEVIPBALANCE('011111111',-1,'TEST',myresult); END; /* 假设不带输出參数.则能够直接用: 方法二:call   P_C

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

定义: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可.在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包. 优 点: 1.(预编译)存储过程只在创造

oracle存储过程及Java调用

初次研究出bug的地方非常多,所以注意点非常多,花了我三天时间除尽所有bug,我会把注意点都列出来,可能有落下的地方,还请多指正,相互探讨. 首先上最终测试成功版存储过程代码:(里面代码可能不尽对你都有用,借鉴参考吧,我全贴出来也是为了我以后好查) 说一下jar包用的是ojdbc14.jar,至于什么class12.jar.ojdbc6.jar啊应该都可以,只要一种就可以了. 说说我的需求,以便让大家更顺利的看懂我的代码,我的需求是:存储过程从Java端接收两个参数userid(用户)和topi

oracle 存储过程的基本语法

原文:oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) IS变量1 INTEGER :=0;变量2 DATE;BEGIN END 存储过程名字 2.SELECT INTO STATEMENT  将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条  记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)  例子:  

Oracle存储过程的学习

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名=param1: If (判断条件) then Select 列名 into 变量2 from 表A where列名=param1: Dbms_output.Put_line('打印信息'); El

Oracle存储过程(转)

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名=param1: If (判断条件) then Select 列名 into 变量2 from 表A where列名=param1: Dbms_output.Put_line('打印信息'); El

Oracle 存储过程_(收集)

oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) IS变量1 INTEGER :=0;变量2 DATE;BEGIN END 存储过程名字 2.SELECT INTO STATEMENT  将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条  记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)  例子:   BEG

Oracle 存储过程学习

Oracle 存储过程学习 目录 Oracle 存储过程 1 Oracle存储过程基础知识 1 Oracle存储过程的基本语法 2 关于Oracle存储过程的若干问题备忘 4 1. 在Oracle中,数据表别名不能加as. 4 2. 在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了. 5 3. 在利用select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no data found"异常. 5 4.

Oracle存储过程学习使用

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名=param1: If (判断条件) then Select 列名 into 变量2 from 表A where列名=param1: Dbms_output.Put_line(‘打印信息’); El