Copie conditionnelle d'une colonne de T1 vers une colonne de T2

Copie conditionnelle d'une colonne de T1 vers une colonne de T2 - SQL/NoSQL - Programmation

Marsh Posté le 20-09-2011 à 18:17:39    

Bonjour à Tous,
 
J'ai fait une recherche sans succès sur le forum. Donc j'ouvre ce topic.
 
J'utilise Oracle 9.2 et voici mon problème.
 
J'ai une table T1 avec une colonne CODE_ARTICLE que je souhaite copier vers une colonne CODE_ARTICLE de T2  SEULEMENT SI le contenu de T1.CODE_ARTICLE commence par la chaine 'ART_A%'
Je veux également ajouter une valeur chaine (toujours la même) dans la colonne T2.ATELIER, voisine de T2.CODE_ARTICLE pour chaque ligne ajoutée à T2.
L'ordre d'écriture n'a pas d'importance. Le tout c'est que les données soient présentes dans T2.
 
Comment dois-je rédiger le code SQL ?
 
A la fin, le résultat dans T2 doit donner ce qui suit :
 
Colonne T2.CODE_ARTICLE           Colonne T2.ATELIER
ART_A0001                                      ATELIER1
ART_A0002                                      ATELIER1
ART_A0023                                      ATELIER1
ART_A0248                                      ATELIER1
ART_A0005                                      ATELIER1
ART_A ....                                        ATELIER1
 
Merci beaucoup pour votre aide  :bounce:

Reply

Marsh Posté le 20-09-2011 à 18:17:39   

Reply

Marsh Posté le 20-09-2011 à 19:54:01    

Wesh
 
Y'a un piège avec la version 9.2? Avec 10g/11g j'aurais dit tout simplement:

INSERT INTO t2(code_article, atelier)
SELECT code_article, 'ATELIER1'
FROM t1
WHERE code_acticle LIKE 'ART\_A%' ESCAPE '\';


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 21-09-2011 à 20:54:47    

Bonjour,
 
Merci beaucoup pour cette réponse. En fait, ça me donne le même message d'erreur que la requête que j'avais montée avec un curseur (qui était plus compliquée que la tienne, il faut bien l'admettre  :) ) Donc mon problème doit venir d'ailleurs.
 
En fait, ce message dit qu'il ne peut pas entrer une chaine vide dans les colonnes de la table cible. Sur une requête de base du genre SELECT code_article FROM t1 WHERE code_article LIKE 'ART_A%', ça fonctionne. Mais quand je lance la requête que tu m'as donné (où la mienne avec un curseur), on dirait que la lecture, ou peut-être l'écriture, ne se fait pas correctement. Et je n'arrive pas à tracer l'état du curseur intermédiaire.
 
J'ai pourtant désactivé les triggers sur les tables et j'ai les droits pour écrire où je veux en base en validant tout d'un simple commit.
 
Je vais continuer de chercher et je tiendrai au courant si je trouve. Merci encore

Reply

Marsh Posté le 23-09-2011 à 17:05:57    

Re

 

T'as surement un champ de ta table cible, autre que code_article et atelier, qui a une contrainte "NOT NULL" et pas de valeur par défaut. Donc quand tu essaies d'insérer un nouvel enregistrement avec juste code_article et atelier, ben ca passe pas puisque tu ne spécifies pas de valeur pour ce champ.

 

Solutions possibles:
1 - déclare une valeur par défaut pour le(s) champ(s) en question en plus de la contrainte NOT NULL
2 - modifies la requete pour qu'elle déclare une valeur pour le(s) champ(s) NOT NULL, genre

INSERT INTO t2(code_article, atelier, champ_qui_peut_pas_etre_null)
SELECT code_article, 'ATELIER1', 'valeur_par_defaut'
FROM t1
WHERE code_acticle LIKE 'ART\_A%' ESCAPE '\';


Message édité par lasnoufle le 23-09-2011 à 17:06:25

---------------
C'était vraiment très intéressant.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed