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

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


m_nasef

Recommended Posts

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

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

ال 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 بنفسك ............


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

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية