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

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

صورة
- - - - -

Merge


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

#1 mido_develper

mido_develper

    عضو نشط

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

تاريخ المشاركة 02 March 2009 - 03:40 AM

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

من فضلكم كنت عاوز شرح ل Merge

من خلال المثال التالي


CREATE TABLE emp_copy_2 AS SELECT * FROM employees WHERE 1=2
;

CREATE OR REPLACE PROCEDURE  pf_04_04 
IS
v_empno EMPLOYEES.EMPLOYEE_ID%TYPE := 100;
BEGIN MERGE INTO emp_copy_2 c
USING employees e ON (c.employee_id = v_empno)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
c.phone_number = e.phone_number,
c.hire_date = e.hire_date,
c.job_id = e.job_id,
c.salary = e.salary,
c.commission_pct = e.commission_pct,
c.manager_id = e.manager_id,
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT (employee_id,first_name,last_name,email,
phone_number,hire_date,job_id,salary,
commission_pct,manager_id,department_iD)
VALUES (e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id);
END pf_04_04;
/





وجزاكم الله كل خير
=====================================

لا اله الا الله

#2 TROYMAN

TROYMAN

    مشترك

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

تاريخ المشاركة 02 March 2009 - 03:45 PM

السلام عليكم...
أنا حأشرلك على مثالي أول :

Merge into DestinationTable using SourceTable on (join condition) when matched then
update set
col1=col_val1,
col2=col_val2,
when not matched then
insert (column_list)
values(column_values);


تقوم تعليمة الميرج بالمقارنة بين جدولين . جدول المصدر و جدول الهدف عن طريق شرط يربط بينهما (حقل مشترك)
عند تنفيذ التعليمة يقوم بجلب أول سجل من الجدول المصدر و يبحث عنه في الجدول الهدف حسب الشرط
و هنا يوجد حالتين:
الأولى إذا وجد السجل (رقم الموظف مثلاً) يقوم بتعديل بيانته بالجدول الهدف
الثانية إذا لم يجده يقوم بإقحام سجل جديد في الجدول الهدف حسب المعلومات من الجدول المصدر

أما في مثالك:
يقوم بالبحث عن الموظف ذو الرقم 100 في الجدول الهدف إذا لم يجده يقوم بإقحامه و إقحام كل سجلات الجدول المصدر سواء وجدها أم لم يجدها
أما إذا وجده يقوم بتعديل بياناته و إقحام السجلات الباقية مرة أخرى.
وطبعاً هذا الحل غير منطقي ..
ما بعرف شو الهدف من هل مثال...

إن شاء الله تكون وصلتك الفكرة...سلام


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#3 TROYMAN

TROYMAN

    مشترك

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

تاريخ المشاركة 02 March 2009 - 05:53 PM

هذا مثال إذا بدك تطبق عملية الميرج على سجلات محددة فقط مثلاً موظفي القسم 20 كالتالي:

merge into emp1 using(select * from emp where deptno=20)e on (e.empno=emp1.empno)
when matched then
update set emp1.deptno=e.deptno,emp1.ename=e.ename
when not matched then
insert (empno,deptno,ename)
values (e.empno,e.deptno,e.ename)
/


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#4 جلال شواقفه

جلال شواقفه

    عضو مميز

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

تاريخ المشاركة 05 March 2009 - 12:01 AM

شكرا ... على الموضوع
ارجو من يستفيد من مشاركاتي الدعاء لوالدي ولاموات المسلمين بالمغفره والرحمه......

جلال محمود شواقفه
مدير دائرة الحاسوب
بلدية المفرق الكبرى
المملكه الاردنيه الهاشميه.

#5 Ahmad.Hasan

Ahmad.Hasan

    مشرف قسم الـ Forms & Reports والمشاريع

  • فريق الإشراف
  • 4,871 مشاركة
  • الاسم الأول:Ahmad
  • اسم العائلة:Hasan
  • البـلـد: Country Flag
  • المنصب الحالي:Oracle HCM Consultant

تاريخ المشاركة 05 March 2009 - 12:16 AM

السلام عليكم
اخي ممكن تحكيلي شو الهدف من عملية MERGE ومتى بنستخدمها ؟

.Oracle E-Business Suite R12 HCM Certified Implementation Specialist

 

.Oracle Fusion Human Capital Management 11g Human Resources Certified Implementation Specialist

 


#6 TROYMAN

TROYMAN

    مشترك

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

تاريخ المشاركة 05 March 2009 - 12:25 PM

السلام عليكم...
إن الهدف من عملية الميرج تتلخص بالتالي:
إذا فرضنا وجود جدولين متطابقين من حيث البنية و لكن يوجد اختلاف بالبيانات.قد تختلف السجلات بعددها و قد تختلف بياناتها..
إذا أردت حصول تطابق بين الجدولين من حيث البيانات يتطلب ذلك جهداً كبيراً و يمكن أن يحل بطريقة برمجية و لكن معقدة قليلاً لذلك وجدت تعليمة الميرج.
تكافئ عملية الميرج (Update+Insert)
عند تنفيذ التعليمة يتم المقارنة بين سجلات الجدول الأول مع الجدول الثاني عن طريق حقل مشترك أو علاقة محددة..
فإذا وجد السجل يقوم بعملية (Update) لهذا السجل و مطابقة بياناته مع الجدول الأصلي و إذا لم يجده يقوم بعملية (Insert) لهذا السجل وبهذه الطريقة تتم المطابقة بين بقية السجلات...


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#7 mido_develper

mido_develper

    عضو نشط

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

تاريخ المشاركة 06 March 2009 - 09:13 PM

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

جزاكم الله كل خير اخوانى الكرام علي الرد والتفاعل السريع

انا لما نفذت الكود ده
CREATE OR REPLACE PROCEDURE pf_04_04
IS
v_empno EMPLOYEES.EMPLOYEE_ID%TYPE := 100;
BEGIN MERGE INTO emp_copy_2 c
USING employees e ON (c.employee_id = v_empno)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
c.phone_number = e.phone_number,
c.hire_date = e.hire_date,
c.job_id = e.job_id,
c.salary = e.salary,
c.commission_pct = e.commission_pct,
c.manager_id = e.manager_id,
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT (employee_id,first_name,last_name,email,
phone_number,hire_date,job_id,salary,
commission_pct,manager_id,department_iD)
VALUES (e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id);
END pf_04_04;
/



وبعدين استدعيت البيانات في الجدول emp_copy_2
باستخدام الامر التالي

SELECT * FROM emp_copy_2;


فطلعتلي رسالة بتقول

no rows selected



فلماذا لم يظهر الصف الذي تم عمل تعديل عليه من خلال merge

وجزاكم الله كل خير


-----------------------------------------------------------------------------------------------------------------

الهم استخدمنا ولا تستبدلنا وقنا عذاب النار