SQL Server saklı yordamları yazmak için yönetim tarafından teşvik C # geliştirici genellikle böyle prosedürler üretmek
create table #t1 (...);
insert into #t1 Select ... from table_a where ...;
insert into #t1 Select ... from table_b where ...;
update #t1 Set ... = ... where ...
Select * from #t1;
Tek ifade oldukça basittir ve bu yöntem onları doğru sonuçlar üretmelerini sağlar.
Çoğu zaman görevim bu prosedürleri Oracle'a taşımaktır.
Aşağıdaki gerçeklerle yüzleşelim.
- SQL Server'daki farklı geçici tablolara tamamen bağımsızdır ve herhangi bir geçici yapıya sahip olabilir.
- Oracle global ortak tabloları global nesnelerdir ve hepsi aynı tablo yapısını paylaşır. Herhangi bir yerde kullanılırken bu yapıyı değiştirmek imkansızdır.
Bir Oracle dba'dan öğrendiğim şeylerden biri, mümkün olduğunda geçici tabloların kullanımından kaçınmaktı. SQL sunucusundaki performans bile bu tür değişikliklerden yararlanır.
Ayrı uçları sendikalarla değiştirin
En basit durumda, yukarıdaki gibi bir şeye dönüştürülebilir
select case when ... then ... end, ... from table_a where ...
union
select case when ... then ... end, ... from table_b where ...
Order by ...;
Fonksiyonların kullanımı
Hem skaler fonksiyonlar hem de tablo değerli fonksiyonlar, prosedürünüzü yukarıdaki formun tek bir sorgusuna dönüştürmeye yardımcı olabilir.
Ortak Tablo ifadeleri aka Alt Sorgu Faktoringi
Subquery Factoring, Oracle'ın geçici tablolardan kaçınmak için sunduğu en iyi yöntemdir. Bunu kullanarak SQL Server'ın Oracle'a geçişi oldukça kolaydır. Bu, SQL Server 2005 ve üstünü gerektirir.
Bu değişiklikler SQL Server sürümünü geliştirir ve çoğu durumda geçişi doğrudan yapar. Diğer durumlarda, küresel geçici tablolara başvurmak, geçişi sınırlı bir zamanda yapmayı mümkün kılar, ancak daha az tatmin edicidir.
Oracle'da genel geçici tabloların kullanılmasını önlemenin başka yolları var mı?