الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Merge

Featured Replies

بتاريخ:

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

من فضلكم كنت عاوز شرح ل 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;
/






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

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

بتاريخ:

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

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 في الجدول الهدف إذا لم يجده يقوم بإقحامه و إقحام كل سجلات الجدول المصدر سواء وجدها أم لم يجدها
أما إذا وجده يقوم بتعديل بياناته و إقحام السجلات الباقية مرة أخرى.
وطبعاً هذا الحل غير منطقي ..
ما بعرف شو الهدف من هل مثال...

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

بتاريخ:

هذا مثال إذا بدك تطبق عملية الميرج على سجلات محددة فقط مثلاً موظفي القسم 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)
/

بتاريخ:

شكرا ... على الموضوع

بتاريخ:

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

بتاريخ:
  • كاتب الموضوع

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

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

انا لما نفذت الكود ده

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

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


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

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

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.