2015-02-22 23 views
7

che sto cercando di fare qualcosa di simile alla seguente,Selezionate in una tabella temporanea in Oracle

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

Mi dà il seguente errore,

ERROR at line 1: 
ORA-00905: missing keyword 

Nel mio esempio reale subquery (select * dallo studente) è più complesso.

Voglio usarlo in una stored procedure, quindi non voglio creare il tavolo stesso. Voglio solo rendere il mio codice più leggibile usando una tabella temporanea.

+2

Ho votato questa risposta perché in SQL Server è possibile qualcosa di simile: Per selezionare un set di risultati in una tabella che non esiste, creando così una tabella temporanea. E.G> SELEZIONA * INTO #TEMP DALLO STUDENTE –

+0

Non si "seleziona" una tabella in Oracle, la si inserisce dentro. La costruzione 'select into' è per popolare una variabile. È sfortunato che altri venditori abbiano una sintassi simile all'aspetto di qualcosa che non è correlato. –

risposta

2

Non si "seleziona" in una tabella temporanea. Se si desidera inserire in una tabella temporanea dai risultati di un prescelto:

insert into temp 
select * from student; 
+1

ERRORE alla riga 1: ORA-00942: la tabella o la vista non esiste – Sait

+3

È necessario creare innanzitutto la tabella temporanea, proprio come qualsiasi altra tabella in oracolo. Se si desidera creare una tabella in base a una selezione, utilizzare "crea tabella xxx come seleziona ...", ma può essere eseguita solo una volta. – OldProgrammer

+1

Non voglio avere il tavolo. È costoso in termini di codifica creare il tavolo stesso per ogni variabile temporanea di cui ho bisogno. Voglio solo avere qualcosa di dinamico che posso riempire in movimento nella stored procedure. E dopo che la stored procedure termina, sbarazzarsi di esso. Ma non sono sicuro che sia possibile o no in Oracle. – Sait

5

Allora forse avete bisogno di fare qualcosa di simile:

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

Se la temperatura tabella non esiste, è necessario per crearlo.

CREATE TABLE temp as 
    SELECT * FROM student;