bonjour
je dois vérifier qu'une liste de schéma.table existe dans ma base de données
comment écrire la requête en plsql svp
ex : dwh. X, stg.Y, , dwh.U, stg.I ...
à part faire select*from chacune des tables , comment l'écrire autrement ?
merci !![]()
bonjour
je dois vérifier qu'une liste de schéma.table existe dans ma base de données
comment écrire la requête en plsql svp
ex : dwh. X, stg.Y, , dwh.U, stg.I ...
à part faire select*from chacune des tables , comment l'écrire autrement ?
merci !![]()
Regardez dans les vues systèmes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select owner, table_name from all_tables where (owner, table_name) in (('DWH', 'X'), ('STG', 'Y'), ('DWH', 'U'));
merci bcp
si je veux savoir si dans la liste l'une d'entre elles n'existe pas , je ne le saurai pas ainsi ,non? d'ailleurs j'ai mis 86 tables j'en ai que 34
comment savoir quelles st celles qui n'y sont pas svp ?
Attention ce n'est pas le même besoin - votre titre c'est vérifier l'existence, finalement vous voulez vérifiez la non-existence.
Dans ce cas là stockez votre liste dans une table, par exemple Liste_Existe, et faites un minus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select owner, table_name from Liste_Existe minus select owner, table_name from all_tables;
comment dois je construire la liste svp ?
je n'ai pas le droit de créer de table ou alors temporaire
Comme ceci par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 with Liste_Existe (owner, table_name) as ( select 'DWH', 'X' from dual union all select 'STG', 'Y' from dual union all select 'DWH', 'U' from dual ) select owner, table_name from Liste_Existe minus select owner, table_name from all_tables;
impeccable merci de m'avoir fait progresser !!!
bonne journée
bonjour
j'ai une question sur la dernière requête partagée dans ce fil avec le minus
j'essaie de faire le minus dans l'autre sens et plsql me dit que la clause with n'est pas prise en charge alors que dans le sens que vous donnez cela fonctionne?
donc ce qui fonctionne :
ce qui ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 select owner, table_name from all_tables minus with Liste_Existe (owner, table_name) as ( select 'DWH', 'X' from dual union all select 'STG', 'Y' from dual union all select 'DWH', 'U' from dual ) select owner, table_name from Liste_Existe minus select owner, table_name from all_tables;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 with Liste_Existe (owner, table_name) as ( select 'DWH', 'X' from dual union all select 'STG', 'Y' from dual union all select 'DWH', 'U' from dual ) minus select owner, table_name from Liste_Existe;
Une CTE permet d'externaliser et de mutualiser une table dérivée, il faut donc d'abord la déclarer (clause WITH) avant de l'utiliser.
Pour info, l'ordre SQL normalisé est EXCEPT et non pas MINUS
merci pour ta réponse
tu avais utilisé minus , pourquoi utiliser except ? c'est dc la même chose ?
est-ce que le minus ne donne que les éléments manquants ou il donne aussi les éléments en trop? ce qui permettrai d'avoir tous les éléments avec juste le select * from MINUS (with T1...) puisque dans l'autre sens je ne peux pas le faire?
Ce n'est pas moi qui ai proposé une requête avec MINUS
En effet, MINUS est l'équivalent de EXCEPT, mais EXCEPT c'est le standard SQL, alors que MINUS est spécifique à quelques SGBD (Oracle, MySQL).
Il est donc préférable d'utiliser EXCEPT.
Le SQL se lit naturellement, comme du français :
select col1 from ma_table except select col1 from mon_autre_table signifie qu'on récupère toutes les valeurs de col1 de ma_table à l'exception de celles trouvées également dans mon_autre_table.
Une autre façon d'arriver au même résultat, c'est de faire une jointure externe (OUTER JOIN) en vérifiant qu'une colonne non "nullable" de la table externe est marquée "null"
Autrement dit, ces deux requêtes sont équivalentes :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select c1 from t1 except select c1 from t2 ;
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select t1.c1 from t1 left join t2 on t2.c1=t1.c1 where t2.c1 is null
top ta réponse merci beaucoup
passe de bonnes fêtes !![]()
Bonnes fêtes également![]()
![]()
![]()
bonjour,
effectivement minus fonctionne dans PLSQL except n'est pas reconnu .
Partager