2015-02-22 13 views
7

Staram się zrobić coś takiego PoniżejWybierz w tabeli tymczasowej w Oracle

select * into temp from (select * from student); 

Daje mi następujący błąd,

ERROR at line 1: 
ORA-00905: missing keyword 

W moim prawdziwym przykład podzapytania (select * od studenta) jest bardziej złożony.

Chcę użyć tego w procedurze przechowywanej, więc nie chcę tworzyć samej tabeli. Po prostu chcę, aby mój kod był bardziej czytelny przy użyciu tabeli tymczasowej.

+2

Głosowałem tę odpowiedź, bo coś takiego jest możliwe w SQL Server: Aby wybrać zestaw wyników do tabeli, która nie istnieje, tworząc tabelę tymczasową. E.G> WYBIERZ * NA #TEMP OD STUDENTA –

+0

Nie "wybierasz do' tabeli w Oracle, 'wstawiasz do niej'. Konstrukcja 'select into' służy do zapełniania zmiennej. To niefortunne, że inni dostawcy mają podobnie wyglądającą składnię dla czegoś niezwiązanego ze sobą. –

Odpowiedz

2

Nie "wybierasz" do tabeli tymczasowej. Jeśli chcesz wstawić do tabeli temp z wyników select:

insert into temp 
select * from student; 
+1

BŁĄD na linii 1: ORA-00942: tabela lub widok nie istnieje – Sait

+3

Musisz najpierw utworzyć tabelę tymczasową, tak jak każdą inną tabelę w wyroczni. Jeśli chcesz utworzyć tabelę na podstawie zaznaczenia, użyj "utwórz tabelę xxx jako wybierz ...", ale można to zrobić tylko raz. – OldProgrammer

+1

Nie chcę mieć stołu. Kosztowanie jest kosztowne, aby utworzyć samą tabelę dla każdej zmiennej tymczasowej, której potrzebuję. Po prostu chcę mieć coś dynamicznego, które mogę wypełnić w drodze w procedurze przechowywanej. A po zakończeniu procedury składowanej, pozbądź się jej. Ale nie jestem pewien, czy jest to możliwe, czy nie w Oracle. – Sait

5

Więc może trzeba zrobić coś takiego:

declare 
    type t_temp_storage is table of student%rowtype; 
    my_temp_storage t_temp_storage; 
begin 
    select * bulk collect into my_temp_storage from student; 
    for i in 1..my_temp_storage.count 
    loop 
    dbms_output.put_line('here I am '||my_temp_storage(i).stuid); 
    end loop; 
end; 
5

Jeżeli temp tabela nie istnieje, trzeba aby go stworzyć.

CREATE TABLE temp as 
    SELECT * FROM student; 
Powiązane problemy