11-02-2016, 03:11 PM
السلام عليكم
أود أن أطرح فكرة يغفل عنها الكثيرين ممن يتعاملون مع قواعد البيانات (حصلت معي
) وخصوصا عند طباعة التقارير و إستخراجها .
ستساعدك هاته العملية في ربح الوقت و تبسيط عمليات SQL المعقدة
مثلا لديك أكثر من جدول و تود الحصول على بيانات من هاته الجداول ستظطر لعمل إستعلام يقوم بتحديد ما توده بالشروط التي وضعتها و إيجاد الحقول المشتركة بينهما جيد
نلاحظ في المثال التالي 14 جدول نود إستخراج منهم 18 حقل لطباعة تقارير عملاء من أجل متابعة عملية الإحصاء فقمنا بتحويل الquery إلى View من أجل الحصول على جدول إفتراضي جديد إسمه VW_My_Table_Name له كل ميزات الجدول الحقيقي مع أقل تعقيد وممكن لك معاملته كجدول أي بتحديد بيانات بشروط عن طريق الQuery أو عبر مكونات ربط دلفي مع قواعد البيانات
مزايا وإيجابيات إستعمال Views:
- تجنيب المستخدم العمل على منصة حقيقية --الأمن
- دمج أكثر من جدول في جدول واحد
- إخفاء/ إظهار الحقول التي تود
- منع العمل على الجدوال التي تكون عملياتية
- بساطة الاستعلام
- البساطة الهيكلية
- الاتساق
- سلامة البيانات
- منطق استقلال البيانات
وهناك مزايا أخرى و في نفس الوقت لا تخلو من عيوب: فهي حداول غير حقيقية إن حذف جدول بنيت عليه سقط معه الجدول الإفتراضي كذلك ممكن تأخذ مساحة على القرص الصلب....إلخ
أود أن أطرح فكرة يغفل عنها الكثيرين ممن يتعاملون مع قواعد البيانات (حصلت معي
) وخصوصا عند طباعة التقارير و إستخراجها .ستساعدك هاته العملية في ربح الوقت و تبسيط عمليات 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:
- تجنيب المستخدم العمل على منصة حقيقية --الأمن
- دمج أكثر من جدول في جدول واحد
- إخفاء/ إظهار الحقول التي تود
- منع العمل على الجدوال التي تكون عملياتية
- بساطة الاستعلام
- البساطة الهيكلية
- الاتساق
- سلامة البيانات
- منطق استقلال البيانات
وهناك مزايا أخرى و في نفس الوقت لا تخلو من عيوب: فهي حداول غير حقيقية إن حذف جدول بنيت عليه سقط معه الجدول الإفتراضي كذلك ممكن تأخذ مساحة على القرص الصلب....إلخ