1
votes

Existe-t-il un moyen de rechercher dans Oracle en utilisant une chaîne si vous ne savez pas si la chaîne est un schéma / table / etc.?

J'essaye de rechercher quelque chose de particulier dans la base de données Oracle, mais je ne sais pas si c'est une table, ou un schéma, ou un utilisateur, etc ...

Existe-t-il une commande permettant de rechercher une chaîne si son type est inconnu?

Par exemple: SQL> SHOW STRING 'the_string'


4 commentaires

Vous pouvez obtenir une réponse exacte ici, mais pouvons-nous vous demander comment vous vous êtes retrouvé dans cette situation? Je veux dire, un utilisateur est une chose très différente d'une table.


Vous pouvez rechercher dans chaque colonne de INFORMATION_SCHEMA.COLUMNS INNER JOIN INFORMATION_SCHEMA.TABLES WHERE SCHEMA_NAME = @value OR TABLE_NAME = @value OR COLUMN_NAME = @value


Cela ne fonctionnera pas dans Oracle, @Dai. Mais oui, l'idée est bonne - pour les tables et les colonnes. Le problème principal est dans "etc" de Phillip, car il semble que "l'objet de recherche" puisse être pratiquement n'importe quoi . De mon point de vue, la question elle-même n'a pas de sens, mais bon - que sais-je?


Supposons qu'un utilisateur a demandé à récupérer quelque chose de "OBJECT" mais qu'ils n'étaient pas précis sur ce qu'était même "OBJECT". Je suis juste fatigué de demander aux utilisateurs d'être précis dans un e-mail de suivi. Telle est la situation.


3 Réponses :


4
votes

Essayez ceci:

select * from all_objects where object_name like '%your object name%'

Veuillez noter également,

  • ALL_OBJECTS décrit tous les objets accessibles à l'utilisateur actuel.
  • DBA_OBJECTS décrit tous les objets de la base de données.

Vous auriez besoin des droits d'accès appropriés attribués à votre utilisateur.


1 commentaires

Si % votre nom d'objet% est en minuscules, cela fonctionne; mais les noms d'objet sont généralement MAJUSCULE SUPÉRIEURE, vous pouvez donc sélectionner * parmi tous les objets où inférieur (nom_objet) comme '% votre nom d'objet%';



2
votes

Voici une requête unifiée qui devrait aider:

SELECT 'User/Schema' match_type,
        username
FROM dba_users -- if you have access to dba_users uses all_users instead
WHERE UPPER(username) LIKE '%THE_STRING%'
UNION
SELECT object_type,
       owner || '.' || object_name object_name
FROM dba_objects  -- or all_objects if no access to dba_objects
WHERE UPPER ( owner || '.' || object_name ) LIKE '%THE_STRING%'
ORDER BY 1, 2
/

Remarque, les vues dba_ afficheront tout (qui correspond), le all _ code> views n'affichera que les correspondances pour les objets auxquels vous avez accès.


0 commentaires

0
votes

En plus de la réponse d'OldProgrammer, si cette requête ne renvoie aucune information, pour savoir si le nom est un ID utilisateur (qui est fondamentalement synonyme de schémas), vous devez interroger ALL_USERS ou DBA_USERS :

select username from all_users where lower(username) like '%your_name_to_find%';


0 commentaires