Oracle küresel geçici tablodan seçerek PHP ile sorun

1 Cevap php

Ben "ON DELETE ROWS yürütme" bir Oracle genel geçici tablo var.

Ben bir döngü var:

  • Genel geçici tablo eklemek
  • Küresel geçici tablosundan seçin (post-processing)
  • Tablo bir sonraki tekrara önce temizlenir, böylece tamamlama

Yerleştirme ($ stmt, OCI_DEFAULT) oci_execute çağrısı ile yapılır. Alım bir oci_fetch_all çağrısı (| OCI_ASSOC $ deyim, $ sonucunda, 0, -1, OCI_FETCHSTATEMENT_BY_ROW) yoluyla yapılır. Bundan sonra, bir taahhüt yapılır: oci_commit ().

Sorun alma bazen çalışır, bazen ben aşağıdaki hatalardan birini almak olduğunu:

  • ORA-08103: nesne artık mevcut
  • ORA-01410: geçersiz ROWID

Oturum daha önce takılı olduğu kayıtları "göremiyorum" gibi.

Eğer bu neden ne olabilir bir fikriniz var mı?

Teşekkürler.

1 Cevap

Eğer bağlantı havuzu kullanan? Eğer öyleyse o zaman farklı aramalar ayrı oturumda yürütme olmanız olabilir.

Daha iyi bir çözüm geçici tabloyu doldurur ve tek bir çağrı ayarlanmış bir resultset döndüren tek bir PL / SQL prosedür var olacaktır. Sonra daha iyi bir çözüm önerir: Hangi tamamen geçici tablo ortadan.

Geçici tabloların kullanılmasını talep Oracle birkaç durum vardır. Birçok şey iç içe geçmiş tablolar halinde saf SQL ya da belki toplu toplama ile çözülebilir. Eğer insert ve sonraki seçmek arasındaki geçici tablodaki verilerin ne gerçek manipülasyon yapmaktasınız?

edit

Geçici tablolar bir performans isabet var - satırları diske yazılır. PL / SQL koleksiyonları (oturum) bellekte kalır ve böylece daha hızlı. Tabii ki, onlar oturum bellekte çünkü onlar bağlantı havuzu ile olan sorunu çözmez.

Eğer birinde PHP 200.000 satırları geçmek istemiyorum çünkü bir yığın kadar veri için gereken nedeni baskın düştü mı? Ben size daha fazla yardımcı olursam ben biraz daha bağlam gerekir düşünüyorum.