Próbuję zrobić SELECT INTO przy użyciu Oracle. Moje zapytanie to:
SELECT * INTO new_table FROM old_table;
Ale pojawia się następujący błąd:
SQL Error: ORA-00905: missing keyword
00905. 00000 - "missing keyword"
Jakieś pomysły, co jest nie tak?
Standardowe zachowanie powyższego powinno być takie, jak początkowo sądziłem: jednak Oracle zaimplementowało to zupełnie inaczej w swoim własnym dialekcie SQL Oracle Docs on Insert ... Wybierz
select into
tworzenie nowej tabeli nie jest częścią normy. Standardem SQL do tworzenia tabeli na podstawie selekcji jestcreate table .. as select ...
. W standardzie SQLSELECT INTO
zdefiniowano wczytanie wartości kolumny do zmiennej w języku programowaniaOdpowiedzi:
Jeśli NEW_TABLE już istnieje, to ...
insert into new_table select * from old_table /
Jeśli chcesz utworzyć NEW_TABLE na podstawie rekordów w OLD_TABLE ...
create table new_table as select * from old_table /
Jeśli celem jest utworzenie nowej, ale pustej tabeli, użyj klauzuli WHERE z warunkiem, który nigdy nie może być prawdziwy:
create table new_table as select * from old_table where 1 = 2 /
Pamiętaj, że CREATE TABLE ... AS SELECT tworzy tylko tabelę z taką samą projekcją, jak tabela źródłowa. Nowa tabela nie ma żadnych ograniczeń, wyzwalaczy ani indeksów, które mogłaby mieć oryginalna tabela. Te nadal trzeba dodać ręcznie (jeśli są wymagane).
źródło
select into
jest używany w pl / sql do ustawiania zmiennej na wartości pól. Zamiast tego użyjcreate table new_table as select * from old_table
źródło
select into
jest częścią pl / sql. Jest to język do pisania procedur składowanych i nie ma bezpośredniego związku ze standardem sql. I tak, Oracle zrobiło wiele rzeczy, które nigdy nie były częścią standardu =)SELECT INTO
to nie jest standardowy SQL. Standard definiuje tylkocreate table .. as select ..
Posługiwać się:
create table new_table_name as select column_name,[more columns] from Existed_table;
Przykład:
create table dept as select empno, ename from emp;
Jeśli tabela już istnieje:
insert into new_tablename select columns_list from Existed_table;
źródło