الانتقال إلى المحتوى

مطلوب مساعده فى لووووووووووب


محمد سعيد

Recommended Posts

السلام عليكم اخوانى الكرام وكل عام وانتم بخير
لدى تاسك اريد تنفيذه فى شكل لووب هو باختصار وببساطة شديدة انه لو فجدول ال emp مثلا عايز اعمل لووب بحيث يجبلى البيانات بس بين كل تاريخ مثلا عدد من الايام 1-2-3 وهكذا يتم ادخالها من باراميتر ارجو تكون واضحة يعنى المهم ان يجيب الداتا على حسب عدد الايام بين التواريخ يعنى لو عدد الايام 2 يكون اول تاريخ اقل من الذى بعده بيومين وهكذا

رابط هذا التعليق
شارك

حسب ما فهمت من كلامك ممكن يكون الحل كالتالي:

SELECT EMPNO,ENAME FROMEMP WHERE NUMBER_OF_DAYS=TO_NUMBER(SYSDATE - :BLK_NUMBER_OF_DAYS);



حيث:

:BLK.NUMBER_OF_DAYS هو الايتم اللي رح تدخل فيه عدد الايام..

رابط هذا التعليق
شارك

الأخ الفاضل يبدو ان الصورة مش واضحة لديك شوف ياسيدى الموضوع باختصار هو تاسك لمواعيد عيادة طبيب حيث ان المريض يقوم بحجز اكثر من موعد والمطلوب هو تحديد عدد ايام بين المواعيد يعنى مثلا بين كل موعد وموعد 3 ايام او على حسب البراميتر الصورة وضحت؟

رابط هذا التعليق
شارك

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


Declare
 ID_Date	  Date;	 -- أول يوم زيارة --
 ID_VisitDays Number;   -- عدد أيام الزيارات --
 ID_RestDays  Number;   -- عدد أيام الراحة --
 ID_Loop	  Number;   -- جملة التكرار --
Begin
 -- مدخلات القطعة البرمجية --
 ID_Date	  := SysDate();
 ID_VisitDays := 5;
 ID_RestDays  := 3;
 ---------------------------------------
 -- سرد كافة التواريخ الخاصة بزيارات المريض بالعيادة ، بدئاً من أول تاريخ زيارة --
 ID_Loop := 0;
 For ID_Loop In 0 .. ID_VisitDays - 1
 Loop
DBMS_OutPut.Put_Line(ID_Date + (ID_Loop * ID_RestDays));
 End Loop;
 ---------------------------------------
 -- ملحوظة ، هذا مثال بسيط جداً ولكنة يعتبر البداية --
 -- بالتوفيق --
End;
/





بالتوفيق للجميع

رابط هذا التعليق
شارك

الأخ الفاضل جزاك الله خير على الرد لكن الكود مش واضح ياريت تعمل مثال على جدول الموظفين مثلا باعتباره جدول المواعيد المتاحة

رابط هذا التعليق
شارك

الأخ الكريم ، دة مجرد مثال بيطبع لك مواعيد زيارات المريض علي شاشة الأ SQL*Plus فقط لا غير ، وحسب مدخلات محددة ، والمدخلات هي كالتالي :

1- المتغير (ID_Date) ، هو متغير تاريخ بداية أول زيارة.
2- المتغير (ID_VisitDays) ، هو متغير رقمي ، يمثل عدد أيام الزيارات ، يعني مثلاً الطبيب حدد للمريض أن عدد أيام الزيارات هي 5 مرات.
3- المتغير (ID_RestDays) ، هو متغير رقمي ، يمثل عدد الأيام الفارق أو الراحة ، ودة طبعاً لأن الزيارات ليس من الشرط أن تكون يومية ، ولكن من الممكن أن يكون للمريض زيارة كل مثلاً 3 أيام

بالطبع من الممكن أن يختلف مريض عن مريض ، فبالنسبة للثلاثة متغيرات هذه فهي التي تمثل تلك التغير ، وهذا مجرد مثال لطباعة كافة تواريخ زيارات المريض علي شاشة الـ SQL*Plus فقط لا غير !!!

ولكن من الممكن عمل شيء آخر ، وهو عمل Function يقوم بإرتجاع Table يمثل كافة التواريخ وإستخدامها داخل التطبيق الخاص بنا !!!

أو من الممكن عمل جدول Temp يحتوي علي كافة هذه التواريخ كما يلي :

Create Table TempAllDate
(
 AllDate_Date   Date
)
/



