Oracle kullanarak INTO'YU SEÇİN


135

Oracle kullanarak SELECT INTO yapmaya çalışıyorum. Sorgum:

SELECT * INTO new_table FROM old_table;

Ama şu hatayı alıyorum:

SQL Error: ORA-00905: missing keyword
00905. 00000 -  "missing keyword"

Neyin yanlış olduğu hakkında bir fikrin var mı?


Yukarıdakilerin Standart davranışı, başlangıçta düşündüğüm gibi olmalıdır: Ancak Oracle, bunu kendi SQL Oracle Docs on Insert diyalektinde tamamen farklı bir şekilde uyguladı ...


3
select intoyeni bir tablo oluşturmak standardın bir parçası değildir . Seçime dayalı bir tablo oluşturmak için SQL standardı create table .. as select .... SQL standardında SELECT INTO, bir programlama dilinde bir sütun değerini bir değişkene okumak için tanımlanmıştır
a_horse_with_no_name

Yanıtlar:


283

NEW_TABLE zaten varsa o zaman ...

insert into new_table 
select * from old_table
/

OLD_TABLE içindeki kayıtlara göre NEW_TABLE oluşturmak istiyorsanız ...

create table new_table as 
select * from old_table
/

Amaç yeni ama boş bir tablo oluşturmaksa, hiçbir zaman doğru olamayacak bir koşul içeren bir WHERE cümlesi kullanın:

create table new_table as 
select * from old_table
where 1 = 2
/

CREATE TABLE ... AS SELECT'in yalnızca kaynak tablo ile aynı projeksiyona sahip bir tablo oluşturduğunu unutmayın. Yeni tablo, orijinal tablonun sahip olabileceği herhangi bir kısıtlamaya, tetikleyiciye veya dizine sahip değildir. Bunların yine de manuel olarak eklenmesi gerekir (gerekirse).


18
+1 @Robert: Artı, sadece old_table'ın şemasını kopyalamak istiyorsanız, bir negatif where cümlesi kullanın, örneğin: eski_tablo WHERE 1 = 2'den seç * olarak new_table oluşturun.
KMån

31

select intopl / sql'de bir değişkeni alan değerlerine ayarlamak için kullanılır. Bunun yerine kullanın

create table new_table as select * from old_table

SELECT INTO'nun Standardın bir parçası olduğunu düşündüm. Oracle burada garip bir şey mi yaptı yoksa hiçbir zaman standardın bir parçası olmadı mı?
Robert Gould

3
select intopl / sql'nin bir parçasıdır. Depolanan prosedürleri yazmak için kullanılan bir dildir ve sql standardıyla doğrudan bir ilişkisi yoktur. Ve evet, Oracle hiçbir zaman standardın parçası olmayan birçok şey yaptı =)
Rorick

2
@RobertGould: hayır, SELECT INTO olduğu değil standart SQL. Standart sadececreate table .. as select ..
a_horse_with_no_name

SELECT INTO IS standart SQL'in bir parçasıdır bkz. W3schools.com/sql/sql_select_into.asp Standart SQL'in diğer birçok parçası gibi Oracle da kendi işini yapar.
graham hanson

2
@grahamhanson, bir ANSI standartları belgesi değil, W3Schools eğitim sitesine bir bağlantı gibi görünüyor.
William Robertson

3

kullanın:

create table new_table_name 
as
select column_name,[more columns] from Existed_table;

Misal:

create table dept
as
select empno, ename from emp;

Tablo zaten mevcutsa:

insert into new_tablename select columns_list from Existed_table;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.