Oracle批量上传数据batch import data

本文介绍如何使用C#结合Oracle 10g进行数据库批量记录导入的技术细节,包括参数设置、类型转换及存储过程调用等,并提供了一个具体的包和包体实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

the following is my experence about using C# + Oracle10g for batch import records into databse:

===Code ================================================

c#-> test.aspx.cs

using ODP = Oracle.DataAccess.Client;           

private void ExecuteQuery()

{

//create a parameter supporing multiple records update into database

          ODP.OracleParameter parameter = new ODP.OracleParameter
            {
                ParameterName = parameterName,
                Direction = direction
            };

            if (dbType == DbType.String && isClob == true)
            {
                parameter.OracleDbType = ODP.OracleDbType.NVarchar2;
            }
            else
            {
                parameter.DbType = dbType;
            }

            if (isCollectionType == true)
            {
                parameter.CollectionType = ODP.OracleCollectionType.PLSQLAssociativeArray;
                parameter.Value = obj;
            }
            else
            {
                parameter.Value = obj ?? DBNull.Value;
            }

ODP.OracleCommand cmd = new ODP.OracleCommand();

cmd.parameters.add(parameter);

//.set cmd execute style (storedprocedure/ sql), set storedprocedure name..

//:TODO

//...

///

cmd.ExecuteQuery();

}


===package======================================================

CREATE OR REPLACE PACKAGE PKG_AW_POINT IS
  TYPE TP_RLT_TBL IS REF CURSOR;

  --a templete sql to define a type of one column in the table

  --TYPE {0:type name} IS TABLE OF {1:table name}.{2:column name}%TYPE INDEX BY PLS_INTEGER;

  TYPE TP_PIDS IS TABLE OF T_AW_PLAN.ID%TYPE INDEX BY PLS_INTEGER;
  TYPE TP_USERID IS TABLE OF T_AW_USER_POINT_UPLOAD.USERID%TYPE INDEX BY PLS_INTEGER;



  PROCEDURE PROC_INS_POINT_AGN(V_USERID         VARCHAR2,
                               V_ROLE           NUMBER,
                               V_TYPE           NUMBER,
                               V_POINT          NUMBER,
                               V_REASONID       TP_PIDS,
                               V_CREATED_USERID VARCHAR2,
                               V_CREATED_DATE   DATE,
                               V_GROUPID        NUMBER,
                               V_AGENTGROUPID   NUMBER);


END;

===package body======================================================
CREATE OR REPLACE PACKAGE BODY PKG_AW_POINT IS

  --INSERT TEMP POINT ASSIGN ITEMS
  PROCEDURE PROC_INS_POINT_AGN(V_USERID         VARCHAR2,
                               V_ROLE           NUMBER,
                               V_TYPE           NUMBER,
                               V_POINT          NUMBER,
                               V_REASONID       TP_PIDS,
                               V_CREATED_USERID VARCHAR2,
                               V_CREATED_DATE   DATE,
                               V_GROUPID        NUMBER,
                               V_AGENTGROUPID   NUMBER) IS
  BEGIN
 
    
      --LOCK THE USERID ROW IN T_AW_ASSIGNABLE_POINT_SUMM
      SELECT S.USERID
        INTO P_TEMP_USERID
        FROM T_AW_ASSIGNABLE_POINT_SUMM S
       WHERE S.USERID = V_CREATED_USERID
         FOR UPDATE;
      --UPDATE USEDPOINT
      UPDATE T_AW_ASSIGNABLE_POINT_SUMM T
         SET T.USEDPOINT = T.USEDPOINT + V_POINT
       WHERE T.USERID = V_CREATED_USERID
         AND T.POINT >= T.USEDPOINT + V_POINT;
      P_AFFECTEDROW := SQL%ROWCOUNT;
      --COMMIT;
      
      --batch insert data
      FORALL i IN V_REASONID.FIRST .. V_REASONID.LAST
        INSERT INTO T_AW_USER_POINT_REASON P
          SELECT SEQ_AW_REASON_ID.NEXTVAL AS ID,
                 P_ASSIGNID,
                 PNT.ID AS CATEGORYID,
                 SUB.ID AS REASONID,
                 PNT.PLAN AS CATEGORY,
                 SUB.PLAN AS REASON
            FROM T_AW_PLAN SUB, T_AW_PLAN PNT
           WHERE SUB.PARENT = PNT.ID
             AND SUB.ID = V_REASONID(i);      

  END;


END;

the function should be use the DataAccess dll owned by Oracle, can be successfully use in the environment of VS2010+Oracle10g.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值