148 votes

SÉLECTIONNER DANS en utilisant Oracle

Je essaie de faire un SELECT INTO en utilisant Oracle. Ma requête est :

SELECT * INTO new_table FROM old_table;

Mais je reçois l'erreur suivante :

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

Des idées sur ce qui ne va pas ?


Le comportement standard de ce qui précède devrait être comme je le pensais initialement : Cependant, Oracle l'a implémenté totalement différemment dans son propre dialecte de SQL Oracle Docs sur Insert ... Select

3 votes

sélectionner dans pour créer une nouvelle table n'est pas partie de la norme. La norme SQL pour créer une table basée sur une sélection est créer table .. comme sélectionner .... Dans la norme SQL SÉLECTIONNER DANS est défini pour lire une valeur de colonne dans une variable dans un langage de programmation

296voto

APC Points 69630

Si NEW_TABLE existe déjà alors...

insert into new_table 
select * from old_table
/

Si vous voulez créer NEW_TABLE basé sur les enregistrements dans OLD_TABLE...

create table new_table as 
select * from old_table
/

Si le but est de créer une nouvelle table vide, utilisez une clause WHERE avec une condition qui ne peut jamais être vraie:

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

Rappelez-vous que CREATE TABLE ... AS SELECT crée uniquement une table avec la même projection que la table source. La nouvelle table n'a pas de contraintes, déclencheurs ou index que la table d'origine peut avoir. Ceux-ci doivent toujours être ajoutés manuellement (s'ils sont nécessaires).

18 votes

+1 @Robert: De plus, si vous voulez simplement copier le schéma de old_table, utilisez une clause WHERE négative, comme par exemple : create new_table as select * from old_table WHERE 1=2.

33voto

wallyk Points 33150

sélectionner dans est utilisé en pl/sql pour définir une variable sur des valeurs de champ. À la place, utilisez

créer table nouvelle_table comme sélectionner * de ancienne_table

0 votes

Je pensais que SELECT INTO faisait partie de la norme. Est-ce qu'Oracle a fait quelque chose d'étrange ici ou est-ce que cela n'a jamais fait partie de la norme?

3 votes

sélectionner dans fait partie de PL/SQL. C'est un langage pour écrire des procédures stockées et n'a pas de relation directe avec la norme SQL. Et oui, Oracle a créé de nombreuses choses qui n'ont jamais fait partie de la norme =)

2 votes

@RobertGould : non, SELECT INTO n'est pas du SQL standard. La norme définit uniquement create table .. as select ..

5voto

PRADEEP R Points 11

Utilisation :

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

Exemple :

create table dept
as
select empno, ename from emp;

Si la table existe déjà :

insert into new_tablename select columns_list from Existed_table;

1voto

Message d'aide général sur l'erreur Ora :

http://ora-00905.ora-code.com/

Comment utiliser : Préfixez votre code d'erreur oracle avec l'utilisateur *.ora-code.com comme ora-00905.ora-code.com

Nous pouvons connaître la cause et les actions correctives à effectuer.

-1voto

ROHIT E Points 1

Essayez d'utiliser cette déclaration ci-dessous au lieu d'utiliser select into dans Oracle :

select * from(select * from table1) table2 ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X