إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

Package خاصة بقلب النصوص المدخلة اليها ....


1 رد (ردود) على هذا الموضوع

#1 m_nasef

m_nasef

    مشترك

  • الأعضــاء
  • 85 مشاركة

تاريخ المشاركة 08 August 2007 - 01:25 AM

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته ،

ال package التالية تحتوى على دالتين :-
الأولى : rev_txt تعكس النص المدخل فقط (بكل ما تحتويه من مسافات)
الثانية : rev_txt_no_spaces تنظف النص من اية مسافات حتى ولو كان هناك اكثر من مسافة بين الكلمتين (تعتمد على while .... loop )

create or replace package str_pkg as
   function rev_txt (i_txt varchar2) return varchar2;
   function rev_txt_no_spaces (i_txt varchar2) return varchar2;
end;
/

اما بالنسبة لل backage body ففيها ثلاث دوال ....

الأولى : clean_spaces فهى تعتمد على while .... loop حيث
instr(v_txt, ' ') ترجع رقم اكبر من صفر اذا كان هناك اية مسافات وهكذا حتى تزول المسافات .........

وبالنسبة للدالة reverse_txt تشرح نفسها ....
فهناك مصفوفتين : الأولى نضع فيها حروف الجملة حرف .. حرف .. ثم نعكسها فى مصفوفة اخرى .....

والدالة rev_txt تقوم بعمل دمج بين الدوال السابقة ........

create or replace package body str_pkg as
   function clean_spaces (i_txt varchar2) return varchar2
   is
	  v_txt varchar2(200);
   begin
	  v_txt := lower(i_txt);
	  while instr(v_txt, ' ') > 0 loop
		 v_txt := replace(v_txt, ' ');
	  end loop;
	  return v_txt;
   end;

   function reverse_txt (i_txt varchar2) return varchar2
   is
	  type chararray_typ is table of varchar2(1) index by binary_integer;
	  chararray chararray_typ;
	  type revchararray_typ is table of varchar2(1) index by binary_integer;
	  revchararray revchararray_typ;
	  v_revtxt varchar2(200);
	  v_len integer := length(i_txt);
   begin
	  for i in 1..v_len loop
		 chararray(i) := substr(i_txt, i, 1);
	  end loop;
	  for i in 1..v_len loop
		 revchararray(i) := chararray(v_len-i+1);
	  end loop;
	  for i in 1..v_len loop
		 v_revtxt := v_revtxt || revchararray(i);
	  end loop;
	  return v_revtxt;
   end;

   function rev_txt (i_txt varchar2, v_option integer default 1) return varchar2
   is 
	  v_txt varchar2(200);
   begin 
	  if v_option = 1 then
		 v_txt := reverse_txt( i_txt );
	  elsif v_option = 2 then
		  v_txt := reverse_txt( clean_spaces( i_txt ) );
	  end if;

	  return v_txt;
   end;
end;
/

وجرب ال package بنفسك ............


مع تحياتى ،
محمد ناصف - مصر

#2 -=|mOOdY|=-

-=|mOOdY|=-

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,324 مشاركة

تاريخ المشاركة 08 August 2007 - 01:33 AM

يعطيك العافيك اخ محمد وجزاك الله كل خير

بانتظار الجديد منك

صورة

!!! كم أنت عبقري !!!