الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكله عند ادخال البيانات عند جدول له 2 primary key

بدأه bdb في 27 أبريل 2011 · 5 رد · 2,416 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليك

ممكن لو سمحت خبراء واستاذتنا يسعدوني بحل تلك المشكلة

انا مبتدئ جدااا بعالم اوراكل وجهتني مشكله عند ادخال البيانات عند جدول له 2 primary key وهو ..

create table departments

( code number(10) ,

name varchar2(100) constraint departments_name_nn not null,

location varchar2(100) ,

remark varchar2(100) ,

fac_code number(10) ,

constraint dep_code_pk primary key (code,fac_code),

constraint dep_fac_code_fk foreign key (fac_code) references faculties(code)

)

;

عن طريق الامر

insert into departments ( code , name , fac_code )

values ( dep_seq.nextval , 'Trading' ,3 );

يرفض وتظهر لي مشكله

Error starting at line 1 in command:

insert into departments ( code , name , fac_code )

values ( dep_seq.nextval , 'Trading' ,3 )

Error report:

SQL Error: ORA-02291: تم إنتهاك قيد التكامل (X.DEP_FAC_CODE_FK) ـ مفتاح العنصر الرئيسي غير موجود

02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"

*Cause: A foreign key value has no matching primary key value.

*Action: Delete the foreign key or add a matching primary key.

اين هي المشكلة وما هو الحل ، وكيف عمل sequence بدون تكرار الكود وكيف عمل منها رقم تسلسلي مكون من عدد ارقام مثل بطاقة الرقم القومي لا يتكرر ابدا وشكرا جدااااااااااااااااااااااا

والسلام بكل سلام

#2

رسالة الخطأ تدل انك لم تقم بادخال كلية بالرقم 3 فى جدول faculties

تأكد من وجودها اولا ثم حاول اعادة تنفيذ كود الادخال مرة اخرى

بالتوفيق

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 27 أبريل 2011 في 19:31


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#3

جزاك الله خيرا كثيرا نجحت

ممكن لو سمحت تعلمبي كيف عمل sequence بدون تكرار الكود وكيف عمل منها رقم تسلسلي مكون من عدد ارقام مثل 8 او اكثر مثل بطاقة الرقم القومي لا يتكرر ابدا

وما هو الكود الذي اذا اضيف على الامر sequence لعدم تكرار القيم

تم تعديل هذه المشاركة بواسطة bdb في 27 أبريل 2011 في 20:10

#4

والله انا لي زمن كبير جدا بعيد عن اوراكل

ولذلك نسيت هذه الامور

فحاول القراءة من الكتب افضل وانا لو متذكر والله ما بتأخر عنك

تمنياتى لك بالتوفيق والنجاح دائما


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#5

الله يكرمك كريم واصيل متشكر جداااااااااااااااااااااا وجزاك الله خيرا كثيرا مباركا فيهالي يوم الدين وباقي اساتذه هذا الصرح الكبير

تم تعديل هذه المشاركة بواسطة bdb في 27 أبريل 2011 في 20:43

#6

لإنشاء Sequence بقاعدة البيانات بإمكانك إستخدام الأمر التالي :

CREATE SEQUENCE PERSONAL_NO_SEQ
START WITH 1000000000
INCREMENT BY 1
MINVALUE 1000000000
MAXVALUE 9999999999
NOCACHE 
NOCYCLE 
NOORDER 
/

ومثلاً عندك الجدول التالي :

CREATE TABLE PERSONALS
(
  PERSONAL_NO    NUMBER,
  PERSONAL_NAME  VARCHAR2(250),
  BIRTH_DATE     DATE
)
/


ALTER TABLE PERSONALS ADD (
  CONSTRAINT PERSONALS_PK
  PRIMARY KEY
  (PERSONAL_NO));

تقوم بإنشاء الـTRIGGER كالتالي :

CREATE OR REPLACE TRIGGER TRIG_PERSONAL_NO
BEFORE INSERT
ON PERSONALS 
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
    tmpVar NUMBER;
BEGIN
   tmpVar := 0;
   SELECT PERSONAL_NO_SEQ.NEXTVAL INTO tmpVar FROM dual;
   :NEW.PERSONAL_NO := TMPVAR;
END TRIG_PERSONAL_NO;
/

ومن ثم تقوم بإدخال البيانات بالجدول كالتالي :

Insert into PERSONALS
   (PERSONAL_NO, PERSONAL_NAME, BIRTH_DATE)
 Values
   (0, 'IBRAHIM', TO_DATE('02/05/1985', 'MM/DD/YYYY'));

Insert into PERSONALS
   (PERSONAL_NO, PERSONAL_NAME, BIRTH_DATE)
 Values
   (0, 'OSMAN', TO_DATE('02/05/1985', 'MM/DD/YYYY'));

والآن إستعرض المخرجات كالتالي :

PERSONAL_NO PERSONAL_NAME BIRTH_DATE

1000000000 IBRAHIM 1985/02/05

1000000001 OSMAN 1985/02/05

تم تعديل هذه المشاركة بواسطة IGBSpeed في 8 مايو 2011 في 12:19

مواضيع مشابهة