string str="create table TESTONESTR as(select '20080401-20080421'
 日期,(select propertyvalue from machineinfo where
 propertycode='20' and macid=PAYMENTINFO.MACID) 营业厅,
 (select machinecode from machineindex where macid=PAYMENTINFO.MACID)
  设备编号,(select selectitemname from dropdownlist where ddlname='缴费状态'
 and selectitemvalue=PAYSTATE) 缴费状态,count(PAYMONEY) 交易笔数,
 sum(PAYMONEY) 交易金额 from PAYMENTINFO where
  (paydatetime between to_date(:strdate,'yyyymmdd')
 and to_date(:strenddate,'yyyymmdd')) and PAYMENTINFO.MACID
 in (select macid from machineinfo where PropertyCode='20'
 and propertyvalue='芙蓉区营业厅') group by PAYMENTINFO.MACID,PAYSTATE)
  order by 营业厅,设备编号,缴费状态";        IDataParameter[] par ={ Base.GetParameter(":strdate", OracleType.VarChar, strdate),
                                Base.GetParameter(":strenddate", OracleType.VarChar, strenddate)
                                };
        Base.ExecuteDataSet(str, par, CommandType.Text); 我在程序里面执行这个SQL语句就报错,调试了下,发现把create table testonestr 去掉就能通过,但是一加上就报 非法的变量名/编号  难道是oracle里面不能这样写?  希望哪位高手帮帮忙谢啦

解决方案 »

  1.   

    大家好,我是猎头公司的,现在手上有一个猎头职位,是关于数据库开发的,要求会PL/SQL,和常用的几种数据库,三年以上数据库开发经验,公司是一家上市国企,主要是做通信的,在全国大概有二十几家分公司这样,上班位置在西四环附近,如果有兴趣的可以直接加我MSN:[email protected]或直接发简历到[email protected],谢谢,机会不错,希望把握!!!
      

  2.   

    应该不是权限的问题啊。。我在SQL/PLUS里面可以运行成功啊 用的都是同一个用户
      

  3.   

    我觉得应该是.NET使用参数形式执行SQL时会屏蔽一些关键字,以防止SQL注入。你可以在程序中直接执行SQL,不使用参数形式试试!
      

  4.   

    ExecuteDataSet中,只支持dml语法,不支持ddl语句的。
      

  5.   

    不使用参数时是可以执行Create Table的,方法如下:
    string strSql = "create table TEST2 as select * from Test  ";
                 try
                 {
                    using (OracleConnection conn = new OracleConnection(connString))
                    {
                        OracleCommand cmd = conn.CreateCommand();
                        cmd.CommandText = strSql;
                        conn.Open();
                        int i=cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    而使用参数时报错:非法变量名,具体方法如下:
    string strSql = "create table TEST3 as  select * from Test where id=:userID ";            try
                {
                    using (OracleConnection conn = new OracleConnection(connString))
                    {
                        OracleCommand cmd = conn.CreateCommand();
                        cmd.CommandText = strSql;
                        OracleParameter param = new OracleParameter(":userID", OracleType.VarChar, 30);
                        param.Value="yhr";
                        cmd.Parameters.Add(param);
                        conn.Open();
                        int i = cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }