السلام عليكم
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);
تحدد من خلالها الجدول المراد عمل عليه تعديل او حذف او اضافه
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