بتاريخ: 24 يونيو 200817 سنة comment_131942 الاخوة والاخوات الاعزاءطلب مني في مقابلة عمل ان اعمل تراجر يقوم بعمل برايمري كي للاسماء في قاعدة البيانات اي عند ادخال اسم موجود تظهر مسج تؤكد وجود الاسم في قاعدة البيانات كيــــــــــــــــف يمكن عمل ذلك ياريت لو كل من يقدر يشارك ولو بالكلمة تقديم بلاغ
بتاريخ: 24 يونيو 200817 سنة comment_131950 السلام عليكم ورحمه الله وبركاتهممكن تعمل كيرسور يشوف الاسماء الموجوده فى الحقل اللى انت عايز تدخل فيه القيمه الجديده ويخزن القيمه فى متغير وبناء على ذلك يشوف تساوى القيمتين وبعد كده ممكن تظهر الخطأ ده فى رسائل او تنبيه ..... تقديم بلاغ
بتاريخ: 25 يونيو 200817 سنة كاتب الموضوع comment_132046 شكـــــــــــــرا اخي ENG_HOSSAM_WALLY على الرد ياريت لو ترفق كمثال فورمز تعمل على 6i اكون شاكر وممتن لك بانتظارك اخي العزيز تقديم بلاغ
بتاريخ: 25 يونيو 200817 سنة comment_132047 الاخ العزيز alsaediمن الصعب انك تحدد تكرار الاسم من عدمو لأنو فيه بعض الاسماء يتم ادخالها باكثر من طريقةفمثلا الاسم احمد ممكن يتم ادخال بطريقتين:1- احمد2- أحمدهون حتى الهمزة راح تفرق معكاما اذا بشكل عام ممكن تكتب هاد الكود: declare x number; begin select count(*) into x from table_name where emp_name=:emp_name; if x >0 then message('This name is exist'); end if; end; جرب هاد الكود وان شاء الله بيكون صحيح تقديم بلاغ
بتاريخ: 25 يونيو 200817 سنة comment_132048 يمكنك إنشاء هذا الـ Trigger علي مستوي الجدول Emp الموجود بـ Scott/Tiger كما يلي : Create Or Replace Trigger TRG_EMP Before Insert Or Update On Emp For Each Row Declare ID_Count Number; Begin Select Count(*) Into ID_Count From Emp Where Ename = :New.Ename; If(ID_Count > 0)Then Raise_Application_Error(-20000,'Can''t repetition the name'); End If; End; / بحيث أنه لا يكرر إسم الموظف علي الإطلاق ، حاول تدرج السجل التالي : Insert Into Emp(EmpNo,Ename) Values(1111,'Ahmed'); ومن ثم حاول تدرج هذا السجل بحيث أن يكون الإسم متشابه : Insert Into Emp(EmpNo,Ename) Values(2222,'Ahmed'); ستجدة يعرض رسالة تفيد بـ : ORA-20000: Can't repetition the name أو يمكنك صناعه مثل هذا من داخل النموذج في حدثي Pre-Insert و Pre-Update كما هو موضح بالمثال المرفقشكراً Simble.zip تقديم بلاغ
بتاريخ: 25 يونيو 200817 سنة comment_132050 [يمين]من الصعب انك تحدد تكرار الاسم من عدمو لأنو فيه بعض الاسماء يتم ادخالها باكثر من طريقة فمثلا الاسم احمد ممكن يتم ادخال بطريقتين:1- احمد2- أحمد [/يمين]فعلاً أخي ، هذه المشكلة قد واجهتني من قبل ، وكان الحل الوحيد أن أصنع Function بسيط يقم بتغيير كل الحروف الي حروف موحدة !!! يعني مثلاً ، حرف ( أ، إ، آ، ا ) أختصرتهم الي حرف واحد وهو ( ا ) ... وحرف ( ه، ة ) ، أختصرتهم الي حرف ( ة ) مثلاً يعني !!! وعلشان معملش شرط If أنشت جدول يحتوي علي حقلين ، الأول يدعي الحرف FLD_CHAR ، والثاني يدعي الحرف الذي سيتم التحويل إلية FLD_RECHAR أو الحرف الذي سيتم إستبدالة به ، ومن ثم أجلب كل الحروف دفعة واحدة وأصنع Loop علية بحيث إذا وجد أي حرف مطابق في الحقل الاول يستبدلة بالحقل الثاني !!! علي العموم أنظر الي الكود التالي الذي يوضح الفكرة بوجة عام : 1- قم بإنشاء هذا الغرض علي مستوي Scott/Tiger : CREATE OR REPLACE FUNCTION REPLACE_STRING(IN_TEXT VARCHAR2)RETURN VARCHAR2 AS ID_LOOP NUMBER; ID_CHAR VARCHAR2(5); ID_RETURN VARCHAR(100); BEGIN ID_LOOP := 1; ID_RETURN := ''; WHILE ID_LOOP <= LENGTH(IN_TEXT) LOOP ID_CHAR := SUBSTR(IN_TEXT,ID_LOOP,1); IF(ID_CHAR = 'أ')THEN ID_CHAR := 'ا'; ELSIF(ID_CHAR = 'إ')THEN ID_CHAR := 'ا'; ELSIF(ID_CHAR = 'آ')THEN ID_CHAR := 'ا'; ELSIF(ID_CHAR = 'ة')THEN ID_CHAR := 'ه'; ELSIF(ID_CHAR = CHR(243))THEN ID_CHAR := ''; ELSIF(ID_CHAR = CHR(240))THEN ID_CHAR := ''; ELSIF(ID_CHAR = CHR(245))THEN ID_CHAR := ''; ELSIF(ID_CHAR = CHR(246))THEN ID_CHAR := ''; ELSIF(ID_CHAR = CHR(242))THEN ID_CHAR := ''; END IF; ID_RETURN := ID_RETURN || ID_CHAR; ID_LOOP := ID_LOOP + 1; END LOOP; RETURN ID_RETURN; END; / 2- يمكنك بعد ذلك إستدعاء هذا الـ Function من داخل الـ Trigger كما يلي : Create Or Replace Trigger TRG_EMP Before Insert Or Update On Emp For Each Row Declare ID_Count Number; Begin Select Count(*) Into ID_Count From Emp Where Replace_String(Ename) = Replace_String(:New.Ename); If(ID_Count > 0)Then Raise_Application_Error(-20000,'Can''t repetition the name'); End If; End; / وإليك جملة إستعلام أخري توضح ذلك : SELECT * FROM EMP WHERE REPLACE_STRING(ENAME) LIKE '%' || REPLACE_STRING('أحمد') || '%'; حيث يمكنك إستخدامها للبحث عن إسم موظف معين ، يعني مثلاً تبحث عن موظف إسمه ( أحمد / إحمد / احمد / آحمد ) ، ومهما كان المستخدم أخطأ يمكنك إستدعائة كما تشاء !!! ولو مثلاً لديك حقل يحتوي علي العديد من الأسماء المتلائمة كما يلي ( أحمد ، إبراهيم ، إسماعيل ، آدم ، مأمون ) ، إذا أحببت أن تبحث عن حرف ( ا ) مثلاً يمكنك إستخدام هذه الدالة لصناعة ما تشاء !! ملحوظة أخيرة ، الدالة ليست كاملة ، ولكن جاهزة للتطوير شكراً ، ويارب دايماً بالتوفيق للجميع ، تم تعديل 25 يونيو 200817 سنة بواسطة MMA تقديم بلاغ
بتاريخ: 25 يونيو 200817 سنة كاتب الموضوع comment_132053 شــــــــــــــــكرا للاخوان الاعزاء على الردود حفظكم الله من كل مكروه تقديم بلاغ
بتاريخ: 25 يونيو 200817 سنة comment_132054 السلام عليكم ورحمه الله وبركاته أولا لا شكر على واجب أخى فى الله قال رسول الله صلى الله عليه وسلممن كتم علما أجمـه الله بلجام من نار صدق رسول الله صلى الله عليه وسلمأخى الحبيب سأرفق مثالا ان شاء الله تعالى ولكنه على 9i لانى لا اعمل على 6i تقديم بلاغ
بتاريخ: 25 يونيو 200817 سنة comment_132062 الأخوه الاعزاء شكرا لكم جميعا على التعاون المثمر .... شكر خاص للأخ / مصطفى ... على اسلوب وطريقة عرض الحل والانتهاء بملف مرفق ... جزاك الله خيرا فيما يتعلق بمعالجة مشكلة الحروف العربية الفكرة جيدة ... لانك لم تغير البيانات المخزنة فى قاعدة البيانات وتركتها كما هى ... لان المستخدم للنظام يريد ان تظهر الحروف كما ادخلها مثل حرف الألف بالهمزة و ... وهكذا ...وبالطبع كما ذكرت يمكنك تطوير الدالة لاستبعاد المسافات الزائدة بين الاسماء واعتقد انه كان يمكن استخدام امر ال replace لاستبدال الحروف مباشرة بأمر واحد ... فلماذا فضلت استخدام ال loop وايضا امر ال char(xxx) xxxتوجد مشاركات سابقة بالمنتدى ... عن اسلوب التعامل مع الحروف العربية شكرا للجميع مرة اخرى مع التحية تقديم بلاغ
بتاريخ: 26 يونيو 200817 سنة كاتب الموضوع comment_132106 الاخوة الكرام شكرا على الردود .........ولكن هل من الممكن ان اجعل عند كتابة الاسم المكرر وعند التحريك للقيد القيمة الثانية من الجدول والتي كان تكون قيمة عنوان سكن الطالب يرفض الاوراكل هذا القيد وتظهر رسالة تؤكد وجود القيد تقديم بلاغ
بتاريخ: 28 يونيو 200817 سنة comment_132179 شكر خاص للأخ / مصطفى ... على اسلوب وطريقة عرض الحل والانتهاء بملف مرفق ... جزاك الله خيرا فيما يتعلق بمعالجة مشكلة الحروف العربية الفكرة جيدة ... لانك لم تغير البيانات المخزنة فى قاعدة البيانات وتركتها كما هى ... لان المستخدم للنظام يريد ان تظهر الحروف كما ادخلها مثل حرف الألف بالهمزة و ... وهكذا ...وبالطبع كما ذكرت يمكنك تطوير الدالة لاستبعاد المسافات الزائدة بين الاسماء واعتقد انه كان يمكن استخدام امر ال replace لاستبدال الحروف مباشرة بأمر واحد ... فلماذا فضلت استخدام ال loop وايضا امر ال char(xxx) xxx أشكرك كل الشكر أخ أمجدأنا أدرجت مثال أخي وليس الهدف منه هو إعطاء تمرين كامل !!!لكن علي العموم أنا أدرجت صنعت مثال أوضح بكثير ... حيث يحتوي المرفق علي ملفين ، الاول ( SQL_Oracle.sql ) والذي يمثل المثال بوجه عام ، والثاني ( Records.sql ) والذي يمثل مجموعة السجلاتأما بخصوص الأمر Chr فانا أستخدمته لإستخدام قيمة رقمية عشرية بدلاً من كتابة الحرف نفسة ، ومن رأيي أن هذا هو الأصح ، لأن قاعدة البيانات تتطلب التعريب علي الفور وإلا سيكون جلب الحروف خاطيء !!!اما بالنسبة للقيمة الرقمية فيمكننا جلبها بإستخدام الدالة Chr كما تعلمأمممممممممممممممعلي العموم انا صنعت مثال أفضل وأوضح ، أتمني أن تكون واضحة بالنسبة للجميع أفضل من السابقشكراً أخ Amgad علي متابعتك للجميع ، والله تستاهل كل خيرشكراًSimple.zip تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.