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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

بدي كد تغيير رقم ال اي دي في الجدول الرئيسي والجداول الفرعية المرتبطة معه


5 رد (ردود) على هذا الموضوع

#1 mariam1980

mariam1980

    مشترك

  • الأعضــاء
  • 53 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 04 August 2007 - 10:23 PM

تحية طيبة اخواني


لدي قاعدة معلومات اريد فيها جدول رئيسي وفيها جدولين فرعيين مرتبطات باجدول الرئيسي اريد تغيرر رقم ال id بتاع الجدول الرئيسي والجداول الفرعية يجب ان تتغير حتى تبقى محتفظة بالارتباط
يعني كذلك

احمد محمد رقم التسلسل بتاعه 120
ويدرس في قسم البايو وهذه في جدول الاقسام ايضا با الرقم 120
ولديه سيارتين ايضا بالجدول الاخر تحت رقم 120
وكلها مرتبطة بالجدول الرئيسي

اريد تغيير رقم 120 مثلا الى رقم 9599 ولكن انا تكلمت عن احمد فقط لاكن قاعدة معلوماتي فيها ما يقارب 300 الف شخص واريد تغيير رقم الاي دي بتاعهم ولكن اريدها كلها تكون بتسلسل جديد يعني يبدي التسلسل من 20000 وينتهي ب 320000
وجميع الجداول الفرعية يجب ان تتغير معه
فهل يوجد مثل هذا الحل ام لا ------ وشكرا
بانتظار اجابتكم

#2 Amgad

Amgad

    مشرف عام ومشرف قسم تحليل النظم

  • الفريق الإداري
  • 4,559 مشاركة
  • الاسم الأول:امجد
  • اسم العائلة:حلمي
  • البـلـد: Country Flag
  • المنصب الحالي:Business Systems Analyst at al Fanar Co. Riyadh KSA

تاريخ المشاركة 05 August 2007 - 04:06 PM

يمكنك انشاء trigger على مستوى الجدول الذي يحتوى المفتاح الرئيسي primary key
وعند التعديل فى مفتاح الجدول الرئيسي يتم التعديل مباشرة فى الجداول الاخرى التى تحتوى المفتاح الاجنبي Foregin key
اليك هذا المثال على جدول الemp , dept مع المستخدم scott

انشئ هذا الtrigger اولا 

SQL> create  or  replace  trigger  t_dept  before  update   of  deptno  on   dept  for  each  row
  2  begin
  3  update  emp  set  deptno =  :new.deptno   where  emp.deptno = :old.deptno;
  4  end;
  5  /

Trigger created.
------------------
SQL> select * from emp;

	 EMPNO ENAME	  JOB	MGR HIREDATE	 SAL	   COMM	 DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
	  7369 SMITH	CLERK		   7902   02-NOV-04	800	 20
	  7499 ALLEN	  SALESMAN	  7698   20-FEB-81	   1600	300	 30
	  8888 amgad	 analyst		   7566   01-JAN-07	   1000	1	 88
-------------
SQL> select * from dept;

	DEPTNO DNAME		  LOC
---------- -------------- -------------
		10 ACCOUNTING	   NEW YORK
		20 RESEARCH		 DALLAS
		30 SALES		  CHICAGO
		40 OPERATIONS		  BOSTON
		88 aaaaa			 ccccc
-----------------------------
نفذ امر تعديل كود الادارة 
SQL> update dept set deptno = 99 where deptno=88;
1 row updated.
--------------------
الجداول بعد التعديل 
SQL> select * from dept;

	DEPTNO DNAME		  LOC
---------- -------------- -------------
		10 ACCOUNTING					 NEW YORK
		20 RESEARCH		 DALLAS
		30 SALES		  CHICAGO
		40 OPERATIONS		  BOSTON
		99 aaaaa			 ccccc
-------------
SQL> select * from emp;

	 EMPNO ENAME	  JOB	MGR HIREDATE	 SAL	   COMM	 DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
	  7369 SMITH	CLERK		   7902   02-NOV-04	800	 20
	  7499 ALLEN	  SALESMAN	  7698   20-FEB-81	   1600	300	 30
	  8888 amgad	 analyst	7566   01-JAN-07				 1000	1	 99
-----------------

فكرة الحل : من مشاركة سابقه بالمنتدى للأخ / جمال

لا إله إلا الله الحليم الكريم
لا اله إلا الله العلى العظيم
لا اله إلا الله رب السماوات السبع و رب العرش العظيم
‏اللهم ارزقني قبل الموت توبة وعند الموت شهادة وبعد الموت جنة
اللهم ارزقني حسن الخاتمة
اللهم هون علينا سكرات الموت ... ونور علينا قبورنا
اللهم ارزقني الموت وأنا ساجد لك يا ارحم الراحمين
اللهم ثبتني عند سؤال الملكين
اللهم اجعل قبري روضة من رياض الجنة ولا تجعله حفرة من حفر النار
اللهم اني اعوذ بك من فتن الدنيا
اللهم ارحم ابائنا وامهاتنا واغفر لهما وتجاوز عن سيئاتهما وادخلهم فسيح جناتك ... والحقنا بهما يا رب العالمين
اللهم ارحم موتانا وموتى المسلمين واشفي مرضانا ومرضى المسلمين
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الأحياء منهم والأموات
وبارك اللهم على سيدنا محمد صلى الله عليه وسلم
اللهم آمين ... اللهم آمين ... اللهم آمين


....


#3 mariam1980

mariam1980

    مشترك

  • الأعضــاء
  • 53 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 16 September 2007 - 12:48 AM

