Oracle을 사용하여 선택


134

Oracle을 사용하여 SELECT INTO를 수행하려고합니다. 내 질문은 :

SELECT * INTO new_table FROM old_table;

그러나 다음과 같은 오류가 발생합니다.

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

어떤 생각이 잘못 되었나요?


위의 표준 동작은 원래 생각했던대로해야합니다. 그러나 Oracle 은 삽입시 SQL Oracle Docs 의 자체 방언에서 완전히 다르게 구현했습니다 .


3
select into새 테이블을 만드는 것은 표준의 일부 가 아닙니다 . 선택을 기반으로 테이블을 작성하는 SQL 표준은 create table .. as select ...입니다. SQL 표준에서는 SELECT INTO열 값을 프로그래밍 언어의 변수로 읽도록 정의되어 있습니다.
a_horse_with_no_name

답변:


282

NEW_TABLE이 이미 존재하면 ...

insert into new_table 
select * from old_table
/

OLD_TABLE의 레코드를 기반으로 NEW_TABLE을 작성하려는 경우 ...

create table new_table as 
select * from old_table
/

새이지만 빈 테이블을 작성하는 것이 목적이라면 절대로 절대로 참일 수없는 조건으로 WHERE 절을 사용하십시오.

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

CREATE TABLE ... AS SELECT는 소스 테이블과 동일한 투영을 가진 테이블 만 작성합니다. 새 테이블에는 원래 테이블에있을 수있는 제약 조건, 트리거 또는 인덱스가 없습니다. 여전히 수동으로 추가해야합니다 (필요한 경우).


18
+1 @Robert : 또한, old_table의 스키마를 복사하려면 예를 들어 다음과 같이 음수 where 절을 사용하십시오.
KMån

31

select intopl / sql에서 변수를 필드 값으로 설정하는 데 사용됩니다. 대신에

create table new_table as select * from old_table

비록 SELECT INTO가 표준의 일부였습니다. 오라클은 여기서 이상한 일을 했습니까, 아니면 표준의 일부가 아니 었습니까?
Robert Gould

3
select intopl / sql의 일부입니다. 저장 프로 시저를 작성하기위한 언어이며 SQL 표준과 직접적인 관련이 없습니다. 그렇습니다. 오라클은 표준에 포함되지 않은 많은 것들을 만들었습니다. =)
Rorick

2
@RobertGould : 아니요, 표준 SQL SELECT INTO 아닙니다 . 표준은 다음을 정의합니다create table .. as select ..
a_horse_with_no_name

SELECT INTO는 표준 SQL의 일부입니다. w3schools.com/sql/sql_select_into.asp를 참조하십시오. 표준 SQL의 다른 많은 부분과 마찬가지로 Oracle도 자체 작업을 수행합니다.
graham hanson

2
@grahamhanson은 ANSI 표준 문서가 아닌 W3Schools 자습서 사이트에 대한 링크 인 것으로 보입니다.
윌리엄 로버트슨

3

사용하다:

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

예:

create table dept
as
select empno, ename from emp;

테이블이 이미 존재하는 경우 :

insert into new_tablename select columns_list from Existed_table;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.