الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عند عمل Loop في برنامج تتكرر اخر نتيجة مرتين

بدأه الحذر في 20 ديسمبر 2007 · 5 رد · 2,805 مشاهدة · في قسم لغةالاجرائات Pl/sql
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

انا عملت برنامج يعرض اسم الموظف و الراتب للموظفين الذين يشتغلون في قسم رقم 20

لقاعدة البايانات الموجودة في الاوراكل نفسه

البرنامج هو

declare
cursor abc is select * from emp where deptno = 20;
x abc%rowtype;
begin
if not abc%isopen then
open abc;
end if;
loop
exit when abc%notfound;
fetch abc into x;
dbms_output.put_line('name'||x.ename||'sal'||x.sal||'deptno'||x.deptno);
end loop;
if abc%isopen then
close abc;
end if;
end;

و النتيجة

name SMITH sal 800 deptno 20

name JONES sal 2975 deptno 20

name SCOTT sal 3000 deptno 20

name ADAMS sal 1100 deptno 20

name FORD sal 3000 deptno 20

name FORD sal 3000 deptno 20

فنجد اخر نتيجو الي هي FORD تكررت مرتين ليس لان FORD مدخل مرتين لأ

انا جربت البرنامج لاكثر من قسم و لكن نفس الناتج يظهر لي

ما السبب

و كيف التلافي من هذا التكرار

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

I_can_always_make_you_smile_by_Praerion.jpg

#2

با النسبة لعملية التكرار توجد هناك تعليمة في sql وهي distinct وتاتي مباشرة بعد select وبهذ التعليمة يمكن التخلص من التكرار

باالتوفيق...

بقدر الكد تكتسب المعالي ... ومن طلب العلا سهر الليالي

ومن رام العلى من غير كد ... أضاع العمر في طلب المحالِ

#3

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

declare
cursor abc is select * from emp where deptno = 20;
x abc%rowtype;
begin
if not abc%isopen then
open abc;
end if;
loop
fetch abc into x;
exit when abc%notfound;
dbms_output.put_line('name'||x.ename||'sal'||x.sal||'deptno'||x.deptno);
end loop;
if abc%isopen then
close abc;
end if;
end;

بالتوفيق ،،

#4

Salam

Try this code

Declare
   Cursor Abc Is
      Select *
  From Emp Where Deptno = 20;

Begin For Rec In Abc Loop
       Dbms_output.Put_line (   'name' || Rec.Ename || 'sal' || Rec.Sal || 'deptno' || Rec.Deptno );
    End Loop;
End;

the output is

nameSMITHsal800deptno20

nameJONESsal2975deptno20

nameSCOTTsal3000deptno20

nameADAMSsal1100deptno20

nameFORDsal3000deptno20

تم تعديل هذه المشاركة بواسطة m_izzeddin في 5 يناير 2008 في 00:41

#5

declare

cursor emp_cur is

select last_name,salary from employees

where department_id=20;

ename varchar2(20);

esal number;

begin

open emp_cur;

loop

fetch emp_cur into ename,esal;

exit when emp_cur%notfound;

DBMS_OUTPUT.PUT_LINE( ename ||' '||esal);

END LOOP;

close emp_cur;

end;

/

#6
الحذر كتب:
السلام عليكم و رحمة الله و بركاته

انا عملت برنامج يعرض اسم الموظف و الراتب للموظفين الذين يشتغلون في قسم رقم 20

لقاعدة البايانات الموجودة في الاوراكل نفسه

البرنامج هو

declare
cursor abc is select * from emp where deptno = 20;
x abc%rowtype;
begin
if not abc%isopen then
open abc;
end if;
loop
exit when abc%notfound;
fetch abc into x;
dbms_output.put_line('name'||x.ename||'sal'||x.sal||'deptno'||x.deptno);
end loop;
if abc%isopen then
close abc;
end if;
end;

و النتيجة

name SMITH sal 800 deptno 20

name JONES sal 2975 deptno 20

name SCOTT sal 3000 deptno 20

name ADAMS sal 1100 deptno 20

name FORD sal 3000 deptno 20

name FORD sal 3000 deptno 20

فنجد اخر نتيجو الي هي FORD تكررت مرتين ليس لان FORD مدخل مرتين لأ

انا جربت البرنامج لاكثر من قسم و لكن نفس الناتج يظهر لي

ما السبب

و كيف التلافي من هذا التكرار

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

اخي الكريم .. المشكله نفسها حدثت معي والحل هوه....

التبديل ما بين جملتين الfetch & exit وجمله

مواضيع مشابهة