2009-10-15 14 views
7

Niedawno zacząłem nową pozycję programisty i mam trochę problemów z PL/SQL. Używałem MS SQL przez wiele lat, ale znajduję PL/SQL nieco trudniejsze.Zmienne tabeli w Oracle PL/SQL?

Jedną z rzeczy, które robiłem przy pisaniu funkcji i procedur przechowywanych w MS SQL było umieszczanie powtórnych zestawów wyników w zmiennej tabeli, więc nie musiałbym ich zgłaszać podczas całej procedury.

coś takiego:

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

Patrzę na robienie czegoś podobnego w PL/SQL, ale nie jestem pewien, jak zacząć. Wszelkie pomysły, jeśli jest to możliwe?

+0

Oto podobne pytanie, które może pomóc, być może, dupe [http://stackoverflow.com/questions/670461/does-oracle-have-an-equivalent-of-mssqls-table-variables](http://technet/ stackoverflow.com/questions/670461/does-oracle-have-an-equivalent-of-mssqls-table-variables) – Gratzy

Odpowiedz

5

W Oracle w odróżnieniu od MS SQL kursory nie są uważane za diabła i należy ich unikać. Zwykle w Oracle będziesz korzystać z kursorów znacznie częściej niż w MS SQL. Oczywiście, jeśli możesz zrobić to tylko za pomocą SQL i bez kursora, który jest najlepszy, ale nie bój się testować i używać kursorów w Oracle. Zdobądź dobrą książkę o PL/SQL, to jest dobra http://www.amazon.com/Oracle-PL-SQL-Programming-4th/dp/0596009771. Post przez Gratzy to kolejna opcja, której możesz użyć. Więc zdobądź dobrą książkę, której możesz użyć, aby dowiedzieć się, kiedy użyć czegoś. PL/SQL jest bardzo bogatym środowiskiem w porównaniu do T-SQL. Chociaż ma on więcej krzywej uczenia się, gdy przekroczysz początkową krzywą, jest to naprawdę łatwe i pełne mocy. Poza tym jest dużo zabawy.

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; 

Spowoduje to utworzenie zagnieżdżonej tabeli zawierającej wartości z tabeli. Należy zauważyć, że tabela będzie poza zakresem na końcu anonimowego bloku, więc wszystko, co chcesz z tym zrobić, musi zostać wykonane wewnątrz tego bloku.

+1

+1 dla przykładu sql –

Powiązane problemy