เลือกเข้าโดยใช้ Oracle


140

ฉันกำลังพยายามทำการ SELECT INTO โดยใช้ Oracle คำถามของฉันคือ:

SELECT * INTO new_table FROM old_table;

แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

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

มีความคิดอะไรผิด?


พฤติกรรมมาตรฐานข้างต้นควรเป็นไปตามที่ฉันคิดไว้ แต่แรก: อย่างไรก็ตาม Oracle ใช้มันแตกต่างกันโดยสิ้นเชิงในภาษาถิ่นของพวกเขาเองของ SQL Oracle Docs on Insert ... เลือก


3
select intoการสร้างตารางใหม่ไม่ได้เป็นส่วนหนึ่งของมาตรฐาน มาตรฐาน SQL create table .. as select ...เพื่อสร้างตารางขึ้นอยู่กับการเลือกคือ ในมาตรฐาน SQL SELECT INTOถูกกำหนดให้อ่านค่าคอลัมน์เป็นตัวแปรในภาษาโปรแกรม
a_horse_with_no_name

คำตอบ:


289

ถ้า NEW_TABLE มีอยู่แล้ว ...

insert into new_table 
select * from old_table
/

หากคุณต้องการสร้าง NEW_TABLE ตามระเบียนใน OLD_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 @ โรเบิร์ต: นอกจากนี้หากคุณต้องการเพียงแค่คัดลอกสคีมาของ old_table ให้ใช้ค่าลบโดยที่ประโยคเช่นสร้าง new_table เป็นเลือก * จาก old_table WHERE 1 = 2
KMå

32

select intoใช้ใน pl / sql เพื่อตั้งค่าตัวแปรเป็นค่าฟิลด์ ให้ใช้ไฟล์

create table new_table as select * from old_table

ฉันแม้ว่า SELECT INTO เป็นส่วนหนึ่งของ Standard Oracle ทำอะไรแปลก ๆ ที่นี่หรือไม่เคยเป็นส่วนหนึ่งของมาตรฐาน?
Robert Gould

3
select intoเป็นส่วนหนึ่งของ pl / sql เป็นภาษาสำหรับเขียนโพรซีเดอร์ที่เก็บไว้และไม่มีความสัมพันธ์โดยตรงกับมาตรฐาน sql และใช่ Oracle ทำหลายสิ่งที่ไม่เคยเป็นส่วนหนึ่งของมาตรฐาน =)
Rorick

2
@RobertGould: ไม่มีSELECT INTO คือไม่ได้มาตรฐาน SQL มาตรฐานกำหนดเท่านั้นcreate table .. as select ..
a_horse_with_no_name

เลือกเข้าเป็นส่วนหนึ่งของ SQL มาตรฐานโปรดดูที่w3schools.com/sql/sql_select_into.asp เช่นเดียวกับส่วนอื่น ๆ ของ SQL มาตรฐาน Oracle ทำในสิ่งของตัวเอง
graham hanson

2
@grahamhanson ซึ่งดูเหมือนจะเป็นลิงก์ไปยังไซต์บทแนะนำของ W3Schools ไม่ใช่เอกสารมาตรฐาน ANSI
William Robertson

4

ใช้:

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.