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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

أريد شرح أمر Merge لو سمحتم


4 رد (ردود) على هذا الموضوع

#1 Eng_AL_kamel

Eng_AL_kamel

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • الاسم الأول:Ibraheem
  • اسم العائلة:Qaed
  • البـلـد: Country Flag
  • المنصب الحالي:DBA

تاريخ المشاركة 05 April 2010 - 06:23 PM

السلام عليكم ورحمة الله وبركاته
ممكن يا أخوتي في الله
أحد يشرح لي امر Merge
وأكون له من الشاكرين
وشكرا



#2 sasa87

sasa87

    عضو نشط

  • الأعضــاء
  • 239 مشاركة

تاريخ المشاركة 06 April 2010 - 10:29 AM

Examples
Merging into a Table: Example The following example uses the bonuses table in the sample schema oe with a default bonus of 100. It then inserts into the bonuses table all employees who made sales, based on the sales_rep_id column of the oe.orders table. Finally, the human resources manager decides that employees with a salary of $8000 or less should receive a bonus. Those who have not made sales get a bonus of 1% of their salary. Those who already made sales get an increase in their bonus equal to 1% of their salary. The MERGE statement implements these changes in one step:

CREATE TABLE bonuses (employee_id NUMBER, bonus NUMBER DEFAULT 100);
INSERT INTO bonuses(employee_id)
(SELECT e.employee_id FROM employees e, orders o
WHERE e.employee_id = o.sales_rep_id
GROUP BY e.employee_id);
SELECT * FROM bonuses; EMPLOYEE_ID BONUS
----------- ----------
153 100
154 100
155 100
156 100
158 100
159 100
160 100
161 100
163 100
MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees WHERE department_id = 80) S ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*0.1)
WHERE (S.salary <= 8000);
EMPLOYEE_ID BONUS
----------- ----------
153 180
154 175
155 170
159 180
160 175
161 170
179 620
173 610
165 680
166 640
164 720
172 730
167 620
171 740

بكل بساطه merge تستخدم لعمل translate من جدول لاخر ولكنها قبل عمل النقل للبيانات تتاكد اذاكانت نفس البيانات متاوجده في الجدول الجديد عندها تقوم بعمل update لها واذا كانت هذه البيانات غير موجوده تعمل لها insert

#3 Eng_AL_kamel

Eng_AL_kamel

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • الاسم الأول:Ibraheem
  • اسم العائلة:Qaed
  • البـلـد: Country Flag
  • المنصب الحالي:DBA

تاريخ المشاركة 07 April 2010 - 03:42 PM

بارك الله فيك
أخي
sasa87
وجزاك الجنة



#4 medo_2005

medo_2005

    عضو نشط

  • الأعضــاء
  • 354 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 14 April 2010 - 05:44 PM

شرح وتبسيط جميل من اخ فاضل
وفوق كل ذى علم عليم

#5 mohamedabdelghafar

mohamedabdelghafar

    عضو

  • الأعضــاء
  • 2 مشاركة

تاريخ المشاركة 03 May 2010 - 12:21 AM

ابسطك الله وجزاك كل خير