بتاريخ: 10 نوفمبر 20187 سنة comment_297166 السلام عليكم ورحمة الله اليكم الوظيفة بلغة PL/SQL لتحويل الأرقام بالصيغة القياسية إلى الصيغة اللفظية العربية بشرط أن يكون الرقم أقل من 999999 create or replace FUNCTION WRITENUMINARABICWORDS (totnetget in NUMBER) return VARCHAR2 is strNum VARCHAR2(10); numInArabic VARCHAR2(100); a7ad VARCHAR2(1); a7adArabic VARCHAR2(50); asharat VARCHAR2(1); asharatArabic VARCHAR2(50); me2at VARCHAR2(1); me2atArabic VARCHAR2(50); alaaf VARCHAR2(1); alaafArabic VARCHAR2(50); asharatolof VARCHAR2(1); asharatolofArabic VARCHAR2(50); me2atolof VARCHAR2(1); me2atolofArabic VARCHAR2(50); malayeen VARCHAR2(1); malayeenArabic VARCHAR2(50); numLength NUMBER; begin strNum := TO_CHAR(totnetget); -- check a7ad digit a7ad := substr(strNum,length(strNum),1); IF a7ad != '0' THEN IF a7ad = '1' THEN a7adArabic := 'واحد'; ELSIF a7ad = '2' THEN a7adArabic := 'اثنان'; ELSIF a7ad = '3' THEN a7adArabic := 'ثلاثة'; ELSIF a7ad = '4' THEN a7adArabic := 'أربعة'; ELSIF a7ad = '5' THEN a7adArabic := 'خمسة'; ELSIF a7ad = '6' THEN a7adArabic := 'ستة'; ELSIF a7ad = '7' THEN a7adArabic := 'سبعة'; ELSIF a7ad = '8' THEN a7adArabic := 'ثمانية'; ELSIF a7ad = '9' THEN a7adArabic := 'تسعة'; END IF; numInArabic := a7adArabic; END IF; -- check asharat digit IF(length(strNum)>1) THEN asharat:= substr(strNum,length(strNum)-1,1); IF asharat!= '0' THEN IF asharat = '1' THEN IF(a7ad = '0') THEN asharatArabic := 'عشرة'; ELSE IF a7ad = '1' THEN asharatArabic := 'احد عشر'; ELSIF a7ad = '2' THEN asharatArabic := 'اثنا عشر'; ELSIF a7ad = '3' THEN asharatArabic := 'ثلاثة عشر'; ELSIF a7ad = '4' THEN asharatArabic := 'أربعة عشر'; ELSIF a7ad = '5' THEN asharatArabic := 'خمسة عشر'; ELSIF a7ad = '6' THEN asharatArabic := 'ستة عشر'; ELSIF a7ad = '7' THEN asharatArabic := 'سبعة عشر'; ELSIF a7ad = '8' THEN asharatArabic := 'ثمانية عشر'; ELSIF a7ad = '9' THEN asharatArabic := 'تسعة عشر'; END IF; END IF; ELSIF asharat = '2' THEN asharatArabic := 'عشرون'; ELSIF asharat = '3' THEN asharatArabic := 'ثلاثون'; ELSIF asharat = '4' THEN asharatArabic := 'أربعون'; ELSIF asharat = '5' THEN asharatArabic := 'خمسون'; ELSIF asharat = '6' THEN asharatArabic := 'ستون'; ELSIF asharat = '7' THEN asharatArabic := 'سبعون'; ELSIF asharat = '8' THEN asharatArabic := 'ثمانون'; ELSIF asharat = '9' THEN asharatArabic := 'تسعون'; END IF; ELSE asharatArabic := a7adArabic; END IF; IF(a7ad != '0' and asharat != '1') THEN numInArabic := a7adArabic || ' و ' || asharatArabic; ELSE numInArabic := asharatArabic; END IF; END IF; -- check me2at digit IF(length(strNum) > 2) THEN me2at := substr(strNum,length(strNum)-2,1); IF me2at != '0' THEN IF me2at = '1' THEN me2atArabic := 'مائة'; ELSIF me2at = '2' THEN me2atArabic:= 'مائتان'; ELSIF me2at = '3' THEN me2atArabic:= 'ثلاثمائة'; ELSIF me2at = '4' THEN me2atArabic:= 'أربعمائة'; ELSIF me2at = '5' THEN me2atArabic:= 'خمسمائة'; ELSIF me2at = '6' THEN me2atArabic:= 'ستمائة'; ELSIF me2at = '7' THEN me2atArabic:= 'سبعمائة'; ELSIF me2at = '8' THEN me2atArabic:= 'ثمانمائة'; ELSIF me2at = '9' THEN me2atArabic:= 'تسعمائة'; END IF; ELSE me2atArabic := asharatArabic; END IF; IF(a7ad != '0' OR asharat != '0') THEN numInArabic := me2atArabic || ' و ' || WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-1,2))); ELSE numInArabic := me2atArabic; END IF; END IF; -- alaaf digit IF(length(strNum)>3) THEN alaaf := substr(strNum,length(strNum)-3,1); IF alaaf != '0' THEN IF alaaf = '1' THEN alaafArabic := 'ألف'; ELSIF alaaf = '2' THEN alaafArabic := 'ألفان'; ELSIF alaaf = '3' THEN alaafArabic := 'ثلاثة الاف'; ELSIF alaaf = '4' THEN alaafArabic := 'أربعة الاف'; ELSIF alaaf = '5' THEN alaafArabic := 'خمسة الاف'; ELSIF alaaf = '6' THEN alaafArabic := 'ستة الاف'; ELSIF alaaf = '7' THEN alaafArabic := 'سبعة الاف'; ELSIF alaaf = '8' THEN alaafArabic := 'ثمانية الاف'; ELSIF alaaf = '9' THEN alaafArabic := 'تسعة الاف'; END IF; ELSE alaafArabic := me2atArabic; END IF; IF(a7ad != '0' OR asharat != '0' OR me2at != '0') THEN numInArabic := alaafArabic || ' و ' || WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-2,3))); ELSE numInArabic := alaafArabic; END IF; END IF; -- asharatolof digit IF(length(strNum)>4) THEN asharatolof := substr(strNum,length(strNum)-4,1); IF asharatolof != '0' THEN IF asharatolof = '1' THEN asharatolofArabic := 'عشرة آلاف'; ELSIF asharatolof = '2' THEN asharatolofArabic := 'عشرون ألفا'; ELSIF asharatolof = '3' THEN asharatolofArabic := 'ثلاثون ألفا'; ELSIF asharatolof = '4' THEN asharatolofArabic := 'أربعون ألفا'; ELSIF asharatolof = '5' THEN asharatolofArabic := 'خمسون ألفا'; ELSIF asharatolof = '6' THEN asharatolofArabic := 'ستون ألفا'; ELSIF asharatolof = '7' THEN asharatolofArabic := 'سبعون ألفا'; ELSIF asharatolof = '8' THEN asharatolofArabic := 'ثمانون ألفا'; ELSIF asharatolof = '9' THEN asharatolofArabic := 'تسعون ألفا'; END IF; ELSE asharatolofArabic := alaafArabic; END IF; IF(a7ad != '0' OR asharat != '0' OR me2at != '0' OR alaaf != '0') THEN numInArabic := WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-4,2))) || CASE WHEN (asharatolof = '1' AND alaaf = '0') THEN ' آلاف ' ELSE ' ألف ' END || CASE WHEN (a7ad != '0' OR asharat != '0' OR me2at != '0') THEN ' و ' END || WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-2,3))); ELSE numInArabic := asharatolofArabic; END IF; END IF; -- me2atolof digit IF(length(strNum)>5) THEN me2atolof := substr(strNum,length(strNum)-5,1); IF me2atolof != '0' THEN IF me2atolof = '1' THEN me2atolofArabic := 'مائة ألف'; ELSIF me2atolof = '2' THEN me2atolofArabic := 'مائتا ألف'; ELSIF me2atolof = '3' THEN me2atolofArabic := 'ثلاثمائة ألف'; ELSIF me2atolof = '4' THEN me2atolofArabic := 'أربعمائة ألف'; ELSIF me2atolof = '5' THEN me2atolofArabic := 'خمسمائة ألف'; ELSIF me2atolof = '6' THEN me2atolofArabic := 'ستمائة ألف'; ELSIF me2atolof = '7' THEN me2atolofArabic := 'سبعمائة ألف'; ELSIF me2atolof = '8' THEN me2atolofArabic := 'ثمانمائة ألف'; ELSIF me2atolof = '9' THEN me2atolofArabic := 'تسعمائة ألف'; END IF; ELSE me2atolofArabic := asharatolofArabic ; END IF; IF(a7ad != '0' OR asharat != '0' OR me2at != '0' OR alaaf != '0' OR asharatolof != '0') THEN numInArabic := WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-5,3))) || ' ألفا و ' || WRITENUMINARABICWORDS(TO_NUMBER(substr(strNum,length(strNum)-2,3))); ELSE numInArabic := me2atolofArabic; END IF; END IF; -- more than 999999 is not available in this version IF(length(strNum)>6) THEN numInArabic := strNum; END IF; RETURN numInArabic; END; نأمل من كل شخص يستفيد منها أن لا ينسانا من صالح دعائه ودمتم بخير وعافية تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.