2009-10-15 29 views
7

Yakın zamanda geliştirici olarak yeni bir pozisyon başlattım ve PL/SQL ile ilgili bir sorun yaşıyorum. MS SQL'i birkaç yıldır kullandım ama PL/SQL'i biraz daha zorlayıcı buluyorum. MS SQL fonksiyonları ve saklı yordamlar yazarken yapmak için kullanılan şeylerdenTablo Değişkenleri?

biri benim prosedürü boyunca onları yeniden sorgulamak zorunda değildir bu yüzden bir tablo değişkeni reoccuring sonuç kümelerini koymak oldu. Böyle

şey:

declare @badPeople table(recordPointer int) 
insert into @badPeople 
select BP_Record_Pointer 
from People 
where BP_Bad = 1 

Ben PL/SQL benzer bir şey yapıyor bakıyorum ama nasıl başlayacağınızı tam emin değilim. Bu mümkün olsa bile herhangi bir fikir?

+0

İşte benzer bir soru belki bir dupe yardımcı olabilir [http://stackoverflow.com/questions/670461/does-oracle-have-an-equivalent-of-mssqls-table-variables](http:// stackoverflow.com/questions/670461/does-oracle-have-an-equivalent-of-mssqls-table-variables) örnek SQL – Gratzy

cevap

5

Oracle MS SQL imleç aksine şeytan ve önlemek için bir şey kabul edilmez. Yani genellikle Oracle'da MS SQL'de olduğundan çok daha fazla imleç kullanırsınız. Tabii ki bunu sadece SQL ile yapabilir ve en iyi olan imleci kullanamazsınız, ancak Oracle'da imleçleri test etmek ve kullanmaktan korkmayın. PL/SQL üzerinde iyi bir kitap alın, bu iyi bir http://www.amazon.com/Oracle-PL-SQL-Programming-4th/dp/0596009771. Gratzy tarafından gönderilen yazı, kullanabileceğiniz başka bir seçenektir. Ne zaman kullanacağınızı anlamak için kullanabileceğiniz iyi bir kitap alın. PL/SQL, T-SQL ile karşılaştırıldığında çok zengin bir ortamdır. İlk eğriyi geçtikten sonra bir öğrenme eğrisi daha fazla olsa da, gerçekten kolay ve güçlü bir dildir. Ve bunun üzerine çok eğlenceli.

10
declare 
    type t_number is table of number; 
    v_numbers t_number; 
begin 
    select BP_Record_Pointer 
    bulk collect into v_numbers 
    from People 
    where BP_Bad = 1; 
end; 

Bu, tablonuzdaki değerleri içeren bir yuvalanmış tablo oluşturur. Tablonun anonim bloğun sonunda kapsam dışı kalacağı unutulmamalıdır, bu yüzden onunla yapmak istediğiniz her şey bu bloğun içinde yapılmalıdır.

+1

+ 1 –