mm_taha بتاريخ: 19 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 19 يونيو 2005 هذا الموضوع قد نشر من قبل ولكن اردت ان انشرة مرة أخرى بعد إجراء بعض التعديلات CREATE OR REPLACE PACKAGE Convert_Number AS /****************************************************************************** NAME: Convert_Number PURPOSE: REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 14/06/2005 1. Created this package. ******************************************************************************/ FUNCTION Get_text (num IN VARCHAR2) RETURN VARCHAR2; FUNCTION get_possion (i IN NUMBER) RETURN NUMBER; END Convert_Number; / /* Formatted on 2005/06/19 15:09 (Formatter Plus v4.8.5) */ CREATE OR REPLACE PACKAGE BODY Convert_Number AS FUNCTION get_possion (i IN NUMBER) RETURN NUMBER IS p NUMBER; BEGIN p := i MOD 3; IF p = 2 THEN p := -1; END IF; RETURN p; END; FUNCTION get_text (num IN VARCHAR2) RETURN VARCHAR2 IS n VARCHAR2 (20); text VARCHAR2 (20); number_in_text VARCHAR2 (2000); CATEGORY VARCHAR2 (20); follow VARCHAR2 (2); t VARCHAR2 (20); /* the number string in the new order */ l NUMBER; /* the length of number */ m NUMBER := 0; /* the addition number so l can be devided by 3 */ loop_counter NUMBER; BEGIN l := LENGTH (num); IF l MOD 3 = 1 THEN m := 2; ELSIF l MOD 3 = 2 THEN m := 1; END IF; n := LPAD (num, l + m, 0); FOR loop_counter IN 1 .. l + m LOOP t := t || SUBSTR (n, loop_counter + get_possion (loop_counter - 1), 1); END LOOP; FOR loop_counter IN REVERSE 1 .. l + m LOOP IF SUBSTR (t, loop_counter, 1) <> '0' THEN IF get_possion (loop_counter) = -1 THEN IF SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter + 1, 1) = '1' THEN text := 'إحدى '; ELSIF SUBSTR (t, loop_counter, 1) = '1' AND l <> 4 THEN text := 'واحد '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND SUBSTR (t, loop_counter + 1, 1) = '1' THEN text := 'اثنا '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND l <> 4 THEN text := 'اثنين '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثة '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعة '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسة '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستة '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعة '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانية '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعة '; END IF; ELSIF get_possion (loop_counter) = 0 THEN IF SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter - 1, 1) = '0' THEN text := 'عشرة '; ELSIF SUBSTR (t, loop_counter, 1) = '1' THEN text := 'عشر '; ELSIF SUBSTR (t, loop_counter, 1) = '2' THEN text := 'عشرون '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثون '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعون '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسون '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستون '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعون '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانون '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعون '; END IF; ELSIF get_possion (loop_counter) = 1 THEN IF SUBSTR (t, loop_counter, 1) = '1' THEN text := 'مائة '; ELSIF SUBSTR (t, loop_counter, 1) = '2' THEN text := 'مائتين '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تعسمائة '; END IF; END IF; END IF; IF loop_counter = 1 OR (SUBSTR (t, loop_counter, 1) = '0') OR (loop_counter = 2 AND SUBSTR (t, loop_counter - 1, 1) = '0') OR (loop_counter = 3 AND SUBSTR (t, loop_counter - 2, 2) = '00') OR ( get_possion (loop_counter) = 0 AND SUBSTR (n, loop_counter - 1, 1) = 1 ) THEN follow := ''; ELSE follow := 'و '; END IF; IF SUBSTR (n, loop_counter - 1, 1) <> '0' THEN IF (l + m - loop_counter = 11 AND l > 12) THEN CATEGORY := 'بليار '; ELSIF (l + m - loop_counter = 8 AND l > 9) THEN CATEGORY := 'بليون '; ELSIF (l + m - loop_counter = 5 AND l > 6) THEN CATEGORY := 'مليون '; ELSIF (l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) = '2' ) THEN CATEGORY := 'الفين '; ELSIF ( l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) NOT IN ('1', '2') ) THEN CATEGORY := 'الاف '; ELSIF (l + m - loop_counter = 2 AND l = 5 AND SUBSTR (n, 2, 2) = '10' ) THEN CATEGORY := 'الاف '; ELSIF (l + m - loop_counter = 2 AND l > 3) THEN CATEGORY := 'الف '; END IF; END IF; number_in_text := CATEGORY || follow || text || number_in_text; CATEGORY := ''; text := ''; END LOOP; RETURN number_in_text; END; END Convert_Number; / Examples SQL> SELECT Convert_Number.get_text (16536) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(16536) -------------------------------------------- ستة عشر الف و خمسمائة و ستة و ثلاثون SQL> SELECT Convert_Number.get_text (53216536) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(53216536) ------------------------------------------------------------------- ثلاثة و خمسون مليون و مائتين و ستة عشر الف و خمسمائة و ستة و ثلاثون SQL> SELECT Convert_Number.get_text (2048) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(2048) ------------------------------------------- الفين و ثمانية و اربعون SQL> SELECT Convert_Number.get_text (1000048) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(100048) ------------------------------------------- واحد مليون و ثمانية و اربعون تم تحرير الموضوع من قبل المشرف باضافة اخر نسخة من الpackage المستخدمة في ملف منفصل لسهولة التحميل CONVERT_NUMBER.zip اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
aza بتاريخ: 22 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 22 يونيو 2005 يعطيك العافية.. ممتاز اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
osama80 بتاريخ: 22 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 22 يونيو 2005 مشكور على الجهد العظيم و بارك الله فيك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
IGBSpeed بتاريخ: 29 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 29 يونيو 2005 جزاك الله خيراً أخي الكريم ولكن هل من الممكن أن تضيف بعض التعديلات القليله ليعطي النتيجة بالهللات ... أنا أعرف أني أطلب الكثير ...وإذا أمكنني أن أنشيئ واحد يقوم بتغيير الريال السعودي إلى دولار أمريكي مثلاً سوف أقوم به . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
kzaghloul بتاريخ: 30 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 30 يونيو 2005 الله يعطيك العافية يا أخ mm_taha طريقة جيدة وأتمنى لك التوفيق وبالنسبة إلى طلب الأخ ابراهيم بخش فقد قمت بعمل طريقة أخرى باسم (التفقيط) وهي مرفقة مع الرسالة وأرجو ان تستفيد منها وما عليك إلا تعديل كلمة دينار إلى ريال وكلمة فلس إلى هلله convertno.fmb اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Abu_afnan بتاريخ: 30 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 30 يونيو 2005 أشكرك أخي الحبيب هذه الطريقة أعمل عليها من فترة ، بس هذه الطريقة كانت مظبوطة أكثر من عملي .أكرر شكري اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
salama11433 بتاريخ: 30 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 30 يونيو 2005 مشكوررررررر جداا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mmafalha بتاريخ: 30 يونيو 2005 تقديم بلاغ مشاركة بتاريخ: 30 يونيو 2005 يسلموا كثيرا وجاري التحميل اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
m_dba بتاريخ: 17 يوليو 2005 تقديم بلاغ مشاركة بتاريخ: 17 يوليو 2005 هذا الموضوع قد نشر من قبل ولكن اردت ان انشرة مرة أخرى بعد إجراء بعض التعديلاتCREATE OR REPLACE PACKAGE Convert_Number AS /****************************************************************************** NAME: Convert_Number PURPOSE: REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 14/06/2005 1. Created this package. ******************************************************************************/ FUNCTION Get_text (num IN VARCHAR2) RETURN VARCHAR2; FUNCTION get_possion (i IN NUMBER) RETURN NUMBER; END Convert_Number; / /* Formatted on 2005/06/19 15:09 (Formatter Plus v4.8.5) */ CREATE OR REPLACE PACKAGE BODY Convert_Number AS FUNCTION get_possion (i IN NUMBER) RETURN NUMBER IS p NUMBER; BEGIN p := i MOD 3; IF p = 2 THEN p := -1; END IF; RETURN p; END; FUNCTION get_text (num IN VARCHAR2) RETURN VARCHAR2 IS n VARCHAR2 (20); text VARCHAR2 (20); number_in_text VARCHAR2 (2000); CATEGORY VARCHAR2 (20); follow VARCHAR2 (2); t VARCHAR2 (20); /* the number string in the new order */ l NUMBER; /* the length of number */ m NUMBER := 0; /* the addition number so l can be devided by 3 */ loop_counter NUMBER; BEGIN l := LENGTH (num); IF l MOD 3 = 1 THEN m := 2; ELSIF l MOD 3 = 2 THEN m := 1; END IF; n := LPAD (num, l + m, 0); FOR loop_counter IN 1 .. l + m LOOP t := t || SUBSTR (n, loop_counter + get_possion (loop_counter - 1), 1); END LOOP; FOR loop_counter IN REVERSE 1 .. l + m LOOP IF SUBSTR (t, loop_counter, 1) <> '0' THEN IF get_possion (loop_counter) = -1 THEN IF SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter + 1, 1) = '1' THEN text := 'إحدى '; ELSIF SUBSTR (t, loop_counter, 1) = '1' AND l <> 4 THEN text := 'واحد '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND SUBSTR (t, loop_counter + 1, 1) = '1' THEN text := 'اثنا '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND l <> 4 THEN text := 'اثنين '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثة '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعة '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسة '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستة '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعة '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانية '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعة '; END IF; ELSIF get_possion (loop_counter) = 0 THEN IF SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter - 1, 1) = '0' THEN text := 'عشرة '; ELSIF SUBSTR (t, loop_counter, 1) = '1' THEN text := 'عشر '; ELSIF SUBSTR (t, loop_counter, 1) = '2' THEN text := 'عشرون '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثون '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعون '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسون '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستون '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعون '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانون '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعون '; END IF; ELSIF get_possion (loop_counter) = 1 THEN IF SUBSTR (t, loop_counter, 1) = '1' THEN text := 'مائة '; ELSIF SUBSTR (t, loop_counter, 1) = '2' THEN text := 'مائتين '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تعسمائة '; END IF; END IF; END IF; IF loop_counter = 1 OR (SUBSTR (t, loop_counter, 1) = '0') OR (loop_counter = 2 AND SUBSTR (t, loop_counter - 1, 1) = '0') OR (loop_counter = 3 AND SUBSTR (t, loop_counter - 2, 2) = '00') OR ( get_possion (loop_counter) = 0 AND SUBSTR (n, loop_counter - 1, 1) = 1 ) THEN follow := ''; ELSE follow := 'و '; END IF; IF SUBSTR (n, loop_counter - 1, 1) <> '0' THEN IF (l + m - loop_counter = 11 AND l > 12) THEN CATEGORY := 'بليار '; ELSIF (l + m - loop_counter = 8 AND l > 9) THEN CATEGORY := 'بليون '; ELSIF (l + m - loop_counter = 5 AND l > 6) THEN CATEGORY := 'مليون '; ELSIF (l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) = '2' ) THEN CATEGORY := 'الفين '; ELSIF ( l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) NOT IN ('1', '2') ) THEN CATEGORY := 'الاف '; ELSIF (l + m - loop_counter = 2 AND l = 5 AND SUBSTR (n, 2, 2) = '10' ) THEN CATEGORY := 'الاف '; ELSIF (l + m - loop_counter = 2 AND l > 3) THEN CATEGORY := 'الف '; END IF; END IF; number_in_text := CATEGORY || follow || text || number_in_text; CATEGORY := ''; text := ''; END LOOP; RETURN number_in_text; END; END Convert_Number; / Examples SQL> SELECT Convert_Number.get_text (16536) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(16536) -------------------------------------------- ستة عشر الف و خمسمائة و ستة و ثلاثون SQL> SELECT Convert_Number.get_text (53216536) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(53216536) ------------------------------------------------------------------- ثلاثة و خمسون مليون و مائتين و ستة عشر الف و خمسمائة و ستة و ثلاثون SQL> SELECT Convert_Number.get_text (2048) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(2048) ------------------------------------------- الفين و ثمانية و اربعون SQL> SELECT Convert_Number.get_text (1000048) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(100048) ------------------------------------------- واحد مليون و ثمانية و اربعون ارك الله فيك والله انو عمل ممتاز ما شاء الله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mm_taha بتاريخ: 23 نوفمبر 2005 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 23 نوفمبر 2005 هذا التعديل بعد إضافة العملة حيث يمكن تغيرها او إضافة عملا أخرى /* Formatted on 2005/11/23 13:39 (Formatter Plus v4.8.5) */ CREATE OR REPLACE PACKAGE convert_number AS FUNCTION get_text (num IN VARCHAR2) RETURN VARCHAR2; FUNCTION get_possion (i IN NUMBER) RETURN NUMBER; FUNCTION to_text (num IN VARCHAR2) RETURN VARCHAR2; FUNCTION to_text (num IN VARCHAR2, cur IN VARCHAR2) RETURN VARCHAR2; END convert_number; / CREATE OR REPLACE PACKAGE BODY convert_number AS FUNCTION get_possion (i IN NUMBER) RETURN NUMBER IS p NUMBER; BEGIN p := i MOD 3; IF p = 2 THEN p := -1; END IF; RETURN p; END; FUNCTION get_text (num IN VARCHAR2) RETURN VARCHAR2 IS n VARCHAR2 (20); text VARCHAR2 (20); number_in_text VARCHAR2 (2000); CATEGORY VARCHAR2 (20); follow VARCHAR2 (2); t VARCHAR2 (20); /* the number string in the new order */ l NUMBER; /* the length of number */ m NUMBER := 0; /* the addition number so l can be devided by 3 */ loop_counter NUMBER; BEGIN l := LENGTH (num); IF l MOD 3 = 1 THEN m := 2; ELSIF l MOD 3 = 2 THEN m := 1; END IF; n := LPAD (num, l + m, 0); FOR loop_counter IN 1 .. l + m LOOP t := t || SUBSTR (n, loop_counter + get_possion (loop_counter - 1), 1); END LOOP; FOR loop_counter IN REVERSE 1 .. l + m LOOP IF SUBSTR (t, loop_counter, 1) <> '0' THEN IF get_possion (loop_counter) = -1 THEN IF SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter + 1, 1) = '1' THEN text := 'إحدى '; ELSIF SUBSTR (t, loop_counter, 1) = '1' AND (l = 4 AND loop_counter <> 2) THEN text := 'واحد '; ELSIF SUBSTR (t, loop_counter, 1) = '1' AND l <> 4 THEN text := 'واحد '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND SUBSTR (t, loop_counter + 1, 1) = '1' THEN text := 'اثنا '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND (l = 4 AND loop_counter <> 2) THEN text := 'اثنين '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND l <> 4 THEN text := 'اثنين '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثة '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعة '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسة '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستة '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعة '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانية '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعة '; END IF; ELSIF get_possion (loop_counter) = 0 THEN IF SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter - 1, 1) = '0' THEN text := 'عشرة '; ELSIF SUBSTR (t, loop_counter, 1) = '1' THEN text := 'عشر '; ELSIF SUBSTR (t, loop_counter, 1) = '2' THEN text := 'عشرون '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثون '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعون '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسون '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستون '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعون '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانون '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعون '; END IF; ELSIF get_possion (loop_counter) = 1 THEN IF SUBSTR (t, loop_counter, 1) = '1' THEN text := 'مائة '; ELSIF SUBSTR (t, loop_counter, 1) = '2' THEN text := 'مائتين '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعمائة '; END IF; END IF; END IF; IF loop_counter = 1 OR (SUBSTR (t, loop_counter, 1) = '0') OR (loop_counter = 2 AND SUBSTR (t, loop_counter - 1, 1) = '0') OR (loop_counter = 3 AND SUBSTR (t, loop_counter - 2, 2) = '00') OR ( get_possion (loop_counter) = 0 AND SUBSTR (n, loop_counter - 1, 1) = 1 ) THEN follow := ''; ELSE follow := 'و '; END IF; IF SUBSTR (n, loop_counter - 3, 3) <> '000' THEN IF (l + m - loop_counter = 11 AND l > 12) THEN CATEGORY := 'بليار '; ELSIF (l + m - loop_counter = 8 AND l > 9) THEN CATEGORY := 'بليون '; ELSIF (l + m - loop_counter = 5 AND l > 6) THEN CATEGORY := 'مليون '; ELSIF (l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) = '2' ) THEN CATEGORY := 'الفين '; ELSIF ( l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) NOT IN ('1', '2') ) THEN CATEGORY := 'الاف '; ELSIF (l + m - loop_counter = 2 AND l = 5 AND SUBSTR (n, 2, 2) = '10' ) THEN CATEGORY := 'الاف '; ELSIF (l + m - loop_counter = 2 AND l > 3) THEN CATEGORY := 'الف '; END IF; END IF; number_in_text := CATEGORY || follow || text || number_in_text; CATEGORY := ''; text := ''; END LOOP; RETURN number_in_text; END; END convert_number; / Examples SELECT convert_number.to_text (.235, 'USD') FROM DUAL فقط اربعة و عشرون سنت لا غير SELECT convert_number.to_text (12435.2, 'EGP') FROM DUAL فقط اثنا عشر الف و اربعمائة و خمسة و ثلاثون جنيه و عشرون قرش لا غير SELECT convert_number.to_text (100435.3032356, 'SR') FROM DUAL فقط مائة الف و اربعمائة و خمسة و ثلاثون ريال و ثلاثون هلله لا غير SELECT convert_number.to_text (1250000023) FROM DUAL واحد بليون و مائتين و خمسون مليون و ثلاثة و عشرون اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
أسامة موسى بتاريخ: 23 نوفمبر 2005 تقديم بلاغ مشاركة بتاريخ: 23 نوفمبر 2005 :angry: مشكور على الافادة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mo_gho بتاريخ: 29 نوفمبر 2005 تقديم بلاغ مشاركة بتاريخ: 29 نوفمبر 2005 الأخ mm_tahaلم تحدد في ال package body الfunction التي اسمها to_textبرجاء استكمال الto_text و التي اظن انها تحتوي على اسماء العملات اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Maan بتاريخ: 15 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 15 ديسمبر 2005 يسلمو الايادي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Mhamad_Wanly بتاريخ: 15 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 15 ديسمبر 2005 شكرا على هالمعلومات الظريفة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
adel_hussam بتاريخ: 18 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 18 ديسمبر 2005 بسم الله الرحمن الرحيمالأخ/ طهانا احد أعضاء منتدى مجموعة مستخدمي اوراكل العربوقد استفدت ( حامداً لله ) من الدالة التي وضعتها في المنتدى، الخاصة بتحويل الارقام الى كتابة ولكني بعد استخدامها وجدت بعض الأشياء التي يجب ان تعيد النظر فيها وهي كالتالي:1- الدالة لا تدعم الفاصلة العشرية 2- عند كتابة الرقم (10002) يقوم بكتابته على الشكل عشرة و اثنين ين ياباني فقط لاغيـــر3- عند كتابة الرقم (2002) يقوم بكتابته على الشكل الفين و ين ياباني فقط لاغيـــرهل يمكنك اعادة النظر في الدالة وارساله الي على هذا الايميل وسأكون شاكرا لكواذا لم تجد الوقت لذلك هل يمكنك شرحها لي (مفهومها والية عملها) وانا سأتكفل بالباقي وسأنشرها باسمكوأرجو أن يكون ذلك بأسرع وقت ممكن لحاجتي الضرورية لهاأخوكعادل حساماليمن اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
banader22 بتاريخ: 24 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 24 ديسمبر 2005 اخواني مشكورين على الجهد المبذول ولكن بعد إذنكم انا حاب استخدم الداله او اضيفها على البرنامج عندي اي على الديفلوبر افيدوني هل اضيف txt او اضيف desplay itemاعذروني لأنني مبتدأ واحاول استفيد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
banader22 بتاريخ: 25 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 25 ديسمبر 2005 شباب مشكوريين على الجهد الرائع وماشاء الكل كان محتاج مثل هذه البكجات الحلوة اللي تثري اي برنامج ولكن اخواني اود ان اضيف هذا الباكج إلى برنامجي اي اضيفه إلى الفورم بصراحة حاولت ان انشئ له package space و package body ولكن لا يقبل هذا طبعاَ بعد إضافة item من نوع text item في data base ارجو الإستفادة من هذا الموضوع بقدر الإمكان مع العلم انني مبتدأولكم جزيل الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Mugaid بتاريخ: 25 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 25 ديسمبر 2005 SQL> SELECT Convert_Number.get_text (1000048) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(100048)-------------------------------------------واحد مليون و ثمانية و اربعون مشكورين على المشاركات الحلوه والمفيده وانا عندي سؤال في المثال الي فوق هل استطيع الاكتفاء بكتابه: مليون و ثمانية و اربعون بدلا من واحد مليون و ثمانية و اربعون وشكراااا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
banader22 بتاريخ: 26 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 26 ديسمبر 2005 يا اخ mm_taha مشكور على الجهد المبذول اتمنى ان تساعدني على اضافة هذا العمل لمشروعي اي اضافته على الفورم اذا ممكن وعلى فكرة انا حاولت إضافة هذا العمل بعمل pacakage space و package body وهذا طبعا بعد اضافة حقل للجدول وهو text ولكن كان دائما يظهر لي error على اساس انه المصادر غلط ارجو المساعدة في هذا الجانب . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mm_taha بتاريخ: 28 ديسمبر 2005 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 28 ديسمبر 2005 معزرة أخ mo_gho فعلا هذة الباكج بودى ناقصة الدالة to_textمعزرة مرة أخرى الى الجميع ولكن هذا الخطأ غير مقصود وهذة هى الباكج الصحيحة CREATE OR REPLACE PACKAGE convert_number AS FUNCTION get_text (num IN VARCHAR2) RETURN VARCHAR2; FUNCTION get_possion (i IN NUMBER) RETURN NUMBER; FUNCTION to_text (num IN VARCHAR2) RETURN VARCHAR2; FUNCTION to_text (num IN VARCHAR2, cur IN VARCHAR2) RETURN VARCHAR2; END convert_number; / CREATE OR REPLACE PACKAGE BODY convert_number AS FUNCTION get_possion (i IN NUMBER) RETURN NUMBER IS p NUMBER; BEGIN p := i MOD 3; IF p = 2 THEN p := -1; END IF; RETURN p; END; FUNCTION get_text (num IN VARCHAR2) RETURN VARCHAR2 IS n VARCHAR2 (20); text VARCHAR2 (20); number_in_text VARCHAR2 (2000); CATEGORY VARCHAR2 (20); follow VARCHAR2 (2); t VARCHAR2 (20); /* the number string in the new order */ l NUMBER; /* the length of number */ m NUMBER := 0; /* the addition number so l can be devided by 3 */ loop_counter NUMBER; BEGIN l := LENGTH (num); IF l MOD 3 = 1 THEN m := 2; ELSIF l MOD 3 = 2 THEN m := 1; END IF; n := LPAD (num, l + m, 0); FOR loop_counter IN 1 .. l + m LOOP t := t || SUBSTR (n, loop_counter + get_possion (loop_counter - 1), 1); END LOOP; FOR loop_counter IN REVERSE 1 .. l + m LOOP IF SUBSTR (t, loop_counter, 1) <> '0' THEN IF get_possion (loop_counter) = -1 THEN IF SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter + 1, 1) = '1' THEN text := 'إحدى '; ELSIF SUBSTR (t, loop_counter, 1) = '1' AND (l = 4 AND loop_counter <> 2) THEN text := 'واحد '; ELSIF SUBSTR (t, loop_counter, 1) = '1' AND l <> 4 THEN text := 'واحد '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND SUBSTR (t, loop_counter + 1, 1) = '1' THEN text := 'اثنا '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND (l = 4 AND loop_counter <> 2) THEN text := 'اثنين '; ELSIF SUBSTR (t, loop_counter, 1) = '2' AND l <> 4 THEN text := 'اثنين '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثة '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعة '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسة '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستة '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعة '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانية '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعة '; END IF; ELSIF get_possion (loop_counter) = 0 THEN IF SUBSTR (t, loop_counter, 1) = '1' AND SUBSTR (t, loop_counter - 1, 1) = '0' THEN text := 'عشرة '; ELSIF SUBSTR (t, loop_counter, 1) = '1' THEN text := 'عشر '; ELSIF SUBSTR (t, loop_counter, 1) = '2' THEN text := 'عشرون '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثون '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعون '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسون '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستون '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعون '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانون '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعون '; END IF; ELSIF get_possion (loop_counter) = 1 THEN IF SUBSTR (t, loop_counter, 1) = '1' THEN text := 'مائة '; ELSIF SUBSTR (t, loop_counter, 1) = '2' THEN text := 'مائتين '; ELSIF SUBSTR (t, loop_counter, 1) = '3' THEN text := 'ثلاثمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '4' THEN text := 'اربعمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '5' THEN text := 'خمسمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '6' THEN text := 'ستمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '7' THEN text := 'سبعمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '8' THEN text := 'ثمانمائة '; ELSIF SUBSTR (t, loop_counter, 1) = '9' THEN text := 'تسعمائة '; END IF; END IF; END IF; IF loop_counter = 1 OR (SUBSTR (t, loop_counter, 1) = '0') OR (loop_counter = 2 AND SUBSTR (t, loop_counter - 1, 1) = '0') OR (loop_counter = 3 AND SUBSTR (t, loop_counter - 2, 2) = '00') OR ( get_possion (loop_counter) = 0 AND SUBSTR (n, loop_counter - 1, 1) = 1 ) THEN follow := ''; ELSE follow := 'و '; END IF; IF SUBSTR (n, loop_counter - 3, 3) <> '000' THEN IF (l + m - loop_counter = 11 AND l > 12) THEN CATEGORY := 'بليار '; ELSIF (l + m - loop_counter = 8 AND l > 9) THEN CATEGORY := 'بليون '; ELSIF (l + m - loop_counter = 5 AND l > 6) THEN CATEGORY := 'مليون '; ELSIF (l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) = '2' ) THEN CATEGORY := 'الفين '; ELSIF ( l + m - loop_counter = 2 AND l = 4 AND SUBSTR (n, 3, 1) NOT IN ('1', '2') ) THEN CATEGORY := 'الاف '; ELSIF (l + m - loop_counter = 2 AND l = 5 AND SUBSTR (n, 2, 2) = '10' ) THEN CATEGORY := 'الاف '; ELSIF (l + m - loop_counter = 2 AND l > 3) THEN CATEGORY := 'الف '; END IF; END IF; number_in_text := CATEGORY || follow || text || number_in_text; CATEGORY := ''; text := ''; END LOOP; RETURN number_in_text; END; FUNCTION to_text (num IN VARCHAR2) RETURN VARCHAR2 IS str VARCHAR2 (10000); BEGIN str := get_text (TRUNC (num)); RETURN str; END; FUNCTION to_text (num IN VARCHAR2, cur IN VARCHAR2) RETURN VARCHAR2 IS str VARCHAR2 (10000); integer_v NUMBER; integer_str VARCHAR2 (10000); integer_cur VARCHAR2 (10000); fraction_v NUMBER; fraction_str VARCHAR2 (10000); fraction_cur VARCHAR2 (10000); BEGIN integer_v := TRUNC (num); fraction_v := (ROUND (num, 2) - TRUNC (num)) * 100; IF cur = 'EGP' THEN integer_cur := ' جنيه'; fraction_cur := ' قرش'; ELSIF cur = 'USD' THEN integer_cur := ' دولار'; fraction_cur := ' سنت'; ELSIF cur = 'SR' THEN integer_cur := ' ريال'; fraction_cur := ' هلله'; END IF; IF integer_v = 0 THEN integer_str := TO_CHAR (NULL); ELSE integer_str := get_text (integer_v) || integer_cur; END IF; IF fraction_v = 0 THEN fraction_str := TO_CHAR (NULL); ELSE IF integer_v = 0 THEN fraction_str := get_text (fraction_v) || fraction_cur; ELSE fraction_str := ' و ' || get_text (fraction_v) || fraction_cur; END IF; END IF; str := integer_str || ' ' || fraction_str; RETURN ' فقط ' || str || ' لا غير'; END; END convert_number; / اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mm_taha بتاريخ: 28 ديسمبر 2005 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 28 ديسمبر 2005 الأخ banader22 هذا مثال على الفورم CONVER_NUMBER.zip اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
banader22 بتاريخ: 28 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 28 ديسمبر 2005 بسم الله الرحمن الرحيم ياشباب يعطيكم الف عافية على الجهد المطلوب لكن بصراحة عندي طلب بسيط بصراحة واجهت صعوبة في إضافة هذا الكود على البرنامج اللي عندي في الديفيلوبر .الرجاء المساعدة بتبيين الخطوات اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
banader22 بتاريخ: 28 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 28 ديسمبر 2005 بسم الله الرحمن الرحيممشكوووووووووووووووور على الفورم يا mm_tahaجزاك الله خير ويعطيك الف عافية اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abumohamad بتاريخ: 12 يونيو 2006 تقديم بلاغ مشاركة بتاريخ: 12 يونيو 2006 مشكوووووووووووووووووووووووووووربارك الله فيك وصراحة مجهود تشكر عليه يا استاذ banader22ولمزيد من التوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ابوسراج بتاريخ: 13 يونيو 2006 تقديم بلاغ مشاركة بتاريخ: 13 يونيو 2006 حيرتوني ياجماعة أي كود أعتمد فيهم أفيدوني برد رقم كم؟؟ وأخذه وأطبقه عندي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.