前言 在企業級系統開發中,我們常會將複雜的商業邏輯封裝成 Oracle PL/SQL 的儲存過程(Stored Procedure),以便重複使用並確保邏輯一致性。 這次的案例是 修改 Updlcmremark 儲存過程 ,目的是讓產出的 REMARK 欄位在資料庫中具有「換行」格式,而不只是用逗號分隔,方便報表與前端顯示。 問題背景 原本的 Updlcmremark 過程中,對於某些資料(例如來自 APS_Z_LCM_CHECK 的 process_step 與 eq ),是直接用字串拼接的方式: v_remark := NVL(v_process_step, '') || '' || NVL(v_eq, ''); 這種寫法的缺點是: 資料之間沒有任何分隔符號,閱讀性差。 若要在前端或報表中換行,必須額外處理,不方便。 如果一個 SEQ_NO 有多筆資料,這種寫法只會取到第一筆( FETCH 單筆),其他資料會被忽略。 改進需求 參考同系統的另一支儲存過程 Updmremark ,該過程在拼接文字時不僅使用逗號分隔,還加上換行符號: || ' ,' || CHR(10) 這樣在資料庫中儲存的內容,就會自帶換行,即使直接查詢或匯出到 Excel 報表,也能保有可讀性。 解決方案 方案一:簡單版(單筆取值加換行) 如果 unknown 游標一次只需要取一筆資料,可以直接在原本字串後加上逗號與換行符號: v_remark := NVL(v_process_step, '') || ' ' || NVL(v_eq, '') || ' ,' || CHR(10); 這樣每筆 remark 都會以「逗號 + 換行」結尾。 方案二:完整版(多筆累加加換行) 如果 unknown 游標可能有多筆資料,則應該使用 FOR rec_...
留言
張貼留言