السلام عليكم
Multitable INSERT Statements
ما هو Multitable INSERT Statements ؟
هو يمكنك من ادخال عده قيم فى اكتر من جدول فى وقت واحد
هو مناسب جدا لـ انظمه المستودعات -warehousind- حيث يمكنك من نقل البيانات الناتجه عن اكثر من عمليه لوضعها فى جدول معين.
وهو اداه سريعه جدا مقارنه بـ استخدام جمل Single DML اوجمل IF فى عمليات INSERT
توجد عده انواع لـ Multitable INSERT Statements
Unconditional INSERT
Conditional ALL INSERT
Conditional FIRST INSERT
Pivoting INSERT
General Code
INSERT [ALL] [conditional_insert_clause] [insert_into_clause value_clause] (subquery)# conditional_insert_clause
[ALL] [FIRST] [WHEN conditional THEN] [insert_into_clause values_clause] [ELSE] [insert_into_clause values_clause]
Unconditional INSERT ALL
هى خاصيه تمكنك من ادخال عده قيم فى اكثر من جدول فى نفس الوقت بدون اى شروط..فى المثال التالى اريد ان اضيف بعض الصفوف فى جدولين (SAL_HISTORY and MGR_HISTORY) وستتم اضافه القيم بأستخدام الـ subquery
صوره رقم(1)
Code
INSERT ALL INTO SAL_HISTORY VALUES (EMPID,HIREDATE,SAL) INTO MGR_HISTORY VALUES (EMPID,MGR,SAL) SELECT EMPLOYEE_ID EMPID ,HIRE_DATE HIREDATE ,SALARY SAL ,MANAGER_ID MGR FROM EMPLOYEES WHERE EMPLOYEE_ID > 200;
Conditional INSERT ALL
هى خاصيه تمكنك من اضافه عده اعمده فى عده جدوال فى نفس الوقت بناء على شرط معين .
مثال توضيحى :
فى المثالى التالى قمت بأستعلام عن مجموعه اعمده من جدول EMPLOYEES فى حاله كان الراتب اكبر من 10000 اذن ادخل القيم فى جدول SAL_HISTORY .-الحاله الأولى-
فى حاله كان رقم مدير القسم اكبر من 200 اذن ادخل القيم فى جدول MGR_HISTORY.-الحاله الثانيه-
والحالتين غير مرتبطين ببعض . الـ Conditional INSERT هو اشبه بـ IF Statements فى حاله كذا افعل كذا وفى حاله كذا افعل كذا مع العلم ان Conditional INSERT اداءاه فى عمليات الـ INSERT اسرع بكثير من استخدام جمل IF.
صوره رقم(2)
Code
INSERT ALL WHEN SAL > 10000 THEN INTO SAL_HISTORY VALUES (EMPID,HIREDATE,SAL) WHEN MGR > 200 THEN INTO MGR_HISTORY VALUES (EMPID,MGR,SAL) SELECT EMPLOYEE_ID EMPID ,HIRE_DATE HIREDATE ,MANAGER_ID MGR ,SALARY SAL FROM EMPLOYEES WHERE EMPLOYEE_ID > 200;
Conditional INSERT FIRST
تمكنك هذه الـ function من ادخال عده قيم فى عده جداول فى نفس الوقت بناء على شرط معين... ولكن فى حاله تحقق الشرط فى الحاله الاولى لا يتم التحقق من باقى الحالات واذا كانت الحاله الاولى غير مطابقه للشرط فيتم التحقق من الحاله الثانيه واذا اوفت الشروط يتم تحقيقها ولا يتم التحقق من الحاله الثالثه وهكذا.
ومن خلال المثال التالى ان شاء الله سيتضح الأمر اكثر
فى المثال التالى اريد ان استعلم عن مجموعه اعمده فى جدول الـ employees فى حاله كان مجموع الراتب-(SUM(salary- اكبر من 25,000 فى هذه الحاله اضف هذه القيم فى جدول SPECIAL_SAL بأستخدام FIRST multitable INSERT وعند استخدامك لـ هذه الـ function فهى تقوم بتنفيذ الأمر كلتالى اذا تحقق الشرط قم بادخال القيم فى الجدول ولا تنظر الى باقى الشروط الموجوده فى حاله لم يتحقق الشرط فـ انظر لباقى الشروط الموجوده ومن يحقق الشرط منهم نفذ له ما يريد واذا كانو جميعهم لا يحققون الشرط فـ نفذ ما بعد ELSE.
صوره رقم(3)
Code
INSERT FIRST WHEN SAL > 25000 THEN INTO SPECIAL_SAL VALUES (DEPTID,SAL) WHEN HIREDATE LIKE ('%') THEN INTO HIREDATE_HISTORY_00 VALUES (DEPTID , HIREDATE) WHEN HIREDATE LIKE ('%99%') THEN INTO HIREDATE_HISTORY_99 VALUES (DEPTID , HIREDATE) ELSE INTO HIREDATE_HISTORY VALUES (DEPTID,HIREDATE) SELECT DEPARTMENT_ID DEPTID ,SUM(SALARY) SAL ,MAX(HIRE_DATE)HIREDATE FROM EMPLOYEES GROUP BY DEPARTMENT_ID;
Pivoting INSERT
هى function تمكنك من تحويل القيم الموجوده فى الأعمده الى الصفوف
هى function تمكنك من تحويل القيم الموجوده فى الأعمده الى الصفوف
دعونا نتطرق اكثر فى الشرح من خلال مثال ...
فى المثال التالى لدينا جدول بأسم sales_source_data
CREATE TABLE SALES_SOURCE_DATA ( EMPLOYEE_ID NUMBER(6) ,WEEK_ID NUMBER(2) ,SALES_MON NUMBER(8,2) ,SALES_TUE NUMBER(8,2) ,SALES_WED NUMBER(8,2) ,SALES_THU NUMBER(8,2) ,SALES_FRI NUMBER(8,2) ); table SALES_SOURCE_DATA created. INSERT INTO SALES_SOURCE_DATA (EMPLOYEE_ID,WEEK_ID,SALES_MON,SALES_TUE,SALES_WED,SALES_THU,SALES_FRI) VALUES (176,6,2000,3000,4000,5000,6000); COMMIT;
SELECT * FROM SALES_SOURCE_DATA;
EMPLOYEE_ID WEEK_ID SALES_MON SALES_TUE SALES_WED SALES_THU SALES_FRI ----------- ------- --------- --------- --------- --------- --------- 176 6 2000 3000 4000 5000 6000
عندى جدول أخر بأسم sales_info
CREATE TABLE SALES_INFO (EMPLOYEE_ID NUMBER(6) ,WEEK NUMBER(2) ,SALES NUMBER(8,2) ); table SALES_INFO created.
اريد بأستخدام Pivoting INSERT تحويل الأعمده الموجوده فى sales_source_data الى صفوف فى sales_info
INSERT ALL INTO sales_info VALUES (employee_id,week_id,sales_MON) INTO sales_info VALUES (employee_id,week_id,sales_TUE) INTO sales_info VALUES (employee_id,week_id,sales_WED) INTO sales_info VALUES (employee_id,week_id,sales_THU) INTO sales_info VALUES (employee_id,week_id, sales_FRI) SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE, SALES_WED, SALES_THU,SALES_FRI FROM sales_source_data; 5 rows inserted.
SELECT * FROM sales_info;
EMPLOYEE_ID WEEK SALES ----------- ---- -------- 176 6 2000 176 6 3000 176 6 4000 176 6 5000 176 6 6000
No comments:
Post a Comment