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

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


mariam1980

Recommended Posts

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


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

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

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

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

يمكنك انشاء 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
-----------------



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

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

  • بعد 1 شهر...

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

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

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

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


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

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

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

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


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

اريد ان اغير اسماء يبلغ تعدادهم 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
الف قيد
راجين مساعدتي


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

بسم الله الرحمن الرحيم
جربى تعملى
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

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

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

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

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

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

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

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

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