الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

تراكر يعمل عمل Primary Key

Featured Replies

بتاريخ:



الاخوة والاخوات الاعزاء

طلب مني في مقابلة عمل ان اعمل تراجر يقوم بعمل برايمري كي للاسماء في قاعدة البيانات اي عند ادخال اسم موجود تظهر مسج تؤكد وجود الاسم في قاعدة البيانات

كيــــــــــــــــف يمكن عمل ذلك ياريت لو كل من يقدر يشارك ولو بالكلمة

بتاريخ:

السلام عليكم ورحمه الله وبركاته


ممكن تعمل كيرسور يشوف الاسماء الموجوده فى الحقل اللى انت عايز تدخل فيه القيمه الجديده

ويخزن القيمه فى متغير وبناء على ذلك يشوف تساوى القيمتين



وبعد كده ممكن تظهر الخطأ ده فى رسائل او تنبيه .....

بتاريخ:
  • كاتب الموضوع




شكـــــــــــــرا اخي ENG_HOSSAM_WALLY على الرد

ياريت لو ترفق كمثال فورمز تعمل على 6i اكون شاكر وممتن لك

بانتظارك اخي العزيز

بتاريخ:

الاخ العزيز 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;


جرب هاد الكود وان شاء الله بيكون صحيح

بتاريخ:

يمكنك إنشاء هذا الـ 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

بتاريخ:

[يمين]من الصعب انك تحدد تكرار الاسم من عدمو لأنو فيه بعض الاسماء يتم ادخالها باكثر من طريقة

فمثلا الاسم احمد ممكن يتم ادخال بطريقتين:

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('أحمد') || '%';



حيث يمكنك إستخدامها للبحث عن إسم موظف معين ، يعني مثلاً تبحث عن موظف إسمه ( أحمد / إحمد / احمد / آحمد ) ، ومهما كان المستخدم أخطأ يمكنك إستدعائة كما تشاء !!!



ولو مثلاً لديك حقل يحتوي علي العديد من الأسماء المتلائمة كما يلي ( أحمد ، إبراهيم ، إسماعيل ، آدم ، مأمون ) ، إذا أحببت أن تبحث عن حرف ( ا ) مثلاً يمكنك إستخدام هذه الدالة لصناعة ما تشاء !!




ملحوظة أخيرة ، الدالة ليست كاملة ، ولكن جاهزة للتطوير



شكراً ، ويارب دايماً بالتوفيق للجميع ،



تم تعديل بواسطة MMA

بتاريخ:
  • كاتب الموضوع



شــــــــــــــــكرا للاخوان الاعزاء على الردود حفظكم الله من كل مكروه

بتاريخ:

السلام عليكم ورحمه الله وبركاته






أولا لا شكر على واجب أخى فى الله

قال رسول الله صلى الله عليه وسلم


من كتم علما أجمـه الله بلجام من نار

صدق رسول الله صلى الله عليه وسلم


أخى الحبيب سأرفق مثالا ان شاء الله تعالى ولكنه على 9i لانى لا اعمل على 6i

بتاريخ:

الأخوه الاعزاء

شكرا لكم جميعا على التعاون المثمر ....

شكر خاص للأخ / مصطفى ... على اسلوب وطريقة عرض الحل والانتهاء بملف مرفق ... جزاك الله خيرا

فيما يتعلق بمعالجة مشكلة الحروف العربية الفكرة جيدة ... لانك لم تغير البيانات المخزنة فى قاعدة البيانات وتركتها كما هى ... لان المستخدم للنظام يريد ان تظهر الحروف كما ادخلها مثل حرف الألف بالهمزة و ... وهكذا ...
وبالطبع كما ذكرت يمكنك تطوير الدالة لاستبعاد المسافات الزائدة بين الاسماء
واعتقد انه كان يمكن استخدام امر ال replace لاستبدال الحروف مباشرة بأمر واحد ... فلماذا فضلت استخدام ال loop وايضا امر ال char(xxx) xxx

توجد مشاركات سابقة بالمنتدى ... عن اسلوب التعامل مع الحروف العربية

شكرا للجميع مرة اخرى

مع التحية

بتاريخ:
  • كاتب الموضوع




الاخوة الكرام شكرا على الردود .........ولكن هل من الممكن ان اجعل عند كتابة الاسم المكرر وعند التحريك للقيد القيمة الثانية من الجدول والتي كان تكون قيمة عنوان سكن الطالب يرفض الاوراكل هذا القيد وتظهر رسالة تؤكد وجود القيد

بتاريخ:
شكر خاص للأخ / مصطفى ... على اسلوب وطريقة عرض الحل والانتهاء بملف مرفق ... جزاك الله خيرا

فيما يتعلق بمعالجة مشكلة الحروف العربية الفكرة جيدة ... لانك لم تغير البيانات المخزنة فى قاعدة البيانات وتركتها كما هى ... لان المستخدم للنظام يريد ان تظهر الحروف كما ادخلها مثل حرف الألف بالهمزة و ... وهكذا ...
وبالطبع كما ذكرت يمكنك تطوير الدالة لاستبعاد المسافات الزائدة بين الاسماء
واعتقد انه كان يمكن استخدام امر ال replace لاستبدال الحروف مباشرة بأمر واحد ... فلماذا فضلت استخدام ال loop وايضا امر ال char(xxx) xxx


أشكرك كل الشكر أخ أمجد

أنا أدرجت مثال أخي وليس الهدف منه هو إعطاء تمرين كامل !!!

لكن علي العموم أنا أدرجت صنعت مثال أوضح بكثير ... حيث يحتوي المرفق علي ملفين ، الاول ( SQL_Oracle.sql ) والذي يمثل المثال بوجه عام ، والثاني ( Records.sql ) والذي يمثل مجموعة السجلات


أما بخصوص الأمر Chr فانا أستخدمته لإستخدام قيمة رقمية عشرية بدلاً من كتابة الحرف نفسة ، ومن رأيي أن هذا هو الأصح ، لأن قاعدة البيانات تتطلب التعريب علي الفور وإلا سيكون جلب الحروف خاطيء !!!

اما بالنسبة للقيمة الرقمية فيمكننا جلبها بإستخدام الدالة Chr كما تعلم

أممممممممممممممم

علي العموم انا صنعت مثال أفضل وأوضح ، أتمني أن تكون واضحة بالنسبة للجميع أفضل من السابق


شكراً أخ Amgad علي متابعتك للجميع ، والله تستاهل كل خير

شكراً

Simple.zip

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.