بتاريخ: 2 مارس 200916 سنة comment_150254 السلام عليكم ورحمة الله وبركاته===================من فضلكم كنت عاوز شرح ل 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 مارس 200916 سنة comment_150284 السلام عليكم...أنا حأشرلك على مثالي أول : 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 في الجدول الهدف إذا لم يجده يقوم بإقحامه و إقحام كل سجلات الجدول المصدر سواء وجدها أم لم يجدهاأما إذا وجده يقوم بتعديل بياناته و إقحام السجلات الباقية مرة أخرى.وطبعاً هذا الحل غير منطقي ..ما بعرف شو الهدف من هل مثال...إن شاء الله تكون وصلتك الفكرة...سلام تقديم بلاغ
بتاريخ: 2 مارس 200916 سنة comment_150286 هذا مثال إذا بدك تطبق عملية الميرج على سجلات محددة فقط مثلاً موظفي القسم 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) / تقديم بلاغ
بتاريخ: 4 مارس 200916 سنة comment_150452 السلام عليكماخي ممكن تحكيلي شو الهدف من عملية MERGE ومتى بنستخدمها ؟ تقديم بلاغ
بتاريخ: 5 مارس 200916 سنة comment_150503 السلام عليكم...إن الهدف من عملية الميرج تتلخص بالتالي:إذا فرضنا وجود جدولين متطابقين من حيث البنية و لكن يوجد اختلاف بالبيانات.قد تختلف السجلات بعددها و قد تختلف بياناتها..إذا أردت حصول تطابق بين الجدولين من حيث البيانات يتطلب ذلك جهداً كبيراً و يمكن أن يحل بطريقة برمجية و لكن معقدة قليلاً لذلك وجدت تعليمة الميرج.تكافئ عملية الميرج (Update+Insert) عند تنفيذ التعليمة يتم المقارنة بين سجلات الجدول الأول مع الجدول الثاني عن طريق حقل مشترك أو علاقة محددة..فإذا وجد السجل يقوم بعملية (Update) لهذا السجل و مطابقة بياناته مع الجدول الأصلي و إذا لم يجده يقوم بعملية (Insert) لهذا السجل وبهذه الطريقة تتم المطابقة بين بقية السجلات... تقديم بلاغ
بتاريخ: 6 مارس 200916 سنة كاتب الموضوع comment_150581 السلام عليكم ورحمة الله وبركاته==================جزاكم الله كل خير اخوانى الكرام علي الرد والتفاعل السريعانا لما نفذت الكود ده 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وجزاكم الله كل خير-----------------------------------------------------------------------------------------------------------------الهم استخدمنا ولا تستبدلنا وقنا عذاب النار تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.