| | | 0 | | 6,260 |
今天在兩台 Oracle 資料庫間搬資料時踩到地雷。 一模一樣的 Table Schema,從 A 資料庫 SELECT 取出資料塞入 B 資料庫,竟有幾筆冒出字串長度過長錯誤。進一步分析,關鍵在某個 VARCHAR2(30) 欄位,內容包含中文理應設成 NVARCHAR2(30) 才合理,但它被設...
| | | 2 | | 2,120 |
最近又被 ODP.NET 版本問題搞得很煩。 故事是我有顆公用程式元件最近改版(假設名稱叫 MyLibrary.dll 好了),專案參照的 ODP.NET 已升級到 2.122.1.0。移交給同事使用時,同事的 ASP.NET 為配合其他元件仍在使用 ODP.NET 2.112.2.0,這種狀況下,...
| | | 0 | | 6,965 |
接獲報案,其他系統匯入簡體中文資料寫入 Oracle 資料表後部分字元無法顯示。 追查轉擋程式是使用 System.Data.OracleClient 執行 UPDATE Table SET C2=N'...' WHERE C1=1 進行更新。 (註:N'...' 寫法的術語為 NChar Lite...
| | | 4 | | 9,132 |
Managed ODP.NET 讓 .NET 程式擺脫對 Oracle Client 的依賴, 對常被 11.2 或是 12.1?32 或 64 bit 等版本鬼問題糾纏過的人就知道這點有多好, 故除非專案有不得已的限制,Managed ODP.NET 成為我寫 Oracle 相關 .NET 程式的...
| | | 0 | | 4,572 |
再遇到加裝 Oracle Client 其他版本後 ODP.NET 壞掉的案例,已不是第一次發生,但沒能歸納出明確規則,故留個記錄。 問題主機是 Windows Server 2016,原本已經裝好 Oracle Client 11.2 及 12.1 的 32 位元版本。但因為上面有 SQL Ser...
| | | 0 | | 2,164 |
ODP.NET 茶包連擊第二發,這回輪到 Managed ODP.NET,程式冒出 Unable to resolve ORA-12154: TNS:could not resolve the connect identifier specified 錯誤。 不需要安裝 Oracle Client,...
| | | 0 | | 2,491 |
前言 這兩天協助處理幾個狀況複雜又緊急的 Oracle 版本茶包,感覺自己診斷 ODP.NET 版本問題的功力連升好幾級。(揠苗助長式的成長,我不想要呀~) 覺得自己走了狗屎運,幾天前好巧不巧讓我搞懂 ASP.NET /bin/Oracle.DataAccess.dll 其實是幌子的事實,還想到用 ...
| | | 1 | | 2,770 |
同事報案,某段 Oracle Package 更新 Script 檔 (.pkb) 送交 DBA 執行有錯,回報訊息如下: SQL> @test.pkb SP2-0734: unknown command beginning "CREATE ..." - rest of ...
| | | 13 | | 20,184 |
同事分享在 Oracle 踩到 NVarChar2 中文字數上限的地雷,一句話點醒我夢中人,嚇得我屁滾尿流失了魂,原來我也搞錯多年。 不囉嗦,直接看圖。 我們都知道,NVarChar2 的長度上限是 4000,而 NVarChar2 支援 Unicode,不管是中文或英數字,一個字元都算...
| | | 1 | | 25,216 |
很久很久以前(轉眼已十年惹)學會用 SQL 2005 Common Table Expression 呈現資料表中的階層式資料(組織圖、BOM表),當時還學到 ORACLE 有個 CONNECT BY 語法效果類似。說來慚愧,對它只停在「知道」的層次,沒實地玩過,直到今天遇到必須使用 ORACL...
| | | 0 | | 5,646 |
.NET Core 版本已推進到 2.0,但對我而言,相關元件、程式庫的支援度才是能否用於工作的關鍵。最近有則好消息 – Oracle 在這個月推出 ODP.NET Core 12.2 Beta,感覺在工作專案使用 .NET Core 的日子又更近了~ 工作環境常會存取 Oracle 資料庫...
| | | 0 | | 7,853 |
同事報案。某個使用 Managed ODP.NET 的測試網站吐出以下錯誤 Error: The type initializer for 'OracleInternal.Common.ProviderConfig' threw an exception. 同事一度懷疑跟 ODP.NET ...
| | | 1 | | 6,157 |
前文介紹過使用 C# 讀取 dbms_output 寫入內容,範例留了一個小尾巴,跑迴圈連資料庫犯了效能大忌,應改成一次執行或查詢取回才上道。 dbms_output.get_lines() 允許一次取得多筆訊息,但傳回型別為 TYPE DBMSOUTPUT_LINESARRAY IS VARR...
| | | 0 | | 7,683 |
使用 dbms_output.put_line() 列印執行資訊是常用的 Oracle Stored Procedure 偵錯技巧,以下 Procedure 範例在DELETE 及 INSERT 後透過 dbms_output.put_line() 印出影響資料筆數,概念跟在程式碼裡塞入一堆 D...
| | | 1 | | 11,691 |
在 SELECT 指令對欄位執行自訂函式行運算通常很傷效能,但實務上無法完全避免。查詢一萬筆資料代表要呼叫自訂函式一萬次,若函式包含資料表查詢,如同在迴圈裡跑 SQL,是典型的效能殺手,經驗裡也是許多複雜查詢逾時的主因。 見識到同事露了一手,簡單加幾個字元一口氣將內含自訂函式的 Oracle ...
| | | 0 | | 8,922 |
接獲同事報案,某段 Oracle 查詢偶發嚴重效能問題。查詢時資料表經由 JOIN 自身的 GROUP BY 子查詢挑出某日期前客戶最新的一筆資料: SELECT ccb.Key1, ccb.Key2, ccb.Key3, ccb.Key4, ...