2021年12月14日 星期二

Oracle SQL: 檢查email欄位是否有異常字元(II)

隔了幾年再看, 有人提了另一個寫法, 可參考:


 --

SET SERVEROUTPUT ON;


DECLARE

   b_isvalid   BOOLEAN;

BEGIN

   b_isvalid :=

      REGEXP_LIKE ('anyaddress@xyz123.com',

                   '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$');


   IF b_isvalid

   THEN

      DBMS_OUTPUT.put_line ('It is a valid email address.');

   ELSE

      DBMS_OUTPUT.put_line ('It is Not a valid email address.');

   END IF;

END;

/


Ref:

1.Validate Email Using PL/SQL Program

How to Validate Email Address Using PL/SQL? - foxinfotech.in



2021年12月13日 星期一

FTP Script sample

在Windows環境下:


0.取系統年月值

echo %date:~0,4%%date:~5,2%


1.依系統年月建立 folder (c_folder.bat)

if exist c:\c_customs\%date:~0,4%%date:~5,2%\ (echo Yes) else (md c:\c_customs\%date:~0,4%%date:~5,2%\) 


2.批次執行ftp script 並儲存log (c_ftp.bat)

set log=D:\log\%date:~0,4%%date:~5,2%%date:~8,2%.log ftp -s:D:\FTPcmd.txt >> %log%


3.FTP script內容 (FTPcmd.txt)

open ftp_site
v_username
v_password
prompt
cd ftp_folder
lcd local_folder
mget *.pdf


4.刪除單一檔案或多個檔案

delete 123.pdf
mdelete *.pdf


2021年11月1日 星期一

Oracle EBS: reverse GL

 問題: AR transaction錯誤拋轉, 在GL要作reverse


作法:

Setup->Sources

Source:Receivables

Source Key:Receivables

Freeze Journals: 先disable讓User可以reverse



2021年10月22日 星期五

Oracle EBS: 實測跨concurrent manager之程式互斥執行

問題: 跨concurrent manager之程式設定互斥是否有效? 是否仍會依priority順序執行?

先說結論:

1.互斥仍有效

2.不一定會依priority執行

 

測試案例:

CM1: concurrent manager 1 , 可同時執行20支程式

CM2: concurrent manager 2 , 可同時執行5支程式

PA: program A , priority 5 , 執行於CM1 

PB: program B , priority 60 , 執行於CM2

PA與PB互斥

先submit PB 600支, 已開始running後, 再submit PA.

結果PB一個接一個執行, 持續running, 而PA則是一直pending .

 

2021年10月21日 星期四

Oracle EBS: 批次hold coucurrent program

問題: 當數千筆的PO Output for Communication排隊執行, 會嚴重拖慢大程式的進度, 在已切不同concurrent manager執行的狀況下, 設定互斥並無預期中的效果, 最後想到只有hold一途.

 

試過之後可行, 作法如下.

 

 hold_flag : Y/N

 

PO Output for Communication

 

concurrent_program_id : 45071

phase_code : R  (Pending)

status_code: R   (Normal)

 

--find requests

select * from fnd_concurrent_requests

 where concurrent_program_id = 45071

    and request_date> trunc(sysdate) -2

    and phase_code = 'P'    --(Pending)

    and status_code = 'I'    --(Normal)

   

--apply hold   

update fnd_concurrent_requests

   set hold_flag = 'Y'

 where concurrent_program_id = 45071

    and request_date> trunc(sysdate) -2

    and phase_code = 'P'    --(Pending)

    and status_code = 'I'    --(Normal)     

 

--remove hold   

update fnd_concurrent_requests

   set hold_flag = 'N'

 where concurrent_program_id = 45071

    and request_date> trunc(sysdate) -2

    and phase_code = 'P'    --(Pending)

    and status_code = 'I'    --(Normal)

    and hold_flag = 'Y'