Extraire des noms de colonnes dans Oracle : un guide complet
La table information_schema.COLUMNS
de MySQL n'est pas directement mise en miroir dans Oracle. Cet article explique comment récupérer les noms de colonnes d'une table Oracle 11g, en traitant des distinctions entre schémas et espaces de table et en mettant en évidence les meilleures pratiques de sécurité.
Solution de requête Oracle
Oracle utilise la table USER_TAB_COLS
(ou ALL_TAB_COLS
pour l'accès entre schémas) pour stocker les métadonnées des colonnes. Pour récupérer les noms de colonnes de la table « utilisateurs », appartenant à « mon_schéma », à l'exclusion des colonnes spécifiées, utilisez cette requête :
<code class="language-sql">SELECT column_name FROM ALL_TAB_COLS WHERE table_name = 'USERS' AND owner = 'my_schema' AND column_name NOT IN ('PASSWORD', 'VERSION', 'ID')</code>
Clarification des tablespaces et des schémas
Il est crucial de comprendre que dans Oracle, les tablespaces et les schémas sont des concepts distincts. Les espaces de table sont des emplacements de stockage, tandis que les schémas représentent les structures de propriété et d'organisation des objets de base de données. L'espace table n'est pas pertinent lors de l'interrogation des noms de colonnes ; seul le schéma (propriétaire) compte.
API Hibernate Criteria (pas d'équivalent HQL direct)
Bien qu'il n'existe pas d'équivalent HQL direct, l'API Hibernate Criteria propose une approche comparable :
<code class="language-java">Criteria criteria = session.createCriteria(User.class); criteria.setProjection(Projections.property("columnName")); criteria.add(Restrictions.eq("tableName", "users")); criteria.add(Restrictions.in("columnName", new String[] {"name", "email"})); // Excludes columns</code>
Prévention des vulnérabilités d'injection SQL
Intégrer directement des valeurs dans des requêtes SQL est très risqué. Utilisez toujours des instructions préparées ou des requêtes paramétrées pour empêcher les attaques par injection SQL et protéger votre base de données. Ceci est crucial pour toutes les requêtes dynamiques où les noms de tables ou de colonnes sont fournis par l'utilisateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!