اولا اشكرك على الاجابة شكرا جزيلا جدا جدا
وثانيا : كلامك صحيح ولكن انا اريد ان اغير اسماء يبلغ تعدادهم 500000 خمسمائة الف قيد كيف تكون العملية
ولك الشكر يااخي وانا اسفة على الازعاج

تم التعديل بواسطة mariam1980, 16 September 2007 - 12:49 AM.


#4 Amgad

Amgad

    مشرف عام ومشرف قسم تحليل النظم

  • الفريق الإداري
  • 4,559 مشاركة
  • الاسم الأول:امجد
  • اسم العائلة:حلمي
  • البـلـد: Country Flag
  • المنصب الحالي:Business Systems Analyst at al Fanar Co. Riyadh KSA

تاريخ المشاركة 16 September 2007 - 01:46 AM

- السؤال غير واضح ؟

اريد ان اغير اسماء يبلغ تعدادهم 500000 خمسمائة الف



- هل الاسم يعتبر مفتاح الجدول ؟؟
- يجب التأكد من ان الاسم الجديد .. غير مسجل من قبل كمفتاح اساسى

التعديل يتم سواء من خلال اوامر sql مباشرة
أو اوامر Pl-sql داخل الفورم مثلا .. باستخدامloop + cursor بافتراض معرفة الاسماء الجديده والاسماء الحالية

بمعنى اخر .. يتم تنفيذ التعديل بالجدول .. مع استخدام أمر ال update ..

---
أو
هل السؤال عن تغيير رقم الموظف أو ال id ل500000 موظف ؟ بانشاء مسلسل جديد لهم .. ؟

لا إله إلا الله الحليم الكريم
لا اله إلا الله العلى العظيم
لا اله إلا الله رب السماوات السبع و رب العرش العظيم
‏اللهم ارزقني قبل الموت توبة وعند الموت شهادة وبعد الموت جنة
اللهم ارزقني حسن الخاتمة
اللهم هون علينا سكرات الموت ... ونور علينا قبورنا
اللهم ارزقني الموت وأنا ساجد لك يا ارحم الراحمين
اللهم ثبتني عند سؤال الملكين
اللهم اجعل قبري روضة من رياض الجنة ولا تجعله حفرة من حفر النار
اللهم اني اعوذ بك من فتن الدنيا
اللهم ارحم ابائنا وامهاتنا واغفر لهما وتجاوز عن سيئاتهما وادخلهم فسيح جناتك ... والحقنا بهما يا رب العالمين
اللهم ارحم موتانا وموتى المسلمين واشفي مرضانا ومرضى المسلمين
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الأحياء منهم والأموات
وبارك اللهم على سيدنا محمد صلى الله عليه وسلم
اللهم آمين ... اللهم آمين ... اللهم آمين


....


#5 mariam1980

mariam1980

    مشترك

  • الأعضــاء
  • 53 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 22 September 2007 - 12:13 AM

[u]

- السؤال غير واضح ؟

اريد ان اغير اسماء يبلغ تعدادهم 500000 خمسمائة الف



- هل الاسم يعتبر مفتاح الجدول ؟؟
- يجب التأكد من ان الاسم الجديد .. غير مسجل من قبل كمفتاح اساسى

التعديل يتم سواء من خلال اوامر sql مباشرة
أو اوامر Pl-sql داخل الفورم مثلا .. باستخدامloop + cursor بافتراض معرفة الاسماء الجديده والاسماء الحالية

بمعنى اخر .. يتم تنفيذ التعديل بالجدول .. مع استخدام أمر ال update ..

---
أو
هل السؤال عن تغيير رقم الموظف أو ال id ل500000 موظف ؟ بانشاء مسلسل جديد لهم .. ؟



تحية طيبة واشكررررررك على وقفتك معي واجابتي
السؤال كالتالي

لدي جدول كالتالي

id_no name work id_dept
--------- ----------- ---------- -------------
1543 mariam tech. 5647


والجدول الثاني كالتالي

id_dept dept school. note
----------- -------- ----------- --------
5647 info hgej ljlkjkl
5647 fdfd hvcf ljlkjkl
5647 ierr fdfdf ljlkjkl
5647 dfdf hbvj ljlkjkl



الارتباط حاصل من خلال ال اي دي ديبت
id_dept
اريد تغيير رقم ال
id_dept
في الجدول الفرعي
ليكون مشابها لرقم
id_no
الذي في الجدول الرئيسي

حتى يمكنني اعادة ارتباط الجدول الفرعي عبر ال
id_no
علما ان كمية القيود الموجودة كبيرة جدا جدا حيث تبلغ ما يقارب ال
500000
الف قيد
راجين مساعدتي


انا فكرت واقترحت على نفسي ان افتتح جدول جديد يرتبط مع ال الجدول الرئيسي واكتب كد يقوم بنقل المعلومات من الجدول الفرعي الى الجدول الثاني ويعطي رقم اي دي مشابه للجدول الرئيسي في الجدول الجديد ويلصق المعلومات فيه
والامر اليكم فكرو معي ولكن اكتبو لي الاكواد مع ذلك لان اني بعد وقف تفكيري

#6 mom7800

mom7800

    مشترك

  • الأعضــاء
  • 73 مشاركة

تاريخ المشاركة 27 September 2007 - 10:29 AM

بسم الله الرحمن الرحيم
جربى تعملى
database trigger

الاول
create or replace trigger set_null
before update  on dept
for each row
begin
update emp
set emp.deptno = null 
where emp.deptno= :old.deptno;
end;
/

الثانى
CREATE OR REPLACE TRIGGER change_value
after update on dept
for each row
begin
 update emp
set emp.deptno  = :new.deptno
 where emp.deptno is null ;
end;
/
مع تغيير اسماء الاعمدة بالموجودة عندك
عن تعديل فى
pk in master
هيعدل
in detail