2015-02-22 13 views
7

Tôi cố gắng để làm một cái gì đó như sau,Chọn vào một bảng tạm thời trong Oracle

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

Nó mang lại cho tôi những lỗi sau,

ERROR at line 1: 
ORA-00905: missing keyword 

Trong ví dụ thật của tôi subquery (select * từ học sinh) phức tạp hơn.

Tôi muốn sử dụng điều này trong quy trình được lưu trữ, vì vậy tôi không muốn tự tạo bảng. Tôi chỉ muốn làm cho mã của tôi dễ đọc hơn bằng cách sử dụng bảng tạm thời.

+2

Tôi đã bỏ phiếu cho câu trả lời này vì có thể điều này có thể xảy ra trong SQL Server: Để chọn tập hợp kết quả thành bảng không tồn tại, do đó tạo bảng tạm thời. E.G> SELECT * INTO #TEMP FROM STUDENT –

+0

Bạn không 'chọn vào' một bảng trong Oracle, bạn' chèn vào' nó. Việc xây dựng 'select into' là để điền một biến. Thật không may là các nhà cung cấp khác có cú pháp tìm kiếm tương tự cho một cái gì đó không liên quan. –

Trả lời

2

Bạn không "chọn" vào bảng tạm thời. Nếu bạn muốn chèn vào một bảng tạm thời từ kết quả của một lựa chọn:

insert into temp 
select * from student; 
+1

L ERI tại dòng 1: ORA-00942: bảng hoặc dạng xem không tồn tại – Sait

+3

Bạn phải tạo bảng tạm thời trước, giống như bất kỳ bảng nào khác trong oracle. Nếu bạn muốn tạo một bảng dựa trên một lựa chọn, sau đó sử dụng "tạo bảng xxx như chọn ..." Nhưng điều đó chỉ có thể được thực hiện một lần. – OldProgrammer

+1

Tôi không muốn có bàn. Đó là tốn kém về mặt mã hóa để tạo bảng cho mỗi biến tạm thời mà tôi cần. Tôi chỉ muốn có một cái gì đó năng động mà tôi có thể điền vào khi đang di chuyển trong thủ tục lưu sẵn. Và sau khi thủ tục lưu trữ chấm dứt, hãy loại bỏ nó. Nhưng tôi không chắc liệu nó có khả thi hay không trong Oracle. – Sait

5

Sau đó, có lẽ bạn cần phải làm điều gì đó như thế này:

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

Nếu tạm thời bảng không tồn tại, bạn có để tạo ra nó.

CREATE TABLE temp as 
    SELECT * FROM student; 
Các vấn đề liên quan