2017-04-12 71 views
0

这里查询我要执行这是一个类似于:执行Oracle查询包含在C#子选择

with x as(
    select ds.*, row_number() over (partition by FOO order by BAR) rn 
    from datasource ds 
    where datasupplierid = 3) 
select column1, column2, rn from x where rn <= 2 

而我执行它像这样(在C#):

using (var con = new OracleConnection(this.connectionString)) { 
    con.Open(); 

    OracleCommand cmd = con.CreateCommand(); 
    cmd.CommandText = this.command;//my query 
    cmd.CommandType = CommandType.Text; 

    var reader = cmd.ExecuteReader(); 
} 

我从这里取的是ORA-00933:SQL命令未正确结束错误。

我试图重写查询,以这种形式:

select column1, column2, rn from (
    select ds.*, row_number() over (partition by FOO order by BAR) rn 
    from datasource ds 
    where datasupplierid = 3) 
where rn <= 2 

但是,这并没有固定我的问题。有没有办法执行这样的查询?

+1

线视图你查了一下Oracle看到使用SQL事件探查查询重写?当你在c#中构造查询时,可能会有一个简单的语法错误,例如换行符或空白缺失。 –

+0

@NikolaMarkovinović任何暗示我该如何做这样的检查?我试过用查询,一些监视器与oracle sql developer集成,但没有一个好的结果。 –

+1

对不起,过去二十年来,我几乎完全使用Sql Server。我试图找到一些关于在Oracle中进行跟踪/分析的有用信息,但失败了。看到[这个问题](http://stackoverflow.com/questions/148648/oracle-is-there-a-tool-to-trace-queries-like-profiler-for-sql-server)的一些信息的工具和系统表。 –

回答

0

更改您的第一个查询是

;with x as(
    select ds.*, row_number() over (partition by FOO order by BAR) rn 
    from datasource ds 
    where datasupplierid = 3) 
select column1, column2, rn from x where rn <= 2 

对于你需要像别名

select column1, column2, rn from (
    select ds.*, row_number() over (partition by FOO order by BAR) rn 
    from datasource ds 
    where datasupplierid = 3) xxx 
where rn <= 2 
+0

感谢您的回答Rahul,但是在查询之前的第一个版本(当我添加';')导致'ORA-00900:无效的SQL语句',并且在第二种情况下添加别名没有改变任何东西 - 同样的错误。 (当然这两个版本的查询在Oracle sql开发人员中都能正常工作)。任何其他想法? –