oracle 多条语句同时执行(比如返回两个dataset)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 多条语句同时执行(比如返回两个dataset)相关的知识,希望对你有一定的参考价值。

public DataSet GetQualityStatistics(DateTime start_date,DateTime  end_date,string modality,string hospital_id)
        {
            StringBuilder sql = new StringBuilder();
            List<DbParameter> paras = new List<DbParameter>();
           
            IDBHelper dbhelper = DBFactory.createDBHleper();
            DataSet ds = new DataSet();
            switch (sqlType)
            {
                case "MSSQL2008":

                   
                    break;
                case "Oracle":
                  
                    sql.Append(" begin ");
                    //科室内图像质量评价
                    sql.Append(@" open  :var_1 for ‘SELECT COUNT(*)NUM, NVL(B.Dept_image_quality,2)QUALITY,to_char(A.REGISTRATION_DATE,‘‘mm‘‘) MONTH FROM PATIENT_REGISTRATION A  
  LEFT JOIN QUALITY_EVALUATION B  ON A.REGISTRATION_ID=B.REG_ID WHERE to_char(A.REGISTRATION_DATE,‘‘yyyy-MM-dd hh:mi:ss‘‘) >=‘‘"+start_date+"‘‘ " )
                       .Append(@"AND to_char(A.REGISTRATION_DATE,‘‘yyyy-MM-dd hh:mi:ss‘‘) <=‘‘"+end_date+"‘‘  AND MODALITY=‘‘"+modality+"‘‘   AND HOSPITAL_ID=‘‘"+hospital_id+"‘‘  ")
                       .Append(@" GROUP BY B.Dept_image_quality,to_char(A.REGISTRATION_DATE,‘‘mm‘‘)   ORDER BY B.Dept_image_quality,to_char(A.REGISTRATION_DATE,‘‘mm‘‘)‘ ;
                       ");
                    //sql.Append("  ");
                    ////科室内报告质量评价
                    //sql.Append(" begin ");
                    sql.Append(@" open  :var_2 for ‘ SELECT COUNT(*)NUM, NVL(B.Dept_report_quality,2)QUALITY,to_char(A.REGISTRATION_DATE,‘‘mm‘‘) MONTH FROM PATIENT_REGISTRATION A  
  LEFT JOIN QUALITY_EVALUATION B  ON A.REGISTRATION_ID=B.REG_ID WHERE to_char(A.REGISTRATION_DATE,‘‘yyyy-MM-dd hh:mi:ss‘‘) >=‘‘" +start_date+"‘‘  ")
  

                     .Append("AND to_char(A.REGISTRATION_DATE,‘‘yyyy-MM-dd hh:mi:ss‘‘) <=‘‘"+end_date+"‘‘  AND MODALITY=‘‘"+modality+"‘‘   AND HOSPITAL_ID=‘‘"+hospital_id+"‘‘  ")
                     .Append(@" GROUP BY B.Dept_report_quality,to_char(A.REGISTRATION_DATE,‘‘mm‘‘) ORDER BY B.Dept_report_quality,to_char(A.REGISTRATION_DATE,‘‘mm‘‘)‘;  
                      ");
                    //sql.Append(" end; ");
                    ////临床对图像质量评价
                    //sql.Append(" begin ");
                    sql.Append(@" open  :var_3 for ‘SELECT COUNT(*)NUM, NVL(B.Clinic_image_quality,2)QUALITY,to_char(A.REGISTRATION_DATE,‘‘mm‘‘) MONTH FROM PATIENT_REGISTRATION A  
  LEFT JOIN QUALITY_EVALUATION B  ON A.REGISTRATION_ID=B.REG_ID 
  WHERE to_char(A.REGISTRATION_DATE,‘‘yyyy-MM-dd hh:mi:ss‘‘) >=‘‘" +start_date+"‘‘  AND to_char(A.REGISTRATION_DATE,‘‘yyyy-MM-dd hh:mi:ss‘‘) <=‘‘"+end_date+"‘‘ AND MODALITY=‘‘"+modality+"‘‘ AND HOSPITAL_ID=‘‘"+hospital_id+"‘‘ ")

                     .Append(@"  GROUP BY B.Clinic_image_quality,to_char(A.REGISTRATION_DATE,‘‘mm‘‘) ORDER BY B.Clinic_image_quality,to_char(A.REGISTRATION_DATE,‘‘mm‘‘)‘; 
                      ");
                    //sql.Append(" end; ");
                    ////临床对报告质量评价
                    //sql.Append(" begin ");
                    sql.Append(@" open  :var_4 for ‘SELECT COUNT(*)NUM, NVL(B.Clinic_report_quality,2)QUALITY,to_char(A.REGISTRATION_DATE,‘‘mm‘‘) MONTH FROM PATIENT_REGISTRATION A  
  LEFT JOIN QUALITY_EVALUATION B  ON A.REGISTRATION_ID=B.REG_ID 
  WHERE to_char(A.REGISTRATION_DATE,‘‘yyyy-MM-dd hh:mi:ss‘‘) >=‘‘" +start_date+"‘‘  AND to_char(A.REGISTRATION_DATE,‘‘yyyy-MM-dd hh:mi:ss‘‘) <=‘‘"+end_date+"‘‘ AND MODALITY=‘‘"+modality+"‘‘ AND HOSPITAL_ID=‘‘"+hospital_id+"‘‘ ")
            

                     .Append(" GROUP BY B.Clinic_report_quality,to_char(A.REGISTRATION_DATE,‘‘mm‘‘) ORDER BY B.Clinic_report_quality,to_char(A.REGISTRATION_DATE,‘‘mm‘‘)‘;   ");
                    sql.Append(" end; ");
                    var p = new OracleParameter(":var_1", OracleDbType.RefCursor);
                    p.Direction = ParameterDirection.Output;
                    paras.Add(p);
                    var p2=new OracleParameter(":var_2", OracleDbType.RefCursor);
                    p2.Direction = ParameterDirection.Output;
                    paras.Add(p2);
                    var p3=new OracleParameter(":var_3", OracleDbType.RefCursor);
                    p3.Direction = ParameterDirection.Output;
                    paras.Add(p3);
                    var p4=new OracleParameter(":var_4", OracleDbType.RefCursor);
                    p4.Direction = ParameterDirection.Output;
                    paras.Add(p4);
                    ds = dbhelper.Query(sql.ToString(),paras);

                    break;
                default: break;
            }
            
           
            return ds;
        }
以上代码返回的是4个dataset。
贴别注意,open  :var_1 for ‘  ’这里面的语句,所有的单引号都要变成两个单引号。

 

以上是关于oracle 多条语句同时执行(比如返回两个dataset)的主要内容,如果未能解决你的问题,请参考以下文章

为啥在oracle数据库中多条查询语句无法同时进行

plsql工具在oracle数据库中使用comment语句给表加备注的时候单条执行没问题,批量多条执行就报无效字符了

在Oracle触发器中如何执行多条update语句?

oracle如何执行多条create 语句

如何在Oracle中一次执行多条sql语句

Oracle中怎样一次执行多条sql语句