ثم بعد ذلك يتم تحويل الكود السابق الي إجراء Procedur كما يلي :

Create Or Replace Procedure GetAllDate(In_Date  Date, In_VisitDays Number, In_RestDays Number)
 ID_Loop	  Number;   -- جملة التكرار --
Begin
 Delete From TempAllDate;
 ID_Loop := 0;
 For ID_Loop In 0 .. ID_VisitDays - 1
 Loop
Insert Into TempAllDate Values(In_Date + (ID_Loop * In_RestDays));
 End Loop;
 Commit;
End;
/



وبعد ذلك يتم إستدعاء الجدول كما يلي :

Select * From TempAllDate;




أما بخصوص عمل Function Table أبحث بالمنتدي فستجد العديد من الأمثلة !!!



ملحوظة ، أنا لم أنفذ هذه الأكواد نظراً لأن حاسبي الشخصي لا يحتوي علي أوراكل .... شكراً




بالتوفيق للجميع
رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

وده اسكربت الجدول المسجل فيه المواعيد المتاحة
CREATE TABLE VALID_APPOINTMENTS --- جدول المواعيد المتاحة---
(
APPT_TIME VARCHAR2(8 BYTE),---وقت الموعد--
T_APPT_TIME NUMBER(9),
TIME_FLAG NUMBER, --فلاج الوقت ص او م---
APPT_DATE_H VARCHAR2(4000 BYTE),
APPT_DATE_G VARCHAR2(10 BYTE), --تاريخ الموعد ميلادى---
DAY_ARB VARCHAR2(15 BYTE),
DAY_ENG VARCHAR2(15 BYTE),
CLINIC_ARB VARCHAR2(40 BYTE),
CLINIC_ENG VARCHAR2(40 BYTE),
CLINIC_CODE VARCHAR2(5 BYTE),
ROOM_NO VARCHAR2(10 BYTE),
RULE_NO NUMBER(9),
T_CLINIC_DOC_CODE VARCHAR2(20 BYTE),
T_SCHEDULE_RULE_NO NUMBER(9)
)

رابط هذا التعليق
شارك

السلام عليكم
كيف حالك أخي محمد
اعتقد ان الفكرة أصبحت واضحة كدا
لكن ياريت توضح الاسكربت الجدول أكثر
كيف يتم معرفة الموعد مشغول أم لا أقصد مثلا لو سجل مريض موعد الساعة 6 هل ينفع مريض يسجل موعد اخر بعد 6 مثلا 6:01 أقصد ما رأيك لو تزود عمود مثلا بداية الموعد وعمود نهاية الموعد ولو قمت بعمل ذلك لابد من عمل تاريخ لبداية الموعد وتاريخ لنهاية الموعد ربما يسجل مريض قبل الساعة 12 ليلا وبكده يدخل في يوم تاني

لو امكن تعطي لنا أمثلة وخصوصا في حالة ان الموعد الثاني كان هذا اليوم مشغول "أقصد في الحالات الشاذة "
موفق

رابط هذا التعليق
شارك

الأخ الفاضل مصطفى جميل هذا الجدول اصلا هو فيو مسجل به كل المواعيد المتاحة يعنى كل المواعيد المسجلة به هى مواعيد متاحة
ثانيا بالنسبة لبداية ونهاية الموعد فهذا محلول حيث ان هناك سكيجوال يقوم بعمل ذلك حيث ان مثلا المدة بين كل موعد والاخر 20 دقيقة فتجد ان الموعد الاول مثلا يبدأ من الساعة 9 والثانى يكون الساعة 9 و20 دقيقة وهكذا
ارجو يكون واضح

رابط هذا التعليق
شارك

لا اله الا الله 220 قراءة ومفيش حل عند حد ايه الحكاية المنتدى ايه اللى جراله فين راحت العقول الحلوة فى المنتدى

رابط هذا التعليق
شارك

الأخوة الكرام ، أعتزر بشدة علي الكود الغير صحيح ، حيث لم أجرب الكود سوي اليوم علي جهاز أحد أصدقائي


علي كل حال الكود بسيط جداً

أفترضت أن هناك جدول يدعي Pats أي المرضي ، وبعد كدة سجلت شوية سجلات خاصة لمجموعة مرضي ، ومن ثم صممت Function يرتجع ليا جدول Table يحتوي بقائمة التواريخ المطلوبة

