كيفية تغيير طاولة على iseries التي لها قيود؟ الحصول على "ملف مستخدم." خطأ

StackOverflow https://stackoverflow.com/questions/3588615

  •  01-10-2019
  •  | 
  •  

سؤال

لدي طاولة على iseries (IBM-I/AS400) التي لها بعض القيود. تم إنشاء الجدول باستخدام SQL مثل ذلك ، مع حفنة من المفاتيح الخارجية التي تربط من الجداول الأخرى إلى هذا الجدول (لقد تم التغلب على SQL الفعلي هنا):

CREATE TABLE ABCLIB.ABCDE (
  DEIDN INTEGER NOT NULL WITH DEFAULT, 
  DETTL VARGRAPHIC (50) ALLOCATE(25), 
  DETYP CHAR (1) NOT NULL WITH DEFAULT);

ALTER TABLE ABCLIB.ABCDE ADD PRIMARY KEY (DEIDN);

ALTER TABLE ABCLIB.ABCFG ADD FOREIGN KEY (FGDEK) 
  REFERENCES ABCLIB.ABCDE (DEIDN) 
  ON DELETE RESTRICT ON UPDATE RESTRICT;

ALTER TABLE ABCLIB.ABCHI ADD FOREIGN KEY (HIDEK) 
  REFERENCES ABCLIB.ABCDE (DEIDN) 
  ON DELETE RESTRICT ON UPDATE RESTRICT;

الآن ، لاحقًا ، سأحتاج إلى تغيير هذا الجدول لإضافة حقل:

ALTER TABLE ABCLIB.ABCDE ADD COLUMN DEICN VARGRAPHIC (100) ALLOCATE(50)     

التي تؤدي إلى هذه الرسالة:

Row or object ABCDE in ABCLIB type *FILE in use.

لقد راجعت وبالتأكيد لا توجد أقفال كائن على هذا الجدول في هذا الوقت. عندما أتحقق من Jobblog ، أرى هذا:

Constraint cannot be removed from file Q_AT000000.    
Constraint(s) not removed from file Q_AT000000.       
File ABCDE in ABCLIB not changed.                 
Row or object ABCDE in ABCLIB type *FILE in use.  

الآن ، يمكنني بالطبع إزالة القيود المعنية وإعادة إضافةها ، لكنني أشعر أن هذا لا ينبغي أن يكون ضروريًا. العمود الذي أضيفه لا علاقة له بالقيود. أعتقد أن هذا ربما يكون نتيجة لحقيقة أن OS400 (i5/OS) لا يغير حقًا الجدول الحالي ولكن بدلاً من ذلك يقوم بإنشاء جدول جديد ونسخ البيانات ، وربما يكون هذا هو المكان الذي يأتي فيه الألم.

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

(الإجابات التي لا تتضمن القيام بذلك مع SQL أو تشير إلى إنشاء الجدول بشكل مختلف في المقام الأول ليست مفيدة لأنها غير قابلة للتطبيق هنا ...)

هل كانت مفيدة؟

المحلول

الجواب هو: فاتني حقيقة أن هناك قفلًا على أحد الجداول التي كان لها مفتاح خارجي يشير إلى هذا الجدول. أو ، ضع بصراحة: أنا أحمق!

نصائح أخرى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top