عبداللطيف بتاريخ: 15 مارس 2004 تقديم بلاغ مشاركة بتاريخ: 15 مارس 2004 للفائدة منقوله من تجربة شخص تحويل الارقام الى حروفConvert a Number to a String CREATE OR REPLACE FUNCTION to_words ( m_amount_in IN NUMBER, m_first_para IN VARCHAR2 := 'Dollars', m_second_para IN VARCHAR2 := 'Cents' ) RETURN VARCHAR2 AS m_amount NUMBER := m_amount_in; word_string VARCHAR2(1000); lower_number NUMBER; lower_str VARCHAR2(50); loop_var NUMBER := 1; /* Function declarartion to convert into string */ FUNCTION to_string (m_val_in NUMBER) RETURN CHAR IS BEGIN IF m_val_in > 0 THEN RETURN (INITCAP (TO_CHAR (TO_DATE (m_val_in, 'SSSSS'), 'SSSSSSP'))); ELSE RETURN (''); END IF; END; /* End of Function */ BEGIN /*-------------- place the parameters at required places --------------*/ lower_number := (m_amount MOD 1) * 100; /* Check for lower denominations not exceeding two digits */ IF length(lower_number) < 3 THEN IF m_amount >= 1 and lower_number > 0 THEN lower_str := ' ' || m_first_para || ' & ' || LOWER (to_string (lower_number)) || ' ' || m_second_para; ELSIF m_amount < 1 and lower_number > 0 THEN lower_str := LOWER (to_string (lower_number)) || ' ' || m_second_para; ELSIF m_amount >= 1 and lower_number = 0 THEN lower_str := ' ' || m_first_para; END IF; ELSE word_string := 'Invalid lower denomination !!' ; RETURN (word_string); END IF; /*---------------- End of placing paramters -------------------------*/ WHILE loop_var = 1 LOOP IF m_amount > 0 AND m_amount <= 1000 THEN word_string := word_string || (INITCAP (to_string (FLOOR (m_amount))) || lower_str); loop_var := 0; ELSIF m_amount > 1000 AND m_amount < 1000000 THEN word_string := word_string || (INITCAP (to_string (FLOOR (m_amount / 1000))) || ' Thousand ' || to_string (FLOOR (m_amount MOD 1000)) || lower_str ); loop_var := 0; ELSIF m_amount >= 1000000 AND m_amount < 1000000000 THEN word_string := word_string || INITCAP (to_string (FLOOR (m_amount / 1000000))) || ' Million '; m_amount := FLOOR (m_amount MOD 1000000); IF m_amount = 0 THEN loop_var := 0; word_string := word_string || lower_str; END IF; ELSIF m_amount >= 1000000000 AND m_amount <= 999999999999.99 THEN word_string := INITCAP ( to_string (FLOOR (m_amount / 1000000000))) || ' Billion '; m_amount := FLOOR (m_amount MOD 1000000000); IF m_amount = 0 THEN loop_var := 0; word_string := word_string || lower_str; END IF; ELSIF m_amount = 0 THEN word_string := ('Zero' || lower_str); loop_var := 0; ELSE word_string := 'This is beyond my scope !!'; loop_var := 0; END IF; END LOOP; RETURN (word_string); END to_words; / ويوجد المثال بالملف المرفقتحياتي Tofeeeتمت إضافة الملف مرة أخري إدارة المنتدي TO_WORDS.txt اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Guest عادل الشهري بتاريخ: 15 مارس 2004 تقديم بلاغ مشاركة بتاريخ: 15 مارس 2004 الف الف شكر : ) أخوك عادل اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
aaab77 بتاريخ: 17 مارس 2004 تقديم بلاغ مشاركة بتاريخ: 17 مارس 2004 مشكور على الدالة ولكن لدي جملة تعطيك المطلوب وهي SQL> select to_char(to_date(112004,'J'), 'JSP') from dual; TO_CHAR(TO_DATE(1191214,'J'),'JSP') ---------------------------------------------------------------- ONE HUNDRED TWELVE THOUSAND FOUR اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
وديع القباطي بتاريخ: 13 يناير 2007 تقديم بلاغ مشاركة بتاريخ: 13 يناير 2007 hghhg اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wlahmad بتاريخ: 10 فبراير 2007 تقديم بلاغ مشاركة بتاريخ: 10 فبراير 2007 شكرا جزيلا لكفتح الله عليك ونفع بك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.