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

خطأ عند تنفيذ Trigger


sara gamal

Recommended Posts

السلام عليكم
عندى trigger مفروض لما اعمل insert لمستخدم جديد في جدول ال users يروح يدخل رقم المستخدم مع رقم كل الفورم في جدول ال Security

CREATE OR REPLACE TRIGGER new_user
after insert on users

for each row
declare
x number(10);
cursor us_forms is select form_id
                 from forms_reports; begin open us_forms ;
loop
fetch us_forms into x; exit when us_forms%notfound;
insert into security values (:new.user_id,x,null,null,null,null);
end loop;
close us_forms;
end;


لما باجى ادخل مستخدم جديد بيظهر خطأ
ORA-00001: unique constraint (HRMS.PK_SECURITY) violated
ORA-06512: at "HRMS.NEW_USER", line 10
ORA-04088: error during execution of trigger 'HRMS.NEW_USER'

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

البريمري كي بتاع جدول السكيورتي فيه مشكلة ، إما انك حضرتك مش بتباصي القيمة فداخل ب null ، او عملت تكرار
ياريت توضحي شكل الجدول بتاع السكيورتي والبراميري كي بتاع الجدول ده فين ؟؟

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

متهيألى ان ال primary key مفهوش مشكله هو عباره عن رقم المستخدو مع رقم الفورم الكود ده اصلا كنت عاملاه في procedure في فورم وكان شغال كويس بس قلت احسن انى اخليه trigger على ال database

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

لو سمحتم انا لسه معرفتش ايه المشكله في الكود ده مفروض ان من الكود ال key بيدخل ومفروض انه ميتكررش لان جمله ال insert داخل ال Cursor
اذا في خطأ في الكود ياريت حد يوضحه

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

السلام عليكم
الاخ الكريم
يجب ان يكون هناك عمود اخر تالت مع primary key التى قمت باضافتها وليكن serial ويكون واخد من sequence او تزود قيمة serial فى كل مرة على مستوى المستخدم
لانه على فرض ان المستخدم فتح فورمة معينة ونفس المستخدم فتح نفس الفورمة . حتلاقى عندك constraints بيشتغل علشان موضوع primary key لكن قم بعمل مسلسل او serial
ودا حيفيدك لو حبيت تعرف كام مرة المستخدم دخل على فورمة معينة

ياريت يكون الفكرة وضحت ....

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

السلام عليكم
اختي سارة...هادا وصف الخطأ...واتوقع انه الخطأ ليس بالكود...

ORA-00001: unique constraint violated



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

Symptom:
When inserting or updating data, the following error is returned:

ORA-00001: unique constraint violated (<schema>.<constraint>)
Cause:
This error means that an attempt has been made to insert a record with a duplicate (unique) key. This error will also be generated if an existing record is updated to generate a duplicate (unique) key. Typically this is a duplicate primary key, but it need not be the primary key.

Remedy:
Only one of the following will be appropriate:

Remove the unique restriction.

Change the restriction to allow duplicate keys. An index could be changed to be a non-unique index, but remember that the primary key must always be unique.

Do not insert the duplicate key.

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

الاخت سارة ...
واحده واحدة كده .... اولا الكود مفهوش مشكلة برمجيا وتمام التمام
ثانيا : الكود من الناحية المنطقيه فيه مشكلة زي ما قال الاخ abdou1984 ، ان اليوسر ممكن يشتغل على الشاشة اكتر من مرة ، منطقيا بالكود الي نات حضرتك كتبتيه ده معنى كده ان اليوسر الواحد ما ينفعش يدخل على الشاشة الواحدة اكتر من مرة .......

ثالثاً : الايرور اللي طالع معناه انك كسرتي قيد موجود في البريمري كي بتاع الجدول ، وده بحاجة من اتنين ملهمش تالت ، يا اما قيمة البرايمي NULL ، يا أما فيه تكرار
عشان نعرف فين المشكلة بالظبط
محتاجين تبعتلنا نتيجة جملة السلكتاية ده select form_id from forms_reports
وكمان اسم اليوسر ايه اللي انت داخله بيه الشاشة ...
وان شاء الله نقدر نساعدك
سلام عليكم

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

السلام عليكم
اشكركم على الرد
انا وضعت ناتج جمله ال select وشكل الجداول المستخدمه بس بصراحه انا مش فاهمه ايه مشكله القلته عليها دى متهيألى ان الفكره العملاها فهمناها بطريقه تانيه
الجدول بتاع ال security مش اكتر ان بسجل فيه صلاحيات كل مستخدم على كل الفورم من حيث الدخول وعمل insert and update and delete

لانه على فرض ان المستخدم فتح فورمة معينة ونفس المستخدم فتح نفس الفورمة . حتلاقى عندك constraints بيشتغل علشان موضوع primary key لكن قم بعمل مسلسل او serial

بصراحه مش فاهمه يعنى ايه بس هحاول اوصل فكرتى
لو مستخدم عايز يفتح فورمه بيشوف له صلاحيه الدخول بيدخله لو لا مش بيدخله
الفكره اصلا ان عايزه لما اعمل مستخدم جديد في المشروع بدل ما ادخل رقم المستخدم الجديد مع رقم كل فورمه عشان بعدين املى الصلاحيات
اعمل trigger على مستوى ال database اول ما ادخل مستخدم جديد يضع في جدول ال security رقم المستخدم مع ال 26 فورم العندى انا كده مكررتش لانه مفروض يدخل لو رقم المستخدم 3
3 و1
3 و2
3 و3 وهكذا

Desktop.rar

تم تعديل بواسطة sara gamal
رابط هذا التعليق
شارك

السلام عليكم
بالنسبة لحل هذه المشكلة أمامك اختيارين
الاول حذف ال fk الموجود على جدول ال security الخاص بالعمود user_id طبعا ده حل مش منطقي
الحل الثاني
وهو فقط عند انشاء الجدول يتم ترتيب الاعمدة غير ماتم ذكره يتم وضع عمود ال user_id قبل عمود form_id يعني يتم حذف جدول ال security
وإعادة بناؤه بالترتيب الاي قولته وهو وضع عمود user_id في الاول
منتظر التجربة

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

الحمد لله فعلا اتعملت جزاك الله خيرا طيب هو كان ينفع بدل ما انشئ الجدول مره اخرى اغير ترتيب الcolumns في جمله ال insert يعنى اخلى form_id الاول وبعدين user_id
ولا برده هيظهر نفس الخطأ

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

لا ماهي المشكلة بالفعل في تريتب عملية الادخال في التريجر فقط لاغير
فلو تركتي الجدول كما هو كان لابد من تغيير فقط الترتيب في جملة ال insert
ولكي يتم تجنب الاخطاء الاي زي دي لابد من كتابة وتحديد اسماء الاعمدة في جملة ال insert قبل ال values

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

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

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

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

×   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.

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

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

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