Bonjour à tous ! Je développe un outil qui doit fonctionner avec des bases de données SQLServer ainsi qu'Oracle et je ni connais absolument rien en Oracle.

Voici mon problème, je possède la requête ci-dessous (avec SQLServer) qui fonctionne et qui permet de récupérer toutes les colonnes de chaque table de la base de données sur laquelle j'exécute ma requête, elle select :
- Nom de la table
- Nom du schéma de la table
- Nom de la colonne
- Type de données de la colonne
- Nom de la table de référence si la colonne est clé étrangère (si non null)
- Savoir s'il s'agit d'une vue ou d'une table avec le renvoi d'un simple 'U' ou 'V'
- Savoir si la colonne est nullable avec le renvoi d'un BIT
- Savoir si la colonne est identity avec le renvoi d'un BIT
- Savoir si la colonne est clé primaire avec le renvoi d'un BIT
- Savoir si la colonne est clé étrangère avec le renvoi d'un BIT
- Connaitre le nombre de caratère maximum pour les types string (null si autre type)
- Connaitre la précision numérique pour les types de nombre (null si autre type)
- Connaitre l'échelle numérique pour les types de nombre (null si autre type)


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
SELECT c.table_name AS tableName, c.table_schema AS schemaName, c.column_name, c.data_type, FK.table_ref
                                , CAST(CASE WHEN t.type = 'U' THEN 'U' ELSE 'V' END AS VARCHAR) AS is_table_or_view
                                , CAST(CASE WHEN c.is_nullable = 'YES' THEN 1 ELSE 0 END AS BIT) AS is_nullable
                                , CAST(CASE WHEN COLUMNPROPERTY(object_id(c.TABLE_SCHEMA+'.'+c.TABLE_NAME), c.column_name, 'IsIdentity') = 1 THEN 1 ELSE 0 END AS BIT) AS is_identity
                                , ISNULL(TKEY.is_primaryKey, 0) AS is_primaryKey
                                , ISNULL(TKEY.is_foreignKey, 0) AS is_foreignKey
                                , c.character_maximum_length
	                            , c.numeric_precision
                                , c.numeric_scale
                            FROM information_schema.columns c
                            INNER JOIN sys.objects t ON t.object_id = object_id(c.TABLE_SCHEMA+'.'+c.TABLE_NAME)
                            OUTER APPLY (
	                            SELECT CAST(OBJECTPROPERTY(OBJECT_ID(cu.constraint_schema + '.' + QUOTENAME(cu.constraint_name)), 'IsPrimaryKey') AS BIT)
		                            , CAST(OBJECTPROPERTY(OBJECT_ID(cu.constraint_schema + '.' + QUOTENAME(cu.constraint_name)), 'IsForeignKey') AS BIT)
	                            FROM information_schema.key_column_usage cu
	                            WHERE cu.table_name = c.table_name AND cu.table_schema = c.table_schema
	                            AND cu.column_name = c.column_name
                            ) AS TKEY (is_primaryKey, is_foreignKey)
                            OUTER APPLY (
                                SELECT object_name(fk.referenced_object_id)
                                FROM sys.foreign_keys fk
                                INNER JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id AND TKEY.is_foreignKey = 1
                                INNER JOIN sys.columns cl ON cl.column_id = fkc.parent_column_id AND cl.object_id = fkc.parent_object_id
                                WHERE cl.object_id = object_id(c.TABLE_NAME)
                                AND cl.name = c.COLUMN_NAME
                            ) AS FK (table_ref)

J'ai fouillé et bidouillé un peu et pus voir que les CAST sont différents, les OUTER APPLY aussi, ce que je ne comprend pas, et le pire de tout : les différentes tables systèmes que j'utilise pour obtenir mes données

Si une personne est capable de m'aider je le lui serais éternellement reconnaissant