بتاريخ: 25 سبتمبر 200817 سنة comment_139672 السلام عليكم و رحمة اللهاولا كل عام وانتم بخير بمناسبة عيد الفطر المبارك وتقبل الله منا ومنكم صالح الاعمالالموضوع ببسباطة اني عملت اجراء لحذف الصفوف المزدوجة على اساس عمودين في الجدولهما c1,c2 والاجراء مظبوط من غير اخطاء بس اثناء تشغيل الاجراء يطلع الخطأ ده ERROR at line 1: ORA-01403: no data found ORA-06512: at "HR.REMOVE_DUOBLE", line 12 ORA-06512: at line 1 والكود نفسه create or replace procedure remove_duoble is max_row number; co1 varchar(2); co2 varchar(2); co22 varchar(2); co11 varchar(2); begin select max(rownum) into max_row from split_table; for counter in 1..max_row loop select 1,2 into co1,co2 from split_table where rownum=counter; for inner_counter in counter+1..max_row loop select 1,2 into co11,co22 from split_table where rownum=counter; if (co1=co11) and (co2=co22) then delete from split_table where rownum=inner_counter; end if; end loop; end loop; end; والجدول المستخدم داخل الكود split_table create table split_table ( c1 varchar2(1), c2 varchar2(1), c3 varchar2(1), c4 varchar2(1), c5 varchar2(1), c6 varchar2(1), c7 varchar2(1), c8 varchar2(1) ); تقديم بلاغ
بتاريخ: 25 سبتمبر 200817 سنة comment_139674 ORA-01403 no data found Cause: In a host language program, all records have been fetched. The return code from the fetch was +4, indicating that all records have been returned from the SQL query. Action: Terminate processing for the SELECT statement ----------------------------------الاول كنت مفروض انك تدينا البيانات اللى عندك فى الجدول علشان نقدر نطبق عليها ، هيكلة الجدول مش كفاية .... و طبعاً انت هتعطينا البيانات فى هيئة جمل insert ، قم بتحميل الملف المرفق لمعرفة كيفية عمل ذلك .و الى ان تقوم بذلك ,,,,, قم بقراءة هذه الوصلة ..... ستفيدك فيما تريده ( اللى على حسب اللى فهمته منك انك عاوز تمسح الصفوف المتكرره )http://www.araboug.org/ib/index.php?showtopic=26531و كمشاركة زيادة منى قم بعمل هذه الاكواد لزيادة الوضوح لكيفية معرفة الصفوف المتكرره :- create table t1 ( id number , N varchar2(11)); insert into t1 values (1,'as'); insert into t1 values (1,'as'); insert into t1 values (1,'as'); insert into t1 values (1,'as'); insert into t1 values (2,'db'); insert into t1 values (2,'db'); insert into t1 values (2,'db'); insert into t1 values (2,'db'); commit; Select ID, N , count(*) as Occurrences from T1 HAVING count(*) > 1 group by ID, N; و بكده تكون شوفت الصفوف المتكرره و تعرف كمان عدد التكرار.لكن لو هتمسح فشوف الرابط اللى انا اتدهولك.و انا منتظر ردك فى حال اذا مازالت المشكلة مستمرة.و بالتوفيق Export_Table_Data.zip تقديم بلاغ
بتاريخ: 25 سبتمبر 200817 سنة comment_139679 مرحباهاي الكود اللي بيحذف كل المتكرر في الجدول: بالإعتماد على الجدول T1 اللي عملو الأخ hanyFreedom delete from t1 where id in (Select ID from T1 having count(*)>1 -- there is more than one record from this id in table... group by ID); commit; تقديم بلاغ
بتاريخ: 25 سبتمبر 200817 سنة comment_139684 شكراً يا أخ ORA-2008 على هذا الكود ..... و هو فعلاً بيحذف كل المتكرر فى الجدول ...... بارك الله فيك انت فعلاً شاب مجتهد.و فى حال أذا أراد أخونا mohamed_abdelsalam أن يحذف الصفوف المتكرره و يبقى على صف واحد من هذه الصفوف ، حتى لا يحدث خلل فى التسلسل الرقمى للعمود ... فأنا أنصح بأستخدام ال ROWID .... وسوف اعرض هنا الكود بالكامل من اول تكوين الجدول و مليئه بالبيانات و حتى معرفة المتكرر و مسحه مع ابقاء صف واحد منه . CREATE TABLE t1 ( ID NUMBER , n VARCHAR2(11)); -------------------------------------------------------------------------------- INSERT INTO T1 ( ID, N ) VALUES ( 1, 'as'); INSERT INTO T1 ( ID, N ) VALUES ( 1, 'as'); INSERT INTO T1 ( ID, N ) VALUES ( 1, 'as'); INSERT INTO T1 ( ID, N ) VALUES ( 1, 'as'); INSERT INTO T1 ( ID, N ) VALUES ( 2, 'db'); INSERT INTO T1 ( ID, N ) VALUES ( 2, 'db'); INSERT INTO T1 ( ID, N ) VALUES ( 2, 'db'); INSERT INTO T1 ( ID, N ) VALUES ( 2, 'db'); INSERT INTO T1 ( ID, N ) VALUES ( 3, 'ghg'); INSERT INTO T1 ( ID, N ) VALUES ( 3, 'ghg'); INSERT INTO T1 ( ID, N ) VALUES ( 4, 'jhg'); INSERT INTO T1 ( ID, N ) VALUES ( 5, 'ikjy'); INSERT INTO T1 ( ID, N ) VALUES ( 6, 'uiy'); INSERT INTO T1 ( ID, N ) VALUES ( 7, 'hnh'); INSERT INTO T1 ( ID, N ) VALUES ( 7, 'hnh'); INSERT INTO T1 ( ID, N ) VALUES ( 7, 'hnh'); -------------------------------------------------------------------------------- COMMIT ; -------------------------------------------------------------------------------- SELECT ID, n, COUNT (*) AS occurrences FROM hr.t1 HAVING COUNT (*) > 1 GROUP BY ID, n; -------------------------------------------------------------------------------- DELETE FROM t1 WHERE ROWID NOT IN (SELECT MAX (ROWID) FROM t1 GROUP BY ID); -------------------------------------------------------------------------------- ---------------------------END----------------------------------------------- -------------------------------------------------------------------------------- و يمكن ألقاء نظرة على الملف المرفق لمعرفة شكل ال OUTPUTمع ملاحظة ان هذا الكود تم نسخه من الرابط الذى قمت بوضعه فى مشاركتى السابقة .... و الذى كتبه هو الأخ Slamonty و بالتوفيق dup_val_output.txt تقديم بلاغ
بتاريخ: 27 سبتمبر 200817 سنة كاتب الموضوع comment_139772 انا متشكر جدا يا جماعة علي هذه الاضافات الجميلة شكرا ا/هاني وشكرا ا/ORA-2008 الاكواد شغالة تمام تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.