2017-04-12 79 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開發人員中都能正常工作)。任何其他想法? –