in

Darkthread

黑暗執行緒
All Tags » ORACLE (RSS)

Browse by Tags

  • 【茶包射手日記】ORACLE JOIN GROUP BY 子查詢爆慢疑案

    接獲同事報案,某段 Oracle 查詢偶發嚴重效能問題。查詢時資料表經由 JOIN 自身的 GROUP BY 子查詢挑出某日期前客戶最新的一筆資料: SELECT ccb.Key1, ccb.Key2, ccb.Key3, ccb.Key4, ccb.Key5, ccb.Col1, ccb.Col2, ccb.Col3, ccb.Col4, --...略... ccb.Col20 FROM MyTable ccb INNER JOIN ( SELECT Key0,Key1,Key2, Key3, MAX (Key4) as Key4,Key5 FROM MyTable WHERE Key4 <...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 07-20-2017
  • KB-當 WHERE AND/OR 條件遇上 NULL

    在 SQL 世界裡 NULL 性質特殊,行為獨特,過去就曾討論過: KB-詭異的NOT IN查詢,原來是NULL搞鬼 ORACLE, 你把空字串怎麼了 自以為至此對 NULL 認識已足,不料前兩天在 WHERE LIKE AND/OR 情境中遇上 NULL,一時意志動搖陷入迷惘,想必是認知還不夠深刻,再補篇 KB 吧! 先別急著看答案,大家猜猜以下 SQL 指令會得到什麼結果? select 'T1' , 'MATCH' from dual where null like '78' union select 'T2' , 'MATCH'...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 07-19-2017
  • COALESCE 發生字元設定不符合錯誤

    同事報案,Dapper 查詢 ORACLE 時使用 COALESCE() 遇到 ORA-12704: character set mismatch(字元設定不符) 錯誤。 我用以下程式成功重現問題:(jefftest2.t 欄位為 NVARCHAR2) static void Main( string [] args) { using (var cn = new OracleConnection(csStr)) { var list = cn.Query( "select 1 from jefftest2 where coalesce(t, :text) like '%'"...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 07-18-2017
  • ODP.NET 無法讀取 Oracle 欄位計算結果

    同事報案,使用 Dapper + ODP.NET 呼叫某 Procedure,以 Ref Cursor 取資料時出現型別轉換錯誤,一路深入追查,發現問題跟是否用了 Procedure、Ref Cursor、 Dapper 都沒有關係,錯誤發生在 ODP.NET 層。 有問題的查詢涉及幾個高精確度的欄位運動,經過一番簡化,我先找出用下列查詢可重現問題。 使用 PL/SQL Developer 查詢不會出錯,但使用 ODP.NET OracleDataReader dr["N"]、dr.GetDecimal(0)、dr.GetValue() 都會出現「指定的轉換無效」( Invalid...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-26-2017
  • MS OracleClient 改用 ODP.NET 之數字型別差異

    System.Data.OracleClient 被微軟宣告為 過時不建議使用 ,是你知道我知道連獨眼龍都知道的事,硬要繼續用甚至會有 效能懲罰 。所以在維護舊專案時,看到還在用 System.Data.OracleClient 的程式,我都會順手換成 Managed ODP.NET 。(若為 .NET 3.5 平台則只能用 Unmanaged ODP.NET) 近日踩到小鐵釘一根。 如下圖,程式原本使用 System.Data.OracleClient,執行正常: 改 using Oracle.ManagedDataAccess.Client 換用 Managed ODP.NET,出現型別轉換錯誤...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-20-2017
  • 使用 Dapper 接收 Oracle Ref Cursor

    沒實際遇到,但接連兩次被問到使用 Dapper 如何從 Ref Cursor 讀取結果,看來上天已強烈暗示我沒 PO 文分享,趕緊補上以免逆天遭譴。 爬文找到的做法都是靠自訂 OracleDynamicParameter 處理 Ref Cursor 對應轉換,循著 Stackoverlow 討論 找到一個 Gist 分享的 現成版本 ,將 OracleDynamicParameter.cs 加入專案,便可使用 OracleDynamicParameters 物件 .Add("cursor_name", dbType: OracleDbType.RefCursor, direction...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-17-2017
  • ODP.NET 12.1/11.2 並存環境發生找不到 OraOps12.dll 錯誤

    是的,Oracle 問題又來了!(沒錯,我桌子旁邊的羚羊又更多惹…) Windows 2012R2 跑多個網站,從 ASP.NET 2.0、3.5、4.0 到 4.5.2 都有,還涉及多台 SQL、Oracle,Oracle 版本有舊有新,部分程式還用到了分散式交易。考慮 ODP.NET 12.1 無法與 Oracle 10.2 進行分散式交易 ,而新版共用元件多已改用 ODP.NET 12.1,只好 11.2、12.1 兩種版本 Oracle Client 都裝,並 移除發行者原則檔 ,允許不同 ASP.NET 專案使用不同版本。 此種做法經驗證可行,但今天發現有台機器使用 ODP.NET 12...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-13-2017
  • 【茶包射手日記】Oracle DBLink 遇分散式交易出錯

    Oracle 問題又來惹… Orz 某 Package 原本執行正常,當被包入 TransactionScope 範圍啟動分散式交易會出現 ORA-24777: use of non-migratable database link not allowed 錯誤,爬文找到 Rico 的 文章 ,提到 Procedure 使用 Non-Shared Database Link 會導致類似錯誤。 我在測試環境寫了一個使用 Non-Shared DBLink 的 Procedure: create or replace procedure SP_AccessDBLink( p_Count out number...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 04-07-2017
  • ODP.NET 無法顯示 raise_application_error 自訂訊息

    接獲報案,某 Oracle Package 使用 raise_application_error 抛回自訂錯誤代碼與錯誤訊息(其中包含輸入參數以利偵錯),使用 ODP.NET 呼叫時理應可在 Exception.Message 看到自訂錯誤訊息,但某支程式出錯時卻只傳回錯誤代碼並抱怨找不到該代碼對應訊息:ORA-20001: Message 20001 not found;  product=RDBMS; facility=ORA 經過調查與對照測試,發現與程式被包在 TransactionScope 有關。用以下程式重現與驗證問題: using Oracle.DataAccess.Client;...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 03-27-2017
  • OracleParameter 型別不符導致 ORA-03111 通訊中斷錯誤

    記錄在 Oracle 遇到的古怪錯誤。 Oracle Server 版本 10.2.0.4 64bit,Client 端用 Managed ODP.NET 12.1.24160719(取自 NuGet),某段程式碼誤傳 Varchar2 OracleParameter 與 DATE 欄位進行比對,預期應出現型別不符錯誤,但得到錯誤訊息為 ORA-03111 在通訊通道上收到中斷訊號( Break received on communication channel ): 該資料表有其他 DATE 欄位,將 WHERE 條件換成其他 DATE 欄位,也會觸發 ORA-03111。 另一個資料表也有類似...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 03-22-2017
第1頁,共11頁 (104個項目) 1 2 3 4 5 下一頁 > ... 最後一頁 »
Powered by Community Server (Non-Commercial Edition), by Telligent Systems