Yousef_Elkordi بتاريخ: 12 مايو 2009 تقديم بلاغ مشاركة بتاريخ: 12 مايو 2009 السلام عليكماخواني .. لدي DB بهال 2 tabels الجدول الاول فية بيانات العملاء و ارقامهم .. وقمت بإستخراج كمية من البيانات من الجدول الاول ( 50 اسم ) .. عن طريق كويري .. و لم احفظها باي جدول جديدولدي الجدول الثاني فية ايضا بيانات العملاء و ارقامهم ... الان المشكلة اني اريد ان اعدل بيانات الجدول الثاني ...اي ان اقوم بعمل update لبيانات الجدول الثاني .. على حسب الناتج من الجدول الاولفارجو الاجابة باسرع وقت ممكنولكم جزيل الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 12 مايو 2009 تقديم بلاغ مشاركة بتاريخ: 12 مايو 2009 بص يا أخير حسب ، يمكنك عمل Delete لكافة السجلات الموجودة في الجدول الثاني ومن ثم تدرج من جديد البيانات المرتجعة في الإستعلام كما يلي : Begin Delete From Table2; Insert Into Table2(Field1, Field2, Field3) Select Field1,Field2,Field3 From Table1 Where Field1 <= 50; Commit; End; / أو يمكنك عمل Cursor ثم تعمل Loop علي كافة السجلات المرتجعة ، ومن ثم تشوف إن كان السجل موجود أم لا ، لو مش موجود تعمل له Insert ولو موجود تعمل له Updateبالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Yousef_Elkordi بتاريخ: 12 مايو 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 12 مايو 2009 شكرا اخي الكريم .. و لكن اتمنى ان تفيدني اكثر ... لاني اتحدث على مستوى ال sql وليس ال pl\sqlولك جزيل الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Yousef_Elkordi بتاريخ: 12 مايو 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 12 مايو 2009 للتوضيح ... انا لا اريد ان اعمل دليت لاي شي من البيانات من الجدول الثاني .. انا اريد تحديث بعض البيانات من الجدول الثاني ببيانات من الجدول الاولمثال :table 1----------------------------------------------------------------cust_code - cust name - loc----------------------------------------------------------------c200 - Salim - Egypt c400 - Marwan - UKc600 - Yousef - USAc500 - Ali - Ammanو الجدول الثاني فية نفس الحقول بس فيهم كمان شوي زيادات .. مثل العمر و العمل و هكذاو بعض البيانات مختلفة .table 2---------------------------------------------------------------------------------cust_code - Age - cust name - loc---------------------------------------------------------------------------------c200 - 22 - Salim - Egypt c400 - 25 - Marwan - Yamanc600 - 35 - Yousef - Kuwaitc500 - 30 - Ali - Ammanلان لو تلاحظو ... الاسمين yousef و marwan بالجدول الاول فيهم ال location مختلف عن بعض ....الان .. انا قمت بكتابة كويري ... قمت عن طريقها باخراج البيانات المختلفة من الجدول الاول ... و اريد فقط تبديل هذة البيانات المختلفة من الجدول الاول .. بالجدول الثاني .. فما هو الحل ...!!! اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
tanbet بتاريخ: 13 مايو 2009 تقديم بلاغ مشاركة بتاريخ: 13 مايو 2009 عليك بالmerge أخي الكريم وهي من ضمن جمل ال sql في أوراكل ولا أريد أطيل فهذا مثال على استخدام الmerge merge [ hints ] into table-name-1 | view-name-1 [ alias-1 ] using table-name-2 | view-name-2 | subquery [ alias-2 ] on ( condition ) [ merge-update-clause ] [ merge-insert-clause ] [ error-logging-clause ]; create table table_dest ( id number primary key, txt varchar2(20) ); insert into table_dest values (1,'one'); insert into table_dest values (3,'three'); insert into table_dest values (5,'five'); commit; create table table_source ( id number primary key, txt varchar2(20) ); insert into table_source values (2,'TWO'); insert into table_source values (3,'THREE'); commit; merge into table_dest d using table_source s on (s.id = d.id) when matched then update set d.txt = s.txt when not matched then insert (id, txt) values (s.id, s.txt); select * from table_dest; ID TXT ---------- -------------------- 1 one 3 THREE 5 five 2 TWO Note: It is not possible to update a field in the destination table that is used to merge with the source table. وهذا المصدر اذا لم يظهر الكود بشكل واضح http://www.adp-gmbh.ch/ora/sql/merge.html اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Yousef_Elkordi بتاريخ: 13 مايو 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 13 مايو 2009 السلام عليكم اخي العزيز .. جربت الكود التاليmerge into table_dest dusingtable_source s on (s.id = d.id)when matched then update set d.txt = s.txtwhen not matched then insert (id, txt) values (s.id, s.txt);select * from table_dest; ID TXTولكن الامر WHEM غير معرف بال SQL ???ولك جزيل الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
tanbet بتاريخ: 14 مايو 2009 تقديم بلاغ مشاركة بتاريخ: 14 مايو 2009 قد تكون المشكلة في الجمله من نسخة الداتابيس لأن merge مدعومة فقط منذ oracle9i وما بعدها أما النسخ السابقة فهي غير موجودةأعتقد ان الحل سيكون بعدة أجزاء أي سنقسم عبارة الmerge فسيكون عندي عبرة لإدخال ما هو جديد وعبارة أخرى تعدل الموجود أنا جربت على الجداول السابقة في المثال فأعطتني نفس نتيجة الmerge وهذا هو الكود update table_dest a set a.txt = nvl((select b.txt from table_source b where b.id = a.id ),a.txt) where exists(select 1 from table_source b2 where b2.id = a.id) / insert into table_dest(id,txt) SELECT a.id, a.txt FROM table_source a where not exists (SELECT 1 FROM table_dest b where b.id = a.id) وهما كما ترى جمليتين واحدة تعدل الموجود أصلا وأخرى تدخل الغير موجود اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.