بتاريخ: 19 أغسطس 200817 سنة comment_136448 انا ابغى اعرف كيف اولد ارقام تسلسليه بدون استخدام الsequenceفي موضوع في المنتدى بس ما استطعت فهم الفكرهانا اللي فاهمه اني اروح للبلك واختار pre-insert trigeer بس المهم ايش الكود اللي احطه فيهاسم الحقل هو P_no تقديم بلاغ
بتاريخ: 19 أغسطس 200817 سنة comment_136451 السلام عليكم اخي الكريم ورحمة اللهممكن عمل ارقام تسلسلة بدون الحاجة الى السيكونس وذلك بعمل الزناد الذي اشرت اليه وكتابة فيه دالة max+1 وتضعها في قيمة متغير جديد تنسب قيمته الى اسم الحقل الذي يكون ابتدائيا صفر وبعدها تبدا القيمة تزداد لكن اي رقم يحذف لايتكرر لاحظ هذا جيدا اي يعمل عمل دالة السيكونس تقديم بلاغ
بتاريخ: 19 أغسطس 200817 سنة comment_136453 اخي الكريم لو كنت في البيت لاعطيتك الكود الان لكن صدقني اعمل ما قلته لك تطلع نفس النتيجة تقديم بلاغ
بتاريخ: 19 أغسطس 200817 سنة كاتب الموضوع comment_136456 مشكووور اخي الكريم انا بجرب الحين واشوف اذا ما اشتغل والا ما عرفت سوف انتظر منك الكود تقديم بلاغ
بتاريخ: 19 أغسطس 200817 سنة كاتب الموضوع comment_136459 هذا الكود اللي كتبته تقدر تشوفه اخي العزيز DECLARE num number; BEGIN select nvl(max(P_no)+1),0) into num from p_data p_no=num; end; تقديم بلاغ
بتاريخ: 20 أغسطس 200817 سنة كاتب الموضوع comment_136582 وينك اخي الكريم لاني ما عرفت اشغل الكود وانا حاليا متعطل ارجوا من الاخوان الذين لديهم معرفه بحل مشكلتي تقديم بلاغ
بتاريخ: 20 أغسطس 200817 سنة comment_136593 DECLARE NUM NUMBER; BEGIN SELECT count(NVL(P_NO,0))+1 INTO NUM FROM P_DATA; _NO := NUM; END; تقديم بلاغ
بتاريخ: 20 أغسطس 200817 سنة comment_136595 خذ هذا الكود وان شاء الله يفيدكcreate_record;select nvl(max(record name),0)+1 into :text_item name from table; تقديم بلاغ
بتاريخ: 20 أغسطس 200817 سنة كاتب الموضوع comment_136608 مشكووورين وما قصرتوا جعله الله في ميزان حسناتكم تقديم بلاغ
بتاريخ: 20 أغسطس 200817 سنة comment_136609 خذ هذا الكود وان شاء الله يفيدكcreate_record;select nvl(max(record name),0)+1 into :text_item name from table; أخي هذه الطريقة صحيحة في حال كان هناك استخدام في عملية الحذف للسجل فيمكن استخدامهااما عند استخدام count فبهذه الطريقة لايتم استخدام عملية الحذفSELECT count(NVL(P_NO,0))+1 INTO NUM FROM P_DATA; او SELECT MAX(NVL(P_NO,0))+1 INTO NUM FROM P_DATA; الطريقتين صحيحتان ولكن ضمن الشرط الذي ذكرته الان من حيث عملية الحذف تم تعديل 20 أغسطس 200817 سنة بواسطة rose_4_pretty تقديم بلاغ
بتاريخ: 20 أغسطس 200817 سنة كاتب الموضوع comment_136612 معليش اخواني ما شتغل معاي الكو د جربت الاثنين بس ما نفع انا ابغى لمن اسوي اسوي لنشاء لسجل جديد هو يحط في سجل الرقم رقم معينيعني لو كان الرقم في p_no2 لمن اسوي انشاء هو لحاله يزيد الرقم بواحد وهكذا يصير عندي تسلسل بدون ما اضيف اي رقم بشكل يدوي تقديم بلاغ
بتاريخ: 20 أغسطس 200817 سنة comment_136622 معليش اخواني ما شتغل معاي الكو د جربت الاثنين بس ما نفع انا ابغى لمن اسوي اسوي لنشاء لسجل جديد هو يحط في سجل الرقم رقم معينيعني لو كان الرقم في p_no2 لمن اسوي انشاء هو لحاله يزيد الرقم بواحد وهكذا يصير عندي تسلسل بدون ما اضيف اي رقم بشكل يدوي معناها اكتب الكود داخل زر الانشاء نفسهولكن بالبداية اكتب التاليcreate_record; تم تعديل 20 أغسطس 200817 سنة بواسطة rose_4_pretty تقديم بلاغ
بتاريخ: 20 أغسطس 200817 سنة comment_136632 الأخوة الكرام ، أسمحوا لي بالمشاركة ،الأخ الغالي nan740 ، هناك أسلوبين لإنشاء ترقيم تلقائي ،الأسلوب الأول وهو بإستخدام الـ sequence ، ودة طبعاً أنت عارفة ،أما الأسلوب الثاني وهو بإستخدام جمع رقمي أو إيجاد أكبر قيمة وزيادتها بواحد أو إثنين أو ثلاثة أو ... الي آخرة.علشان تخلي حقل مرقم ترقيم تلقائي ما عليك سوي أمر من الإثنين :نفرض أن لدينا جدول يدعي Emp وبه حقل يدعي Emp_Serial ..1- إنشاء تريجر مناسب علي مستوي الجدول نفسة في قاعدة البيانات كما يلي : CREATE OR REPLACE TRIGGER TRG_BEFORE_EMP BEFORE INSERT OR UPDATE OR DELETE ON EMP FOR EACH ROW DECLARE BEGIN IF(INSERTING)THEN SELECT NVL(MAX(EMP_ID),0) + 1 INTO :NEW.EMP_ID FROM EMP; END IF; END; / 2- في حدث Trigger علي مستوي بلوك البيانات Emp تحت إسم Pre-Insert أدرج الكود التالي : Select NVL(Max(Emp_ID),0) + 1 Into :Emp.Emp_ID From Emp; لكن لو مثلاً كنت عايز تخلي عملية التزايد مزدوج فيمكنك إستخدام الكود التالي : Select NVL(Max(Emp_ID),0) + 2 Into :Emp.Emp_ID From Emp; وهكذابالتوفيق تقديم بلاغ
بتاريخ: 20 أغسطس 200817 سنة كاتب الموضوع comment_136678 مشكوووور يا اخ mma والله ما قصرت الحين فهمت وجاري التطبيق تقديم بلاغ
بتاريخ: 21 أغسطس 200817 سنة comment_136698 الأخوة الكرام ، أسمحوا لي بالمشاركة ،الأخ الغالي nan740 ، هناك أسلوبين لإنشاء ترقيم تلقائي ،الأسلوب الأول وهو بإستخدام الـ sequence ، ودة طبعاً أنت عارفة ،أما الأسلوب الثاني وهو بإستخدام جمع رقمي أو إيجاد أكبر قيمة وزيادتها بواحد أو إثنين أو ثلاثة أو ... الي آخرة.علشان تخلي حقل مرقم ترقيم تلقائي ما عليك سوي أمر من الإثنين :نفرض أن لدينا جدول يدعي Emp وبه حقل يدعي Emp_Serial ..1- إنشاء تريجر مناسب علي مستوي الجدول نفسة في قاعدة البيانات كما يلي :CREATE OR REPLACE TRIGGER TRG_BEFORE_EMP BEFORE INSERT OR UPDATE OR DELETE ON EMP FOR EACH ROW DECLARE BEGIN IF(INSERTING)THEN SELECT NVL(MAX(EMP_ID),0) + 1 INTO :NEW.EMP_ID FROM EMP; END IF; END; / 2- في حدث Trigger علي مستوي بلوك البيانات Emp تحت إسم Pre-Insert أدرج الكود التالي : Select NVL(Max(Emp_ID),0) + 1 Into :Emp.Emp_ID From Emp; لكن لو مثلاً كنت عايز تخلي عملية التزايد مزدوج فيمكنك إستخدام الكود التالي : Select NVL(Max(Emp_ID),0) + 2 Into :Emp.Emp_ID From Emp; وهكذابالتوفيق Thank you MMA for ur informationBut in programming I think we need to use the most easy way to clarify our code at the end.specially in this task no need to use trigger to increase the serial for a field.Thank u again MMABest Regards تقديم بلاغ
بتاريخ: 25 أغسطس 200817 سنة comment_137135 لدي مداخله شبابانشي جدول SERIAL_DATA CREATE TABLE SERIAL_DATA(SER_NO NUMBER(5),YEAR NUMBER(4),NOTE VARCHAR2(50)); ثم اذهب للفورم وروح على البلوك الذي يوجد به حقل P_NOتبعك واختار ترجر PRE_INSERTواكتب التالي فيه BEGIN LOCK TABLE SERIAL_DATA IN share row EXCLUSIVE MODE; SELECT SER_NO + 1 INTO _NO FROM SERIAL_DATA WHERE YEAR=1429; --هنا سوف يختار الرقم الموجود في هذا الجدول UPDATE SERIAL_DATA --هنا تقوم بتعديل قيمة جدول التسلسل ووضع اخر قيمة في الجدول SET SER_NO = _NO WHERE YEAR =1429; EXCEPTION -- هنا راح يدخل مرة واحد فقط عندما يكون الجدول فاضي WHEN NO_DATA_FOUND THEN insert into SERIAL_DATA --يعمل ادخال قيمة 0 للتسلسل وبعد ينفذ الباقي values(0,1429,'تسلسل جدول الموظفين لعام'); LOCK TABLE SERIAL_DATA IN share row EXCLUSIVE MODE; SELECT SER_NO + 1 INTO _NO FROM SERIAL_DATA WHERE YEAR=1429; UPDATE SERIAL_DATA SET SER_NO = _NO WHERE YEAR =1429; END; وبكذا عملت جدول خاص للتسلسل تبعك تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.