بتاريخ: 19 يونيو 200520 سنة comment_39547 هذا الموضوع قد نشر من قبل ولكن اردت ان انشرة مرة أخرى بعد إجراء بعض التعديلات 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 تقديم بلاغ
بتاريخ: 29 يونيو 200520 سنة comment_40411 جزاك الله خيراً أخي الكريم ولكن هل من الممكن أن تضيف بعض التعديلات القليله ليعطي النتيجة بالهللات ... أنا أعرف أني أطلب الكثير ...وإذا أمكنني أن أنشيئ واحد يقوم بتغيير الريال السعودي إلى دولار أمريكي مثلاً سوف أقوم به . تقديم بلاغ
بتاريخ: 30 يونيو 200520 سنة comment_40432 الله يعطيك العافية يا أخ mm_taha طريقة جيدة وأتمنى لك التوفيق وبالنسبة إلى طلب الأخ ابراهيم بخش فقد قمت بعمل طريقة أخرى باسم (التفقيط) وهي مرفقة مع الرسالة وأرجو ان تستفيد منها وما عليك إلا تعديل كلمة دينار إلى ريال وكلمة فلس إلى هلله convertno.fmb تقديم بلاغ
بتاريخ: 30 يونيو 200520 سنة comment_40434 أشكرك أخي الحبيب هذه الطريقة أعمل عليها من فترة ، بس هذه الطريقة كانت مظبوطة أكثر من عملي .أكرر شكري تقديم بلاغ
بتاريخ: 17 يوليو 200520 سنة comment_41735 هذا الموضوع قد نشر من قبل ولكن اردت ان انشرة مرة أخرى بعد إجراء بعض التعديلات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) ------------------------------------------- واحد مليون و ثمانية و اربعون ارك الله فيك والله انو عمل ممتاز ما شاء الله تقديم بلاغ
بتاريخ: 23 نوفمبر 200520 سنة كاتب الموضوع comment_52448 هذا التعديل بعد إضافة العملة حيث يمكن تغيرها او إضافة عملا أخرى /* 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 واحد بليون و مائتين و خمسون مليون و ثلاثة و عشرون تقديم بلاغ
بتاريخ: 29 نوفمبر 200520 سنة comment_52795 الأخ mm_tahaلم تحدد في ال package body الfunction التي اسمها to_textبرجاء استكمال الto_text و التي اظن انها تحتوي على اسماء العملات تقديم بلاغ
بتاريخ: 18 ديسمبر 200520 سنة comment_54656 بسم الله الرحمن الرحيمالأخ/ طهانا احد أعضاء منتدى مجموعة مستخدمي اوراكل العربوقد استفدت ( حامداً لله ) من الدالة التي وضعتها في المنتدى، الخاصة بتحويل الارقام الى كتابة ولكني بعد استخدامها وجدت بعض الأشياء التي يجب ان تعيد النظر فيها وهي كالتالي:1- الدالة لا تدعم الفاصلة العشرية 2- عند كتابة الرقم (10002) يقوم بكتابته على الشكل عشرة و اثنين ين ياباني فقط لاغيـــر3- عند كتابة الرقم (2002) يقوم بكتابته على الشكل الفين و ين ياباني فقط لاغيـــرهل يمكنك اعادة النظر في الدالة وارساله الي على هذا الايميل وسأكون شاكرا لكواذا لم تجد الوقت لذلك هل يمكنك شرحها لي (مفهومها والية عملها) وانا سأتكفل بالباقي وسأنشرها باسمكوأرجو أن يكون ذلك بأسرع وقت ممكن لحاجتي الضرورية لهاأخوكعادل حساماليمن تقديم بلاغ
بتاريخ: 24 ديسمبر 200520 سنة comment_55304 اخواني مشكورين على الجهد المبذول ولكن بعد إذنكم انا حاب استخدم الداله او اضيفها على البرنامج عندي اي على الديفلوبر افيدوني هل اضيف txt او اضيف desplay itemاعذروني لأنني مبتدأ واحاول استفيد تقديم بلاغ
بتاريخ: 25 ديسمبر 200520 سنة comment_55425 شباب مشكوريين على الجهد الرائع وماشاء الكل كان محتاج مثل هذه البكجات الحلوة اللي تثري اي برنامج ولكن اخواني اود ان اضيف هذا الباكج إلى برنامجي اي اضيفه إلى الفورم بصراحة حاولت ان انشئ له package space و package body ولكن لا يقبل هذا طبعاَ بعد إضافة item من نوع text item في data base ارجو الإستفادة من هذا الموضوع بقدر الإمكان مع العلم انني مبتدأولكم جزيل الشكر تقديم بلاغ
بتاريخ: 25 ديسمبر 200520 سنة comment_55438 SQL> SELECT Convert_Number.get_text (1000048) 2 FROM DUAL; CONVERT_NUMBER.GET_TEXT(100048)-------------------------------------------واحد مليون و ثمانية و اربعون مشكورين على المشاركات الحلوه والمفيده وانا عندي سؤال في المثال الي فوق هل استطيع الاكتفاء بكتابه: مليون و ثمانية و اربعون بدلا من واحد مليون و ثمانية و اربعون وشكراااا تقديم بلاغ
بتاريخ: 26 ديسمبر 200520 سنة comment_55526 يا اخ mm_taha مشكور على الجهد المبذول اتمنى ان تساعدني على اضافة هذا العمل لمشروعي اي اضافته على الفورم اذا ممكن وعلى فكرة انا حاولت إضافة هذا العمل بعمل pacakage space و package body وهذا طبعا بعد اضافة حقل للجدول وهو text ولكن كان دائما يظهر لي error على اساس انه المصادر غلط ارجو المساعدة في هذا الجانب . تقديم بلاغ
بتاريخ: 28 ديسمبر 200520 سنة كاتب الموضوع comment_55801 معزرة أخ 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; / تقديم بلاغ
بتاريخ: 28 ديسمبر 200520 سنة كاتب الموضوع comment_55807 الأخ banader22 هذا مثال على الفورم CONVER_NUMBER.zip تقديم بلاغ
بتاريخ: 28 ديسمبر 200520 سنة comment_55848 بسم الله الرحمن الرحيم ياشباب يعطيكم الف عافية على الجهد المطلوب لكن بصراحة عندي طلب بسيط بصراحة واجهت صعوبة في إضافة هذا الكود على البرنامج اللي عندي في الديفيلوبر .الرجاء المساعدة بتبيين الخطوات تقديم بلاغ
بتاريخ: 28 ديسمبر 200520 سنة comment_55852 بسم الله الرحمن الرحيممشكوووووووووووووووور على الفورم يا mm_tahaجزاك الله خير ويعطيك الف عافية تقديم بلاغ
بتاريخ: 12 يونيو 200619 سنة comment_71915 مشكوووووووووووووووووووووووووووربارك الله فيك وصراحة مجهود تشكر عليه يا استاذ banader22ولمزيد من التوفيق تقديم بلاغ
بتاريخ: 13 يونيو 200619 سنة comment_71984 حيرتوني ياجماعة أي كود أعتمد فيهم أفيدوني برد رقم كم؟؟ وأخذه وأطبقه عندي تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.