zoukankan      html  css  js  c++  java
  • Oracle 动态SQL语句(4)之存储过程的调用与浅谈字符串的使用

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

    例子如下:

     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;
  • 相关阅读:
    LeetCode Count of Range Sum
    LeetCode 158. Read N Characters Given Read4 II
    LeetCode 157. Read N Characters Given Read4
    LeetCode 317. Shortest Distance from All Buildings
    LeetCode Smallest Rectangle Enclosing Black Pixels
    LeetCode 315. Count of Smaller Numbers After Self
    LeetCode 332. Reconstruct Itinerary
    LeetCode 310. Minimum Height Trees
    LeetCode 163. Missing Ranges
    LeetCode Verify Preorder Serialization of a Binary Tree
  • 原文地址:https://www.cnblogs.com/wylaok/p/2754800.html
Copyright © 2011-2022 走看看