بتاريخ: 24 ديسمبر 200619 سنة comment_87471 السلام عليكمأريد أن أكتب بروسيجر ليقوم بعمل ما طوال أيام الإسبوع باستثناء الجمعة والسبتولكن لا أدري لماذا يعمل طوال أيام الإسبوع، ويتجاهل المقارنةوعند التجربة للمقارنة برقم التاريخ فإنه يعمل !!!!!!!!!!!مع الشكر الجزيل للجميعمثال REATE OR REPLACE procedure Test as log_file_handle utl_file.file_type; begin if to_char(sysdate,'DAY') in('FRIDAY','SATURDAY') or to_char(sysdate,'yyyymmdd') = '20070101' or to_char(sysdate,'yyyymmdd') = '20061224' then log_file_handle := UTL_FILE.FOPEN('C:\', 'Test1.txt','W'); utl_file.put_line(log_file_handle,'--------------------------------------------'); utl_file.put_line(log_file_handle,'Sorry, for TODAY Date: '||TO_CHAR(SYSDATE,'dd-mm-yyyy DAY')); utl_file.put_line(log_file_handle,'Thank You'); utl_file.put_line(log_file_handle,'--------------------------------------------'); utl_file.fclose(log_file_handle); else log_file_handle := UTL_FILE.FOPEN('C:\', 'Test1.txt','W'); utl_file.put_line(log_file_handle,'--------------------------------------------'); utl_file.put_line(log_file_handle,'Good Work for Today = '||TO_CHAR(SYSDATE,'dd-mm-yyyy DAY')); utl_file.put_line(log_file_handle,'--------------------------------------------'); utl_file.fclose(log_file_handle); end if; end; / تم تعديل 24 ديسمبر 200619 سنة بواسطة Naji_Ali تقديم بلاغ
بتاريخ: 24 ديسمبر 200619 سنة comment_87480 السلام عليكم الأخ NAJI_ALIاستخدم في المقارنة FUNCATION REPLACE لازالة المسافات الموجودة في التاريخ و ايضا استخدم في FUNCTION TO_CHAR تحويل لغة التاريخ الي ENGLISH لانه من الممكن ان تكون لغة التاريخ عندك او الNLS_DATE_LANGUAGEعربي و كالتالي BEGIN IF REPLACE(TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE=''ENGLISH'''),' ','') ='SUNDAY' THEN DBMS_OUTPUT.PUT_LINE('WORK OK '); END IF; END ; و يمكنك أيضا استخدام رقم اليوم للمقارنة كالتالي BEGIN IF REPLACE(TO_CHAR(SYSDATE, 'D', 'NLS_DATE_LANGUAGE=''ENGLISH'''),' ','') ='2' THEN DBMS_OUTPUT.PUT_LINE('WORK OK '); END IF; END ; مع ملاحظة ان يام السبت و الجمعة هي ارقام 1 و 7 علي التوالي و لكن بالطبع تختلف هذه الارقام حسب بداية ايام الاسبوع ان كانت عربي ام انجليزي فالعربي يبدا من يوم السبت و الانجليزي من يوم الاثنين لذلك فاستخدام اسم اليوم نفسه أفضل و قد جربتها و اشتغلت معي بالتوفيق تقديم بلاغ
بتاريخ: 24 ديسمبر 200619 سنة كاتب الموضوع comment_87536 أخي الحبيب hanon_OCP،شكرا جزيلا للرد، والله يعطيك ألف عافيةأنا فهمت من ردك أن أوراكل تكمل إسم اليوم بمسافات فارغة ولغاية 9 حروف، ولا أدري لماذا جعلوها كذلك !!!!!!!!!!!وبالمناسبة 9 هو طول يوم الأربعاء بالإنجليزيوقمت بالتجربة التالية: SELECT TRIM (TO_CHAR (SYSDATE, 'DAY')), LENGTH (TRIM (TO_CHAR (SYSDATE, 'DAY'))), TO_CHAR (SYSDATE, 'DAY'), LENGTH (TO_CHAR (SYSDATE, 'DAY')), TRIM (TO_CHAR (SYSDATE + 2, 'DAY')), LENGTH (TRIM (TO_CHAR (SYSDATE + 2, 'DAY'))), TO_CHAR (SYSDATE + 2, 'DAY'), LENGTH (TO_CHAR (SYSDATE + 2, 'DAY')) FROM tab وبالتالي جربت إستخدام TRIM والحمد لله وصلت للنتيجة المطلوبة if TRIM (to_char(sysdate,'DAY')) in ('FRIDAY','SATURDAY') or to_char(sysdate,'yyyymmdd') = '20070101' then ومرة أخرى أنا شاكر لتفاعلك معي في هذه المشاركةأخوكناجي غانم تقديم بلاغ
بتاريخ: 24 ديسمبر 200619 سنة comment_87605 السلام عليكم هلا فيك أخي ناجي الحمد لله ان مشكلتك قد حلت أعاقد ان مسالة المسافات ربما تعود بسبب تحويل التاريخ الي char باستخدام فانكشن to_char فربما كان الreturn datatype من نوع char و هو كما تعرف fixed length بمعني انه اذا قل عدد حروف الكلمة عن الطول المعرف له فيتمم تكملة الباقي بمسافات عموما ريح دماغك دايما و عن عم ل اي مقارنات باستخدام char field أن تستعم ل الفانكشن replace او trim بالتوفيق دأئما تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.