Oldukça karmaşık bir SELECT sorgusu olduğu ortaya çeviriyor ne üzerinde çalışıyor Im. Ben birkaç hiyerarşik sorguları tek bir SELECT iç içe olmak ve onu yönetmek için oldukça zor oluyor.
Tamam, ama neden bir saklı yordam? Yerine neden bir görünüm oluşturmak değil mi?
Ben inline Defa birden fazla yerde yürütülmesi gereken birkaç yerde çalıştırıyorum, bu yüzden bir saklı yordam başında bir kez bu yürütmek ve sonra gerektiği gibi sonuçlar üzerinde bazı yineleme yapmak için makul bir fikir gibi görünüyor .
Yine - bir görünüm için mükemmel bir kullanım durumda.
I'm wondering if there are any reasons why I should not, or could not, execute an Oracle Stored Procedure, called via my PHP code, and return as an OUT parameter the resultset.
If there aren't any technical problems with this, any comments on whether it is good or bad practice?
Eh, ben bir dini savaş başlatmak istemiyorum, ve ben sizin durumunuza uygun karşı argümanları önermek istemiyorum. Ama burada gider:
- Ben saklı işlemleri önlemek eğilimindedir bir nedeni taşınabilirlik - Bununla Ben çoğunlukla veritabanı taşınabilirliği demek. Saklı yordam dilleri dbs genelinde herkesin bildiği, taşınamaz, ve yerleşik Oracle paketleri gibi kütüphanelerini bu açıdan kötü şeyler yapmak.
- saklanan prosedürler veritabanı sunucusundan bazı ek işlem gücü alır. Bu zor bir bütün olarak uygulamayı ölçekli yapar: db sunucu kapasitesi nedeniyle saklı prosedürleri tükenirse, ve Harware yükseltme hatta çünkü ekstra bir kehanet yazılım lisansını satın almanız gerekir, ben mutlu olmaz karavan, ben işlem yapmak yerine ucuz webserver / php kutuları satın alabilirdim özellikle.
Ben saklı yordamlar için giderdim nedenleri:
- dil taşınabilirlik. Veritabanı taşınabilirliği çok bir sorun değil, ancak birden çok uygulama arasında mantığını yeniden istiyor, ya da farklı dillerde kod yeteneği var, o saklanan prosedürler dil belirli bir veritabanı başlatma kodu yazmadan sizi kurtarabilir yoksa.
- Karmaşık izni senaryolar. Eğer saklı yordam definer veya sahibi ayrıcalıkları ile yordamı çalıştırabilirsiniz beri saklanan prosedürleri, size izin uan ekstra seviyesini verir. Bazen bu bir kullanıcı bazı tablolar ile çalışmak gerekiyor sorunları çözer, ama onları doğrudan erişim izni edilemez.
- rountrips tasarrufu: Bir saklı prosedürleri koyarak, karmaşık, multistatement işlemleri ile uğraşmak zorunda eğer uygulaması ve db arasında rountrips kaydeder, saklı yordamı çalıştırmak için gereken tek rountrip var çünkü. bazen bu size daha fazla performans alabilirsiniz.
Tüm bu senaryolarda, ben hala saklanan prosedürleri tüm usul mantığı koymak değil öneririm olduğunu tekrar vurgulamak istiyorum. veritabanları veri depolama ve alma konusunda en iyi olan, php / java / perl gibi dilleri / zehir almak işlenmesi daha iyidir.