SORU
24 EYLÜL 2008, ÇARŞAMBA


Devre dışı Oracle tüm tablo kısıtlamaları

Nasıl tek bir komut ile Oracle sınırlar tablo devre dışı bırakabilir miyim? Bu da tüm tablolar için tek bir tablo, tablolar listesi, ya da olabilir.

CEVAP
25 EYLÜL 2008, PERŞEMBE


Daha iyi geçici biriktirme dosyaları yazılı önlemek için. PL/SQL bloğu kullanın. SQL*Plus bu çalıştırmak veya bir paket veya prosedür bu işi koyabilirsiniz. Bu USER_TABLES katılmak görünüm kısıtlamaları önlemek için vardır.

Gerçekten tüm kısıtlamaları (NULL, birincil anahtarlar, vb dahil olmak üzere) devre dışı bırakmak istiyorum pek olası değil. NEREDE yan constraint_type koyarak düşünmelisin.

BEGIN
  FOR c IN
  (SELECT c.owner, c.table_name, c.constraint_name
   FROM user_constraints c, user_tables t
   WHERE c.table_name = t.table_name
   AND c.status = 'ENABLED'
   ORDER BY c.constraint_type DESC)
  LOOP
    dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" disable constraint ' || c.constraint_name);
  END LOOP;
END;
/

Yine kısıtlamalar etkinleştirme biraz tricker - yabancı anahtar kısıtlaması onları referans için önce birincil anahtar kısıtlamaları etkinleştirmeniz gerekir. Bu bir emirdir kullanarak constraint_type TARAFINDAN yapılabilir. '' = Birincil anahtar, 'R' = yabancı anahtar. P

BEGIN
  FOR c IN
  (SELECT c.owner, c.table_name, c.constraint_name
   FROM user_constraints c, user_tables t
   WHERE c.table_name = t.table_name
   AND c.status = 'DISABLED'
   ORDER BY c.constraint_type)
  LOOP
    dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" enable constraint ' || c.constraint_name);
  END LOOP;
END;
/

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hudson Music

    Hudson Music

    13 Mart 2007
  • Randall P Studios

    Randall P St

    27 AĞUSTOS 2009
  • Skrillex

    Skrillex

    6 NİSAN 2010