博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 动态SQL语句(4)之存储过程的调用与浅谈字符串的使用
阅读量:5018 次
发布时间:2019-06-12

本文共 3313 字,大约阅读时间需要 11 分钟。

    在开发的过程中用编程语言调用存储过程时,一定要注意调用存储过程中参数的个数、类型与名称相匹配。

例子如下:

public void Store()        {           // HaveTime = EndTime.CompareTo(StartTime);            TimeSpan timeSp = new TimeSpan();            timeSp = EndTime - StartTime;            HaveTime = Convert.ToInt64(timeSp.TotalSeconds);            OracleParameter[] parms ={                                   new OracleParameter("I_ID",OracleType.NVarChar),                                   new OracleParameter("I_STARTTIME",OracleType.NVarChar),                                   new OracleParameter("I_ENDTIME",OracleType.NVarChar),                                   new OracleParameter("I_HAVETIME",OracleType.Number),                                   new OracleParameter("I_MAXTIME",OracleType.NVarChar),                                   new OracleParameter("I_MAXV",OracleType.Double),                                   new OracleParameter("I_AVGV",OracleType.Double),                                   new OracleParameter("I_MINV",OracleType.Double),                                   new OracleParameter("I_CUOSHI",OracleType.NVarChar),                                   new OracleParameter("I_BY",OracleType.NVarChar)                               };            parms[0].Value = SensorID.ToString();            parms[1].Value = StartTime.ToString();            parms[2].Value = EndTime.ToString();            parms[3].Value = HaveTime;//HaveTime            parms[4].Value = MaxTime.ToString();            parms[5].Value = MaxV;//0            parms[6].Value = AvgV;//0            parms[7].Value = MinV;//0            parms[8].Value = CuoShi;            parms[9].Value = WarnBy;            OracleHelper.ExecuteNonQuery(OracleHelper.connectionString, CommandType.StoredProcedure, "SP_INSERT_WARN", parms);        }

 存储过程如下:

create or replace procedure sp_insert_warn(i_id in nvarchar2,i_starttime in nvarchar2,i_endtime in nvarchar2,i_havetime in number,i_maxtime in nvarchar2,i_maxv in BINARY_DOUBLE,i_avgv in BINARY_DOUBLE,i_minv in BINARY_DOUBLE,i_cuoshi in nvarchar2,i_by in nvarchar2)authid current_user as/********************************名称:sp_update_openclose功能描述:插入一条新的报警记录修订记录:版本号   编辑时间  编辑人  修改描述1.0.0    2012-10-09 王玉刚  1.创建此存储过程注释入参出参描述:i_id 测点编号i_starttime 开始时间i_endtime   结束时间i_havetime  持续时间i_maxtime   最大值出现的时间i_maxv      最大值i_avgv      平均值i_minv      最小值i_cuoshi    措施i_by        备注信息*********************************/begin  INSERT INTO warn  VALUES(i_id,to_date(i_starttime,'yyyy-mm-dd hh24-mi-ss'),to_date(i_endtime,'yyyy-mm-dd hh24-mi-ss'),  i_havetime,to_date(i_maxtime,'yyyy-mm-dd hh24-mi-ss'),i_maxv,i_avgv,i_minv,i_cuoshi,i_by);   commit;--数据更新到表中end sp_insert_warn ;

   在我用C#语言调用存储过程中因为最大值参数i_maxv写成了i_mavv调用就出现了错误。

当把存储过程中输入的字符类型改为NVARCHAR2时,直接执行动态SQL语句出现错误,必须定义一个中间字符串才行(VARCHAR2类型)。

如下列PL/SQL代码:

v_sql_statement varchar2(500);--执行的SQL语句  v_sql_statement:='UPDATE '||v_tablename||'    SET MIN05='||i_min05||',AVG05='||i_avg05||',MAX05='||i_max05||'   ,MINHOUR='||i_minhour||',AVGHOUR='||i_avghour||',MAXHOUR='||i_maxhour||'   ,MAXTIME=to_date('''||i_maxtime||''',''yyyy-mm-dd hh24-mi-ss'')   ,MINTIME=to_date('''||i_mintime||''',''yyyy-mm-dd hh24-mi-ss'')   WHERE DATETIME=to_date('''||i_realtime||''',''yyyy-mm-dd hh24-mi-ss'')';   execute immediate  v_sql_statement;

 

转载于:https://www.cnblogs.com/wylaok/archive/2012/11/05/2754800.html

你可能感兴趣的文章