2/18/2013

The MERGE Statement

السلام عليكم
The MERGE Statement

تمكنك جمله MERGE من عمل INSERT , UPDATE and DELETE  فى جدول معين بناء على شرط معين ولكى تتمكن من عمل اضافه او تعديل او حذف على جدول معين يجب ان تمتلك هذه الصلاحيات على هذا الجدول ويجب ان تمتلك صلاحيه SELECT من الجدول المراد الاستعلام عنه لـ اضافه ما تم الاستعلام عنه فى جدول المراد التعديل او الاضافه او الحذف عليه بناء عليه فـ انت لديك جدولين جدول -source- وهذا الجدول سيتم منه الاستعلام وجدول اخر -target- وهذا ما سيتم التعديل عليه.
الكود العام لـ MERGE
General Code
MERGE INTO table_name table_alias
USING (table|view|sub_query) alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET
col1 = col_val1,
col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list)
VALUES (column_values);



صوره رقم (1)


taerget-INTO clause-
تحدد من خلالها الجدول المراد عمل عليه تعديل او حذف او اضافه
source-USING clause-
تحدد من خلالها الجدول الذى سيتم الاستعلام من خلاله وممكن ان يكون الاستعلام من view,subquery and table
ON clause
وهنا تحدد الشرط
WHEN MATCHED ,WHEN NOT MATCHED
وهنا تحدد بناء على حاله التطابق افعل كذا وفى حاله عدم التطابق افعل كذا 

مثال توضيحى :
فى المثال التالى لدى جدولين جدول EMPPLOYEES و جدول EMP2

CREATE TABLE "HR"."EMPLOYEES"
  (
    "EMPLOYEE_ID"    NUMBER(6,0),
    "FIRST_NAME"     VARCHAR2(20 BYTE),
    "LAST_NAME"      VARCHAR2(25 BYTE) ,
    "EMAIL"          VARCHAR2(25 BYTE) ,
    "PHONE_NUMBER"   VARCHAR2(20 BYTE),
    "HIRE_DATE"      DATE ,
    "JOB_ID"         VARCHAR2(10 BYTE) ,
    "SALARY"         NUMBER(8,2),
    "COMMISSION_PCT" NUMBER(2,2),
    "MANAGER_ID"     NUMBER(6,0),
    "DEPARTMENT_ID"  NUMBER(4,0)
  );
CREATE TABLE "HR"."EMP2"
  (
    "EMPLOYEE_ID"    NUMBER(6,0),
    "FIRST_NAME"     VARCHAR2(20 BYTE),
    "LAST_NAME"      VARCHAR2(25 BYTE) ,
    "EMAIL"          VARCHAR2(25 BYTE) ,
    "PHONE_NUMBER"   VARCHAR2(20 BYTE),
    "HIRE_DATE"      DATE ,
    "JOB_ID"         VARCHAR2(10 BYTE) ,
    "SALARY"         NUMBER(8,2),
    "COMMISSION_PCT" NUMBER(2,2),
    "MANAGER_ID"     NUMBER(6,0),
    "DEPARTMENT_ID"  NUMBER(4,0)
  );

اريد بأستخدام جمله MERGE عمل تحديث لجدول EMP2 فى حاله تشابه القيم وعمل INSERT فى حاله ان القيم غيرمتشابهه


صوره رقم (2)




صوره رقم (3)




MERGE INTO empl3 c
USING employees e
ON (c.employee_id = e.employee_id)
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 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);
107 rows merged.

ناتج المثال السابق انه قام بأضافه 107 صف فى جدول EMP2 وذلك لان جدول EMP2 فارغ فـ بناء عليه لم يستطع تنفيذ امر التحديث فى حاله التطابق فقام بتفيذ امر فى حاله عدم التطابق


مصدر الصور

No comments:

Post a Comment