بتاريخ: 3 أبريل 200817 سنة comment_125931 اخواني اعضاء المنتدىالسلام عليكم ورحمة الله وبركاتهعندي جدول اسمه test يحتوي على الرقم والاسم والراتب عمود الرقم والاسم يحتوو على 3 ريكورد لكن عمود الراتب لسا فاضي ما دخلت فيه بياناتاريد عن طريق جملة ال for ان اقوم بإدخال 3 ريكورد الي عمود الراتب يعني مثلاfor i in 1..3 loopupdate test set sal=i*1000 where id=&ddend loop;end;جربت هاذي الطريقه ولكن كان ينفذ نفس الريكورد 3 مرات دون ان ينتقال الى الريكورد التالي فما هو السببارجو ان تساعدوني وشكرا لكم تقديم بلاغ
بتاريخ: 3 أبريل 200817 سنة comment_125944 ده اللى مفروض عندك :- SQL> create table test (id number primary key , 2 name varchar2(15), 3 sal number); Table created. SQL> desc test Name Null? Type ----------------------------------------- -------- ------------ ID NOT NULL NUMBER NAME VARCHAR2(15) SAL NUMBER SQL> insert into test values (1,'qq',null); 1 row created. SQL> insert into test values (2,'ww',null); 1 row created. SQL> insert into test values (3,'ee',null); 1 row created. SQL> commit; Commit complete. انت بتقول :- ولكن كان ينفذ نفس الريكورد 3 مرات دون ان ينتقال الى الريكورد التالي يبقى كده معناه انك عاوز الاوراكل يعملك prompt عند ال ID لكل موظف عندك علشان تحط المرتب .ده الكود اللى انت عاوزه :- update test set sal = &salary where ID = &ID; و ده الناتج :- SQL> update test 2 set sal = &salary 3 where ID = &ID; Enter value for salary: 1111 old 2: set sal = &salary new 2: set sal = 1111 Enter value for id: 1 old 3: where ID = &ID new 3: where ID = 1 1 row updated. SQL> / Enter value for salary: 2222 old 2: set sal = &salary new 2: set sal = 2222 Enter value for id: 2 old 3: where ID = &ID new 3: where ID = 2 1 row updated. SQL> / Enter value for salary: 3333 old 2: set sal = &salary new 2: set sal = 3333 Enter value for id: 3 old 3: where ID = &ID new 3: where ID = 3 1 row updated. SQL> select * from test ; ID NAME SAL ---------- --------------- ---------- 1 qq 1111 2 ww 2222 3 ee 3333 اما فى حالة اذا كنت عاوز تحط نفس المرتب للكل يبقى ده الكود اللى انت عاوزه :- update test set sal = 1000; اما اذا كنت عاوز تحط قيم مختلفة للمرتبات بدون prompt فده مش هينفع اللا من خلال ال for .. loop و كمان لازم تعمل sequence فى الاول ، و خلى بالك القيم دى هتبقى متسلسلة ..... ذى كده :- create sequence hany increment by 1000; Sequence created. begin for i in 1..3 loop update test set sal = hany.nextval; end loop; end; / PL/SQL procedure successfully completed. select * from test; -- ID NAME SAL ---------- --------------- ---------- 1 qq 6001 2 ww 7001 3 ee 8001 اتمنى ان تكون الاجابة واضحة .... و بالتوفيق تم تعديل 3 أبريل 200817 سنة بواسطة hanyfreedom تقديم بلاغ
بتاريخ: 4 أبريل 200817 سنة comment_125985 السلام عليكمبص انا اعرف ان لما تعمل loop في الريكورد وفي كزا ريكورد لازم تضيف حاجة صغيرة بغض النظر في الupdate او query او اي حاجةتعمل كده first_record; for i in 1..3 loop update test set sal=i*1000 where id=&dd next_record; end loop; end بس كدهOcp Developer Junior Oracle Developer تم تعديل 4 أبريل 200817 سنة بواسطة gero تقديم بلاغ
بتاريخ: 6 أبريل 200817 سنة كاتب الموضوع comment_126152 شكرا لكل من حاول مساعدتي والحل الصحيح والمنطقي على حسب اعتقادي هو declare cursor emp_sal is select id,salary from test; emp_sal1 emp_sal%rowtype; begin open emp_sal; for i in 1..3 loop fetch emp_sal into emp_sal1; update test set salary=i*100 where id=emp_sal1.id; end loop; end; تقديم بلاغ
بتاريخ: 6 أبريل 200817 سنة comment_126156 بالنسبة للأخ geroفأعتقد انه قد خلط ما بين الداتابيز و الديفلوبر ......... لأن على حد علمى ال first_record;next_record; فى الفورمز وليس الداتابيز .بالنسبة لأخى awn78فحله الاخير جيد و ممتاز but it's not only the right and logical solution in this thread have a nice day تقديم بلاغ
بتاريخ: 23 مايو 200817 سنة comment_129418 أعتقد أن الموضوع جداً بسيط بإمكانك إستخدام curosr على النحو التالي :cursor c is select id from test;beginfor rec in c loop update test set sal=1500whereid=rec.id;end loop;commit;end; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.