الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال مش صعب

مغلق
بدأه dream_land_78 في 12 ديسمبر 2002 · 8 رد · 1,012 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا

معلش وين الغلط فيما يلي :

declare

d date ;

cursor c(d1 date) is select h_no from emp_holiday where d1 >= h_from and d1 :Dd,'dd-mm-yyyy') ; --dd is a text to get the date

open c(d) ;

loop

fetch c into cc ;

exit when c%notfound ;

message(cc.h_no);

message(' ');

end loop ;

close c;

end;

هلوقت انا عندي جدول يخزن فيه ال

h_no

h_from -- date

h_to -- date

اود الحصول على كل السجلات التي فيها التاريخ المدخل موجود في مجال الحقول

h_from , h_to

بالرغم من اني ادخل بيانات صحيحة و تاريخ موجود في مجالها الا انة لا يعطيني اي سجل

فهل هناك اي خطأفيما سبق

مع العلم اني حاولت استخدام العامل between

بس ما زبط

و شكرا

#2

اخوي الى الان خبرتي ما وصلت الى خبرتك في oracle

بس احاول اني ادلي بدلوي وإن شاء الله انه صحيح

اعتقد الفواصل في الاخير والا انا غلطان

لني حسب مادرست ان الفاصلة ; تعتبر نهاية جملة

اما اذا اردت ادخال عدة جمل عن طريق الفاصلة ,

هذا ما اعتقدة

واعذرني ان كانت اخابتي خطاء

#3

السلام عليكم

وكل عام وانتم بخير والامة بالف خير

سلامى الى جميع الزملاء وأخص السنى وعمر و oracle

على ما اعتقد اخى العزيز لو حاولت ان تجعل ال Cursor like that

add to_date function to every date

like

from emp_holiday where to_date('dd/mm/yyyy',d1) >=to_date('dd/mm/yyyy', h_from

ارجو ان يساعد ذلك وننتظر ردك اخى

#4

السلام عليكم اخي dream

معلهش اخي انا مش فاهم قوي مسار المشكلة يعني لو ممكن تشرح لنا اولا ال tables الموجودة عندك و ايه المطلبات اللي انت تريد اخراجها من الجدول و كذلك ايه الخطأ اللي بيظهر لك بالظبط لانه يجوز فيه طريقة تانية ممكن نفيدك بها في الاستخراج للبيانات التي تريدها

#5

شكرا لجميع الاخوة اللي ردو

المشكلة انو ما بيعطيني خطأ معين .. لكن كمان ما بيعطيني نتائج

بالرغم من انه يوجد بيانات بالجدول تحقق شروط الجملة في ال cursor

و الذي اريده من الجملة ان على فرض ان h_no هو رقم الاجازة للموظف

و h_from هي تاريخ بدايتها و h_to تاريخ نهايتها

فاذا أدخلت تاريخ معين لموظف معين .. اريد ان اعرف هل هذا الموظف كان في اجازة في هذا التاريخ ام لا

اي بالمقارنة مع جدول الحضور و الانصراف اذا كان هذا المزظف من ضمن الغياب احاول البحث في جدول الاجازات عن نوع الاجاازة (رقمها) الذي قام بها الموظف في هذا التاريخ و طبعا بمقارنة هذا التاريخ مع تاريخ بداية الاجازات و نهايتها لهذا الموظف

فاذا وجد هذا التاريخ في المجال فهذا يعني انه اخذ اجازة في التاريخ المحدد و احصل على نوع هذه الاجازة سواء سنوية او طارئة او .. او ... الخ

ارجو ان اكون قد اوصلت الفكرة و شكرا

#6

معلش كمان سؤال .. انا شكل الجدول كالتالي و اذا كتبت التالي ..

SQL> select * from emp_holiday ;

EMP_NO H_NO H_FROM H_TO

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

2 2 10-MAY-02 20-JUN-02

2 1 02-JUN-00 10-JUN-00

2 1 01-JAN-00 01-FEB-00

6 1 02-FEB-00 20-FEB-00

7 2 06-OCT-02 07-OCT-02

9 3 14-MAY-02 19-MAY-02

7 1 20-FEB-00 25-FEB-00

7 2 05-MAY-02 10-MAY-02

9 1 05-OCT-02 20-OCT-02

4 3 10-OCT-00 12-OCT-00

10 rows selected.

SQL> select to_date(h_to , 'dd-mm-yyy') from emp_holiday ;

TO_DATE(H

---------

20-JUN-02

10-JUN-00

01-FEB-00

20-FEB-00

07-OCT-02

19-MAY-02

25-FEB-00

10-MAY-02

20-OCT-02

12-OCT-00

السؤال انو ليش ما بيعطيني زي ما بدي

يعني >> dd-mm-yyyy format

او يمكن انا كاتبة خطأ

و شو الخطا الذي رقمو ora-01858 شو بيعني

#7

المشكلة عندك في اليجيتري

جربي عمل NEW--->STRING VALUE

في

HKEY_LOCAL_MACHINESoftwareORACLE

اسمه

NLS_DATE_FORMAT

والقيمة داخله

DD-MON-YYYY

بالنسبة للCURSOR

جربي

DECLARE

CURSOR TEST IS SELECT H_NO WHERE H_FROM>=:D1

AND H_TO:D1;

BEGIN

FOR I IN TEST LOOP

MESSAGE (TO_CHAR(H_NO))

END LOOP;

;END

بالنسبة للسؤال الثاني

يعتمد على اليجستري السابق

وممكن تجربي نفس الكيرسور السابق بعد تعديل الريجستري

#8

بخصوص سؤال الخطا ora-01858 فهذا الخطأ ينجم عن وجود قيمة غير رقمية في مكان رقمي، أو عندما تحاولين تغيير القيمة الى تاريخ، فتواجه الاوراكل بقيمة غير رقمية، أبحثي في بياناتك ويتجدي يمة خاطئة لا يمكن تحويلها لتاريخ

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

#9

شكرا للجميع

معلش انا غلبتكم بس اكيد استفدت

و شكرا كتيير الكم لاني حليت المشكلة

cursor c(d1 varchar) is select h_no k ,emp_no from emp_holiday where to_date(to_char(to_date(d1,'dd-mm-yyyy'),'dd-mm-yyyy'),'dd-mm-yyyy') >= to_date(to_char(h_from,'dd-mm-yyyy'),'dd-mm-yyyy')

and to_date(to_char(to_date(d1,'dd-mm-yyyy'),'dd-mm-yyyy'),'dd-mm-yyyy') <= to_date(to_char(h_to,'dd-mm-yyyy'),'dd-mm-yyyy');

باني استخدمت الدالة to_char في بعض الاماكن اللي كان لازم استخدمها فيها

عموما شكرا للجميع كمان مرة

هذا الموضوع مغلق.

مواضيع مشابهة