delphi4arab منتديات دلفي للعرب
الجدول الإفتراضي - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6)
+--- قسم : دلفي و التعامل مع قواعد البيانات (https://delphi4arab.net/forum/forumdisplay.php?fid=23)
+--- الموضوع : الجدول الإفتراضي (/showthread.php?tid=7511)



الجدول الإفتراضي - لؤي - 11-02-2016

السلام عليكم
أود أن أطرح فكرة  يغفل عنها الكثيرين ممن يتعاملون مع قواعد البيانات (حصلت معي Shy  ) وخصوصا عند طباعة التقارير و إستخراجها .
ستساعدك هاته العملية في ربح الوقت و تبسيط عمليات SQL المعقدة
مثلا لديك أكثر من جدول و تود الحصول على بيانات من هاته الجداول ستظطر لعمل إستعلام يقوم بتحديد ما توده بالشروط التي وضعتها و إيجاد الحقول المشتركة بينهما جيد 
نلاحظ في المثال التالي 14 جدول نود إستخراج منهم 18 حقل لطباعة تقارير عملاء من أجل متابعة عملية الإحصاء فقمنا بتحويل الquery إلى View من أجل الحصول على جدول إفتراضي جديد إسمه  VW_My_Table_Name   له كل ميزات الجدول الحقيقي مع أقل تعقيد وممكن لك معاملته كجدول أي بتحديد بيانات بشروط عن طريق الQuery أو عبر مكونات ربط دلفي مع قواعد البيانات
PHP كود :
CREATE OR REPLACE FORCE VIEW VW_My_Table_Name
(
   AGENT_ID,
   AGENT_NAME,
   NAME,
   AGENT_SESSION_ID,
   LOGIN_TIME,
   LOGOUT_TIME,
   TIME_SEC,
   CAMPAIGN_NAME,
   JOB_ID,
   START_TIME,
   END_TIME,
   COMPLETION_CODE_ID,
   COMPLETION_NAME,
   CONTACT_COUNT,
   RPC,
   SUCCESS,
   CLOSURE,
   LOGIN_DATE
)
AS
     SELECT pas.agent_id,
            pas.agent_name,
            pz.name,
            pac.agent_session_id,
            CAST (pas.login_time AS DATE) AS LOGIN_TIME,
            CAST (pas.logout_time AS DATE) AS LOGOUT_TIME,
            TRUNC (
               (CAST (pas.logout_time AS DATE) - CAST (pas.login_time AS DATE))
               * 24
               
* 60
               
* 60,
               2)
               TIME_SEC,
            pc.name AS CAMPAIGN_NAME,
            pca.job_id,
            CAST (pj.start_time AS DATE) start_time,
            CAST (pj.end_time AS DATE) end_time,
            pcc.completion_code_id AS COMPLETION_CODE_ID,
            pcc.code AS COMPLETION_NAME,
            COUNT (pac.pim_agent_contact_id) AS CONTACT_COUNT,
            SUM (CASE WHEN pcc.rpc = 1 THEN 1 ELSE 0 END) AS RPC,
            SUM (CASE WHEN pcc.success = 1 THEN 1 ELSE 0 END) AS SUCCESS,
            SUM (CASE WHEN pcc.closure = 1 THEN 1 ELSE 0 END) AS CLOSURE,
            TRUNC (pas.login_time) LOGIN_DATE
       FROM pim_agent_contact pac
,
            pim_agent_session pas,
            pim_zone pz,
            pim_contact_attempts pca,
            pim_job pj,
            pim_campaign pc,
            pim_completion_code pcc
      WHERE     pac
.agent_session_id = pas.agent_session_id
            
AND pas.zone_id = pz.zone_id
            
AND pac.pim_session_id = pca.pim_session_id
            
AND pca.job_id = pj.job_id
            
AND pj.campaign_id = pc.campaign_id
            
AND pca.completion_code_id = pcc.completion_code_id
            
AND pac.event_type = 0
   GROUP BY pas
.agent_id,
            pas.agent_name,
            pz.name,
            pac.agent_session_id,
            pas.login_time,
            pas.logout_time,
            pc.name,
            pca.job_id,
            pj.start_time,
            pj.end_time,
            pcc.code,
            pcc.completion_code_id
   UNION ALL
     SELECT pas
.agent_id,
            pas.agent_name,
            pz.name,
            pach.agent_session_id,
            CAST (pas.login_time AS DATE) LOGIN_TIME,
            CAST (pas.logout_time AS DATE) LOGOUT_TIME,
            TRUNC (
               (CAST (pas.logout_time AS DATE) - CAST (pas.login_time AS DATE))
               * 24
               
* 60
               
* 60,
               2)
               TIME_SEC,
            pc.name AS CAMPAIGN_NAME,
            pcah.job_id,
            CAST (pj.start_time AS DATE) start_time,
            CAST (pj.end_time AS DATE) end_time,
            pcc.completion_code_id AS COMPLETION_CODE_ID,
            pcc.code AS COMPLETION_NAME,
            COUNT (pach.pim_agent_contact_id) AS CONTACT_COUNT,
            SUM (CASE WHEN pcc.rpc = 1 THEN 1 ELSE 0 END) AS RPC,
            SUM (CASE WHEN pcc.success = 1 THEN 1 ELSE 0 END) AS SUCCESS,
            SUM (CASE WHEN pcc.closure = 1 THEN 1 ELSE 0 END) AS CLOSURE,
            TRUNC (pas.login_time) LOGIN_DATE
       FROM pim_agent_contact_history pach
,
            pim_agent_session pas,
            pim_zone pz,
            pim_contact_attempts_history pcah,
            pim_job pj,
            pim_campaign pc,
            pim_completion_code pcc
      WHERE     pach
.agent_session_id = pas.agent_session_id
            
AND pas.zone_id = pz.zone_id
            
AND pach.pim_session_id = pcah.pim_session_id
            
AND pcah.job_id = pj.job_id
            
AND pj.campaign_id = pc.campaign_id
            
AND pcah.completion_code_id = pcc.completion_code_id
            
AND pach.event_type = 0
   GROUP BY pas
.agent_id,
            pas.agent_name,
            pz.name,
            pach.agent_session_id,
            pas.login_time,
            pas.logout_time,
            pc.name,
            pcah.job_id,
            pj.start_time,
            pj.end_time,
            pcc.code,
            pcc.completion_code_id
   ORDER BY 1
, 5 DESC; 

مزايا وإيجابيات إستعمال Views:

- تجنيب المستخدم العمل على منصة حقيقية --الأمن
- دمج أكثر من جدول في جدول واحد
- إخفاء/ إظهار الحقول التي تود
- منع العمل على الجدوال التي تكون عملياتية
- بساطة الاستعلام
- البساطة الهيكلية
- الاتساق
- سلامة البيانات
- منطق استقلال البيانات
وهناك مزايا أخرى و في نفس الوقت لا تخلو من عيوب: فهي حداول غير حقيقية إن حذف جدول بنيت عليه سقط معه الجدول الإفتراضي  كذلك ممكن تأخذ مساحة على القرص الصلب....إلخ


RE: الجدول الإفتراضي - S.FATEH - 11-02-2016

بارك الله فيك فقط الجداول view هي جداول للعرض او الطباعة لا يمكن القيام بعملية الاضافة الحذف او التعديل


RE: الجدول الإفتراضي - لؤي - 11-02-2016

(11-02-2016, 07:28 PM)S.FATEH كتب : بارك الله فيك فقط الجداول  view هي جداول للعرض او الطباعة لا يمكن القيام بعملية الاضافة الحذف او التعديل
شكرا أخي   S.FATEH هذا صحيح و مرحبا بكل إضافة



RE: الجدول الإفتراضي - bouh25 - 08-03-2016

اخي الكريم ممكن تضع مثال للتوضيح


RE: الجدول الإفتراضي - لؤي - 08-03-2016

هل تتعامل مع قواعد البيانات ؟