بتاريخ: 28 يوليو 201015 سنة comment_197576 السلام عليكم ورحمة الله وبركاتهاولا احب اشكر اعضاء ومشرفين وكل من له صلة بامنتدي لما يقدمه للعرب من عظيم الفوائد + ربنا يبارك فيكم +يا شباب عندي جدول forms_name حاطي فيه كل اسماء الفورم العنديوجدول username فيه كل المستخدمينوجددول user_grant فيه اسم المستخدم واسم الفورم والصلاحيات الممنوحة لهذا المستخدم علي الفورمالفكرة:- محتاج اعمل Database Trigger علي جدول username . اول ما يتم اضافة مستخدم جديد يقوم التريجر باضافة هذا المستخدم واسماء الفورم والصلاحيات. مبدئيا لا يملك صلاحيات.المشكلة:-عند ادخال بيانات في جدول المستخدمين username يديني رسالة خطاء ERROR at line 1:ORA-04091: table Q.USERNAME is mutating, trigger/function may not see itORA-06512: at "Q.USERNAME_T_INS", line 6ORA-04088: error during execution of trigger 'Q.USERNAME_T_INS' وانا ارفقت الجداول والتريجرارجو المساعدة تقديم بلاغ
بتاريخ: 28 يوليو 201015 سنة comment_197589 مفيش اى جدوال فى المرقثات ولكن DECLARE CURSOR users IS select DISTINCT forms_name from user_grant ; n number(10); P NUMBER(10); XX number(10); z number (20); BEGIN open users ; select fro_id_seq.NEXTVAL into Xx from dual; انت هنا خطط رقم الموظف او اسمه الجديدو بيانتها INSERT INTO username VALUES(XX); loop FETCH users INTO n; EXIT WHEN z =n ; INSERT INTO user_grant VALUES (XX,n,);--هنا بتحط فى جدوال الصلاحيات اسمه او رقمه المظزف زاسم الفورمه ودخل الصلاحيه زاى مانت عايز z:=n; EXIT WHEN USERS%NOTFOUND; END LOOP ; COMMIT ; end ' طبعا تنسيق المشاركه مش عارف ليه انا هنا عامل على مستوى الفورمه اللى بتداخل عليه انت ممكن تعدل الكوده وتخليه لى مستوى الداتا بيز بس انصحك انك تعملو على مستوى الفورم و بدل ماتكتب اسم المستخدم اكب رقمه عشان عدم التكرر .طبعا المشاركه محتاجه عشان فروقات الجدوال .بالتوفيق لجميع . تقديم بلاغ
بتاريخ: 29 يوليو 201015 سنة كاتب الموضوع comment_197640 شكرا اخي مصطفي علي الردبس المشكلة لاذالت قائمةوالان انا رفعت الملف تقديم بلاغ
بتاريخ: 29 يوليو 201015 سنة comment_197641 اخي لم ترفع الجداول على المرفقاتراجع المزضوع التاليشرح كيفيه تسجيل التغييرات التي يجريها المستخدمين على الجداول في حالة الاضافه و الحذف و التعديل تم تعديل 29 يوليو 201015 سنة بواسطة ammarcontrol تقديم بلاغ
بتاريخ: 29 يوليو 201015 سنة كاتب الموضوع comment_197642 طيب كيف يتم رفع المرفقات اخي؟؟؟؟؟؟ تقديم بلاغ
بتاريخ: 29 يوليو 201015 سنة كاتب الموضوع comment_197643 -- drop table forms_name هذا الجدول راح اخت فيه ارقام و اسماء الفورمات بالعربي والانجليزي create table forms_name( formid number(4) primary key, form_name varchar2(30), form_Ename varchar2(30) ); **************************************************** --drop table username; هنا جدول المستخدمين الاسم والرقم والباسورد create table username( a number(4) primary key, username varchar2(50), passwd varchar2(30), USERCode varchar2(2) ); **************************************************** -- drop table user_grant; هنا جدول صلاحيات المستخدمين عل كل فورم وهذا الجدول سيتم تعبئته اتوماتيكي من خلال التريجر وهو بيعطي المستخدم الجديد صلاحية ادخال فقط create table user_grant( userid number(4) references username( a ), formid number(4) references forms_name(formid ), add_data number(1) default 1, delete_data number(1) default 0, print_data number(1) default 0, preview_data number(1) default 0, update_data number(1) default 0, primary key ( userid ,formid ) ); **************************************************** --drop trigger username_t_ins; Create or replace trigger username_t_ins After insert on username REFERENCING NEW AS nRow for each row declare formid_v forms_name.formid%type; id number; CURSOR users_cur IS select DISTINCT formid from forms_name; Begin if inserting then open users_cur; loop FETCH users_cur INTO formid_v; exit when users_cur%NOTFOUND; insert into user_grant (userid ,formid ) values(:nRow.a, formid_v); END LOOP; Commit; end if; end; / الان نحاول ادخال بيانات الفورمات insert into forms_name values(1,'username','username'); insert into forms_name values(2,'main','main'); insert into forms_name values(3,'report','report'); insert into forms_name values(4,'student','student'); commit; كمان نحاول اضافة مستخدم insert into username values(3,'admin',0,0); وهذه رسالة الخطاء البتطلع. SQL> insert into username values(3,'admin',0,0); insert into username values(3,'admin',0,0) * ERROR at line 1: ORA-04091: table Q.USERNAME is mutating, trigger/function may not see it ORA-06512: at "Q.USERNAME_T_INS", line 11 ORA-04088: error during execution of trigger 'Q.USERNAME_T_INS' تقديم بلاغ
بتاريخ: 29 يوليو 201015 سنة comment_197653 الحلاحذف العبارة commit من التريكر لانه سوف يخزن تلقائيا و لا يحتاج commit هذا هو السبب تقديم بلاغ
بتاريخ: 29 يوليو 201015 سنة comment_197654 استعمل هذا الكود grant dba to test identified by test; connect test/test@db1; rem ********************************* create table forms_name( formid number(4) primary key, form_name varchar2(30), form_Ename varchar2(30) ); rem ********************************* create table username( a number(4) primary key, username varchar2(50), passwd varchar2(30), USERCode varchar2(2) ); rem ********************************* create table user_grant( userid number(4) references username( a ), formid number(4) references forms_name(formid ), add_data number(1) default 1, delete_data number(1) default 0, print_data number(1) default 0, preview_data number(1) default 0, update_data number(1) default 0, primary key ( userid ,formid ) ); rem ********************************* Create or replace trigger username_t_ins After insert on username REFERENCING NEW AS nRow for each row declare formid_v forms_name.formid%type; id number; CURSOR users_cur IS select DISTINCT formid from forms_name; Begin if inserting then open users_cur; loop FETCH users_cur INTO formid_v; exit when users_cur%NOTFOUND; insert into user_grant (userid ,formid ) values(:nRow.a, formid_v); END LOOP; end if; end; / rem ********************************* insert into forms_name values(1,'username','username'); insert into forms_name values(2,'main','main'); insert into forms_name values(3,'report','report'); insert into forms_name values(4,'student','student'); commit; rem ********************************* insert into username values(3,'admin','0','0'); commit; rem ********************************* select * from username; select * from user_grant; تقديم بلاغ
بتاريخ: 1 أغسطس 201015 سنة كاتب الموضوع comment_197833 السلام عليكماخ عمارجربت الاسكربت الحاطيه انت ونفس المشكلةرسالة الخطاء البتطلع هي SQL> insert into username values(3,'admin','0','0'); insert into username values(3,'admin','0','0') * ERROR at line 1: ORA-04091: table QQ.USERNAME is mutating, trigger/function may not see it ORA-06512: at "QQ.USERNAME_T_INS", line 11 ORA-04088: error during execution of trigger 'QQ.USERNAME_T_INS' علي فكرة انا شغال علي اوراكل oracle 8iفي رايك ممكن دا يكون سبب؟؟؟ تقديم بلاغ
بتاريخ: 8 أغسطس 201015 سنة كاتب الموضوع comment_198306 احتمال لاني شغلته على 10 جي و ماكو مشكله شكرا اخي عمار علي مجهوداتك المقدرةلكن الحال في حالو تقديم بلاغ
بتاريخ: 8 أغسطس 201015 سنة comment_198309 السلام عليكمجرب تعديل الترجر كالتالي: Create Or Replace Trigger Username_T_Ins After Insert On Username For Each Row Declare Pragma Autonomous_Transaction; Appo_Pr Varchar2(64):= Null; Begin Select Distinct Formid Into Appo_Pr From Forms_Name; Insert Into User_Grant (Userid ,Formid ) Values (:Nrow.A, Appo_Pr); End Username_T_Ins; / وبامكانك مراجعة هذا الرابط:http://www.araboug.org/ib/index.php?showtopic=17267&hl=بالتوفيق. تقديم بلاغ
بتاريخ: 8 أغسطس 201015 سنة comment_198310 السلام عليكم , Create Or Replace Trigger Username_T_Ins After Insert On Username Referencing New As Nrow Old As Old For Each Row Declare Formid_V Forms_Name.Formid%Type;Id Number; Cursor C Is Select Formid From Forms_Name; Begin Open C; Loop Fetch C Into Formid_V; Insert Into User_Grant (Userid ,Formid ) Values(:Nrow.A, Formid_V); Commit; Exit When C%Not Found; End Loop; Close C; Exception When Others Then Raise; End ; تم تعديل 8 أغسطس 201015 سنة بواسطة malik alwadi تقديم بلاغ
بتاريخ: 23 أغسطس 201213 سنة comment_226893 السلام عليكم ,Create Or Replace Trigger Username_T_Ins After Insert On Username Referencing New As Nrow Old As Old For Each Row Declare Formid_V Forms_Name.Formid%Type;Id Number; Cursor C Is Select Formid From Forms_Name; Begin Open C; Loop Fetch C Into Formid_V; Insert Into User_Grant (Userid ,Formid ) Values(:Nrow.A, Formid_V); Commit; Exit When C%Not Found; End Loop; Close C; Exception When Others Then Raise; End ; بجد مجهود اكثر من رائع ياشباب تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.