بو عبدالعزيز بتاريخ: 1 أغسطس 2008 تقديم بلاغ مشاركة بتاريخ: 1 أغسطس 2008 الـسـلاااااااااام عليكم رحمه اللهأنا عندي جدول Employee ..والـPrimary Key هـو Employee_IDوالUser لا يدخل الID .. فقط الSysytem Generate itويكون على هذا الشكل (Emp_1, Emp_2, ......... Emp_10)في الdatabase .. عندي للـEmp_10لما أطلب منه ID جديد .. يظل يعطيني Emp_10مع العلم أن المفروض يعطيني Emp_11وهـذا الكود المستخدم لصنع ID أتومتيكي Select Concat('Emp_',Substr(Employee_ID,5)+1) INTO :New_Employee.Employee_ID from Employee where Employee_ID = (Select Max(Employee_ID) from Employee); في كل مرة .. يعتبر Emp_9 هو الـMaxيكن لأنه أخذ أول رقم (9) ... مع أنه المفروض يأخذ الرقم كامل بعد الـEmp_أرجــو أن يكون السـؤال واضـح ..وأن أجــد إجــابـة عندكم ... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 1 أغسطس 2008 تقديم بلاغ مشاركة بتاريخ: 1 أغسطس 2008 الاخ / بو عبدالعزيزوعليكم السلام ورحمة الله اقترح عليك تبسيط شكل مفتاح الجدول بان تجعله نوعه رقم فقط ... بدون كتابة حروف ال emp داخل قيمة المفتاح . - يمكنك تبسيط امر استرجاع اكبر رقم ايضا ... وان تضعه مع تريجير pre_insert على مستوى البلوك مثال Select Max(Employee_ID)+1 INTO :New_Employee.Employee_ID from Employee; وان كنت تحتاج لتصنيف نوع الموظف ... يمكنك اضافة عمود جديد بالجدول مع التحية اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sameh bakkar بتاريخ: 1 أغسطس 2008 تقديم بلاغ مشاركة بتاريخ: 1 أغسطس 2008 الأخ الفاضل ... طرقتك شغاله تمام بعد التجربه و لكنها غير فعاله و اذا اردت ان تعمل بها فيجب عليك عمل Save بعد اضافه اى موظف حتى تشعر الشاشه بأعلى رقم دائما .. اذا يجب عليك عمل Save بعد كل Record .. و لكن نصيحتى لك استخدام ال Sequence فى حالات ال PK ... بالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 1 أغسطس 2008 تقديم بلاغ مشاركة بتاريخ: 1 أغسطس 2008 الأخ الكريم ، أنا رأيي مع رأي الأخ Amgad ... حيث قيمة المفتاح الرئيسي من المفضل ان تكون رقمية ... ويكون نوع البيان رقمي لهدف أنه أسرع من البيانات النصية ... أما لو كنت ترغب في إنشاء حقل نصي فيمكنك إنشاء حقل إضافي تصنع به ما تشاء حسب رغبة المستخدمعلي العموم القيمة النصية تختلف عن القيمة الرقمية ... لأن الرقم 10 أقل من الرقم 9 ... ولكن الرقم 10 أكبر من الرقم 1 ... والدليل علي ذلك إذا أدرجت 20 رقم في حقل نصي وعملت عليها Order by هتلاقي التنسيق هيكون بالشكل التالي : FLD ---------- 1 10 11 12 13 14 15 16 17 18 19 FLD ---------- 2 20 3 4 5 6 7 8 9 وفي هذه الحالة سيكون أكبر قيمة هو الرقم (9 ) رغم أن هناك أرقام أخري أكبر منه مثل 89 !!!لكن لو أحببت تجعلة مرتب ترتيب رقمي تصاعدي في هذه الحالة يجب عليك تحويل القيمة النصية الي قيمة رقمية بإستخدام الدالة TO_NUMBER !!!علي العموم أنظر الي التعديل التالي : SELECT 'EMP_' || TRIM(NVL(MAX(TO_NUMBER(SUBSTR(EMPLOYEE_ID,5))),0) + 1) INTO :NEW.EMPLOYEE_ID FROM EMPLOYEE; ملحوظة ، يمكنك إستخدام نفس الكود من داخل النموذج ولكن في حدث PRE-INSERT علي مستوي بلوك البيانات .شكراً ، وبالتوفيق ، اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
بو عبدالعزيز بتاريخ: 1 أغسطس 2008 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 1 أغسطس 2008 مـشـكورين أخواني على الـردود المشجعة فعلاً ..انا أريده حرفي لأميز الـPrimary key في كل جدولولو كانوا كلهم أرقام .. راح أضيع بينهم !!على العموم ..راح أجرب طريقة مشرفنا MMAوإن شاء الله راح أرجع لكم بعدهااااالكن ممكن طلب ..ممكن أحد يعطيني مثال لـ Pre-Insert ؟؟أنا ولا مرة أشتغلت عليه .. لذلك أريد مثال توضيحي لو تكرمتم أخواني ..... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 2 أغسطس 2008 تقديم بلاغ مشاركة بتاريخ: 2 أغسطس 2008 مـشـكورين أخواني على الـردود المشجعة فعلاً .. العفور علي أية نحن جميعاً هنا أخوة فليس هناك فرق بين أحد وربنا يدوم المحبة بيننا جميعاً ( يارب العالمين )انا أريده حرفي لأميز الـPrimary key في كل جدولولو كانوا كلهم أرقام .. راح أضيع بينهم !! أنا مش فاهم بالضبط معني هذا الكلام ... بس أعتقد أن حضرتك لديك جدول يحمل جدولين يعني مثلاً جدول الفئات أو جدول ( العملاء / الموردين ) أو جدول ( الوارد / الصادر ) ... أليس كذلك ؟؟؟يعني أنت عندك جدولين مماثلين تماماً في أسماء بياناتهم فحبيت تدرجهم في جدول واحد ومش عارف كيف تميز بين الجدولين ( أليس كذلك ) ..علي فكرة أنا وقعت في مثل هذه المشكلة من قبل ... ولكنني وجدت حل أفضل بكثير وهو إدراج جدول واحد وبه حقل إضافي يمثل نوع البيان المدرج TYPE ... يعني مثلاً لو فردنا أن لدينا جدولين ... الأول العميل والثاني المورد كيف أميز بينهم في جدول واحد .. مثال :CREATE TABLE CUSTOMER ( CUSTOMER_ID NUMBER(10), CUSTOMER_TYPE NUMBER(1), CUSTOMER_CODE VARCHAR2(20), CUSTOMER_NAME VARCHAR2(50), CONSTRAINT PK_CUSTOMER PRIMARY KEY(CUSTOMER_ID), CONSTRAINT UQ_CUSTOMER_CODE UNIQUE(CUSTOMER_TYPE,CUSTOMER_CODE), CONSTRAINT UQ_CUSTOMER_NAME UNIQUE(CUSTOMER_TYPE,CUSTOMER_NAME) ) / CREATE OR REPLACE TRIGGER TRG_BEFORE_CUSTOMER BEFORE INSERT OR UPDATE OR DELETE ON CUSTOMER FOR EACH ROW DECLARE BEGIN IF(INSERTING)THEN SELECT NVL(MAX(CUSTOMER_ID),0) + 1 INTO :NEW.CUSTOMER_ID FROM CUSTOMER; END IF; END; / بعد كدة لو حبيت تصنع نموذج واحد يضم الإثنين يمكنك التمييز بينهم علي أساس إدراج خيار Option Radio أو مثلاً إستدعاء النموذج مع إرسال قيمة باراميتر له وتمييز بلوك البيانات علي أساسة ( أنظر المثال المرفق ) . لكن ممكن طلب ..ممكن أحد يعطيني مثال لـ Pre-Insert ؟؟أنا ولا مرة أشتغلت عليه .. لذلك أريد مثال توضيحي لو تكرمتم أخواني ..... علي فكرة حدث الـ Pre-Insert Trigger تقريباً شبية بالحدث Insert Trigger علي مستوي الجدول !!!حتي لا أطيل عليك ، أنظر الي المرفق ... حيث يحتوي علي مثال Pre-Insert خفيفشكراً ، وبالتوفيقSimbles.zip اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.