︿
Top

2021年2月15日 星期一

SQL Server 資料庫版本控管 (Part 3) : Schema Compare with .dacpac (資料層應用程式)


1. 情境


廠商要將資料庫結構異動, 發行至客戶測試機. 但廠商及客戶開發人員, 均不能連接至資料庫進行結構異動, 必須由客戶 DBA 進行處理.

回想以前在寫資料庫版本管控的文章時, 印象中 Will 保哥有提到 .dacpac 可以處理該狀況, 故作了一下複習及實作.

相關的程式碼, 可 由此下載.


2020年12月31日 星期四

Oracle: Synonym (別名) 的用途及實作練習


0. 前言


由於目前的專案採用 Oracle, 且整個資料庫是由客戶的 DBA 在管理, 為了安全上的考量, 在存取客戶現行使用者的資料表時, 只會提供廠商新的使用者帳號及密碼, 而不會提供現行使用者的帳號及密碼.

舉例而言, 假設 table: T2 由客戶的 USER2 所建立, 而客戶提供給廠商的使用者為 USER1; 雖然客戶已將 USER2.T2 這個 table 的權限開放給 USER1, 當然可以採用 USER2.T2 去存取.

但這樣會造成 參考文件1 提到的狀況:

  • 每次使用用 Table 時都要加上 "USER2.".
  • 程式碼寫死了 Schema 名稱, 一旦Schema名稱調整, 將有改不完的程式.

在網路上查了一下, 看來應該可以透過 Synonym (別名) 的方式來處理. Synonym 的用途如下:

  • 主要用在縮短資料庫物件 (table, view, sequence or program unit) 的名稱, 不需實際指定 schema.
  • 亦可用在如上述的資安議題.

以下茲分幾個步驟, 進行狀況模擬實測:

最後並附上 結論參考文件.


2020年12月28日 星期一

Oracle: Empty string and NOT NULL column


0. 前言


最近的專案又回到 Oracle, 印象中, 在作空字串與 Null 的處理時, 有一些要注意的地方. 所以, 就整理了本篇及 上一篇 的文章.

茲區分以下幾個部份作說明.


Oracle: Empty string and NULL allowd column


0. 前言


最近的專案又回到 Oracle, 印象中, 在作空字串與 Null 的處理時, 有一些要注意的地方. 所以, 就整理了本篇及 下一篇 的文章.

茲區分以下幾個部份作說明.


2020年12月25日 星期五

How to set network profile to PRIVATE after windows server restart


需求


因為開發測試需求, 在本機用 Virtual Box 安裝一個 VM, 內含 Windows Server 2019 及 Oracle 資料庫, 且只啟用 HostOnly 的網卡.

茲將整個設定過程留下記錄, 以備參考.


2020年1月5日 星期日

[C#] How to query with table-valued parameters in entity framework?


0. 前言


目前的專案, 遇到需要傳多個值, 查出對應資料的需求, 例如: 傳入多個組織單位代號, 去取出對應的組織單位名稱; 或者傳入多個產品類別, 去取出對應的產品資料.

經上網查詢, 至少有以下4種解決方式.

  • 方式一: 採用 LINQ 的 Contains 方法
  • 方式二: 自行撰寫 WHERE IN 的 SQL 敘述
  • 方式三: 採用 Stored Procedure, 自行傳入 Table-Valued Parameter
  • 方式四: 採用 Stored Procedure, 利用 EntityFrameworkExtras.EF6, 傳入 Table-Valued Parameter

以下茲以 傳入多個產品類別, 去取出對應的產品資料 為例, 進行說明.
本篇文章的編排比較類似個人的筆記, 說明會放在程式碼裡, 或圖片即能理解, 就不多作說明.

相關程式, 可 由此下載


2019年12月14日 星期六

[COBOL] ACUCOBOL COMP DATA TYPE 解析


0. 前言


最近的專案, 有將 ACUCOBOL 資料檔轉入至 DB 的需求.
最簡單的方式, 當然是針對每個 COBOL 資料檔, 撰寫 COBOL 程式, 各自轉為轉為固定長度的文字檔, 例如: 有 10 個資料檔, 就寫 10 支轉檔程式; 再採以下任一方案:
方案一: 撰寫 Java 或 C# 程式, 排程後, 定期轉至 DB.
方案二: 建立 SSIS Package (source: flat file, destination: ole db), 排程後, 定期轉至 DB.

但事與願違, 客戶想說, 是否可以採通用目的轉檔程式就好, 把整筆 COBOL 資料, 寫到 Binary Sequential 檔案; 由 Java 或 C# 讀取, 轉至 DB. 這樣就不需額外定義固定長度的文字檔 (即 COBOL 的 FD 檔), COBOL 的轉檔程式也變得很單純.

這是沒錯啦, COBOL 變單純了, 但 Java 或 C# 就會變複雜了.
然而並不是每一個 Java 或 C# 的程式設計師, 都了解 COBOL.
COBOL 主要有 2 種資料型態:

  • X: 字元型態.
  • 9: 數值型態.
    但因為古早的時候, 主機記憶體及磁碟空間有限, 所以有了 COMP 的壓縮方式, 以節省空間; 不只 COMP, 還有一些 SIGN LEADING, SIGN TRAILING ... 等的修飾詞.
要由 Java 或 C# 把 COMP 的內容解開, 必須理解各種 COMP 的資料壓縮方式.

筆者的第 1 份工作, 就是用 COBOL 寫醫療系統, 對 COMP 還有一些印象; 所以, 就上網查了一些資料, 並寫了一支 COBOL 程式, 作了一下驗證.
本文主要就是針對 COBOL 數值 COMP 型態的儲存格式, 進行整理.