ولكن بالطبع هذا ليس صحيح ، لأن تواريخ الزيارات بتتحدد حسب الحالة المرضية وحسب رغبة الطبيب ، بمعني أدق أن المفروض يكون لكل زيارة حقل آخر يدعي "التاريخ التالي للزيارة" ، بحيث أن هذا التاريخ يتم تحديد الزيارة التالية لمراجعة المريض ، سواء أستشارة فقط أو غيرها


علي كل حال الكود تم إرفاقة مرة أخري ، لأن الكود السابق غير سليم




بالتوفيق للجميع

SQL.zip

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

الأخ الكريم ، تحية طيبة وبعد ،

أنت دلوقتي عندك جدول للمرضي Pats ، الجدول دة بيحتوي علي معلومات كافة المرضي ، ويحتوي علي الحقول التالية :

Create Table Pats
(
 Pats_No	 Number,				 --الرقم
 Pats_Name VarChar2(50),		 --الإسم
 Pats_Sex	Number(1),			--النوع
 Pats_BDate Date,				   --تاريخ الميلاد
 Constraint PK_Pats Primary Key(Pats_No),
 Constraint UQ_Pats_Name Unique(Pats_Name)
)
/
--مع العلم أن هذه البيانات ليست البيانات الكلية للمريض ، ولكنة مجرد مثال--



وعندك جدول تاني للزيارات ، كما يلي :

Create Table Visits
(
 Visits_No  Number,
 Visits_PatsNo  Number,  --FK from pats table.
 Visits_Date	Date,	  --تاريخ الزيارة
 Visits_Comment  VarChar2(500),
 Constraint PK_Visits Primary Key(Visits_No),
 Constraint FK_Visits_Pats Foreign Key(Visits_PatsNo) References Pats(Pats_No)
			 On Delete Cascade
)
/
--ملحوظة: هذه ليست كافة حقول جدول الزيارات--



المطلوب كالتالي :
1- البحث عن مريض محدد.
2- إدراج عدد من السجلات في جدول الزيارات حسب طلب الطبيب ، بحيث لو مثلاً عدد الزيارات 5 أيام ، يبقي يتم إدراج 5 سجلات في جدول الزيارات
3- هناك فترة من الأيام بين كل زيارة وزيارة ، يعني مثلاً لو الفترة دي 3 أيام يبقي بين كل زيارة وزيارة 3 أيام
4- إضافة الساعة أو الوقت الذي سيتم مقابلة المريض علي أساسها ، ولو هذا الوقت مشغول يتم ترحيل المريض ليوم آخر !!!

هو المفروض ميتمش ترحيل الي يوم آخر ، ولكن يتم أيجاد موعد فارغ في نفس اليوم أولاً (في فترة العمل الزمنية) ، ولو لم يتم إيجاد فترة زمنية مناسبة للمريض يتم ترحيلة لليوم التالي.


الأخ الكريم ، الموضوع مفهوم ، بس دة لوحدة محتاج وقت كبير جداً ، والمثال الموضح أعلاة هو أبسط مثال لذلك !!!

ممكن تحول الـ Function الي Procedure أو قطعة برمجية عادية ، وفي الـ Form تضيف الأدوات المناسبة (تاريخ ووقت أول زيارة - عدد أيام الزيارات - عدد أيام الراحة أو الفارق بين كل زيارة وزيارة) ، بعد كدة تضيف زر أمر Button وتعمل القطة البرمجية الموجودة بالمشاركة السابقة وبدلاً من إرتجاع Function ، يتم جلب التاريخ وإدراج سجل للمريض كزيارة حسب هذا التاريخ (وقبل كل هذا تصنع إختبار علي هذا التاريخ حتي لا يتطابق مع تاريخ وموعد مريض آخر)


عفواً الموضوع هيحتاج وقت ، وأتركني فترة لعل وعسي أقدر علي صناعتة سواء بالـ PL أو بالـ Forms !!!!

أو يجوز أحد الأصدقاء لدية فكرة أفضل أو يصنع الفكرة أسرع مني



ربنا يسهل ، بس من ناحيتك يجب المغامرة والتفكير في الموضوع


في رعاية الله وحفظة

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

رابط هذا التعليق
شارك

طيب بص بقي ، أنا عدلت لك علي المثال لكن للأسف موضوع ترحيل المواعيد لم أصنعه ، ولكن أعتقد هذه المرة الفكرة واضحة ومن الممكن أن تعدل علي الكود كما تشاء



بالتوفيق

SQL.zip

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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