Oracleを使用してSELECT INTO


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句を使用します。create new_table as select * from old_table WHERE 1 = 2
KMån

31

select into変数をフィールド値に設定するためにpl / sqlで使用されます。代わりに、

create table new_table as select * from old_table

SELECT INTOは規格の一部でしたが、オラクルはここで奇妙なことをしましたか、それとも標準の一部ではありませんでしたか?
ロバートグールド

3
select intopl / sqlの一部です。これは、ストアドプロシージャを記述するための言語であり、SQL標準とは直接関係ありません。そして、はい、オラクルは標準の一部ではない多くのことを行いました=)
Rorick

2
@RobertGould:いいえ、標準SQL でSELECT INTO はありません。標準で定義されているのはcreate table .. as select ..
a_horse_with_no_name 2013年

SELECT INTO ISは標準SQLの一部ですw3schools.com/sql/sql_select_into.aspを参照してください。標準SQLの 他の多くの部分と同様に、Oracleは独自の処理を行います。
グラハムハンソン2018年

2
ANSI標準ドキュメントではなく、W3Schoolsチュートリアルサイトへのリンクのように見える@grahamhanson。
ウィリアムロバートソン

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.