Quiero encontrar las claves externas de una tabla, pero puede haber más de un usuario/esquema con una tabla con el mismo nombre. ¿Cómo puedo encontrar el que está viendo el usuario actualmente conectado? ¿Hay alguna función que le dé a su dueño? ¿Qué pasa si hay sinónimos públicos?¿Cómo puedo encontrar el PROPIETARIO de un objeto en Oracle?
Respuesta
Puede consultar los ALL_OBJECTS Vista:
select owner
, object_name
, object_type
from ALL_OBJECTS
where object_name = 'FOO'
para encontrar sinónimos:
select *
from ALL_SYNONYMS
where synonym_name = 'FOO'
Solo para aclarar, si instrucción SQL una
usuario
del usuario hace referencia a un nombre de objeto sin cualificación esquema (por ejemplo, 'FOO'), Oracle FIRST verifica el esquema del usuario para un objeto de ese nombre (incluidos los sinónimos en el esquema de ese usuario). Si Oracle no puede resolver la referencia desde el esquema del usuario, Oracle busca un sinónimo público.
Si usted está buscando específicamente para las restricciones en un nombre_tabla en particular:
select c.*
from all_constraints c
where c.table_name = 'FOO'
union all
select cs.*
from all_constraints cs
join all_synonyms s
on (s.table_name = cs.table_name
and s.table_owner = cs.owner
and s.synonym_name = 'FOO'
)
HTH
- Adición:
Si el usuario se le concede acceso a los puntos de vista DBA_ (por ejemplo, si su al usuario se le ha otorgado SELECT_CATALOG_ROLE), puede sustituir 'DBA_
' en lugar de 'ALL_
' en los ejemplos anteriores de SQL. Las vistas ALL_x
solo muestran objetos a los que se le han otorgado privilegios. Las vistas DBA_x
mostrarán todos los objetos de la base de datos, tanto si tiene privilegios como si no.
pregunta interesante - No creo que haya ninguna función de Oracle que hace esto (casi como un comando "que" en Unix), pero se puede conseguir la orden de resolución para el nombre de:
select * from
(
select object_name objname, object_type, 'my object' details, 1 resolveOrder
from user_objects
where object_type not like 'SYNONYM'
union all
select synonym_name obj , 'my synonym', table_owner||'.'||table_name, 2 resolveOrder
from user_synonyms
union all
select synonym_name obj , 'public synonym', table_owner||'.'||table_name, 3 resolveOrder
from all_synonyms where owner = 'PUBLIC'
)
where objname like upper('&objOfInterest')
Para buscar el nombre del usuario actual dentro de una sesión de Oracle, use la función USER
.
Tenga en cuenta que el propietario de la restricción, el propietario de la tabla que contiene la clave externa y el propietario de la tabla a la que se hace referencia pueden ser todos diferentes. Suena como que ’ es la mesa propietario le ’ re interesado, en cuyo caso debe estar cerca de lo que quiere:
select Constraint_Name
from All_Constraints
where Table_Name = 'WHICHEVER_TABLE'
and Constraint_Type = 'R' and Owner = User;
vistas de Oracle como ALL_TABLES y ALL_CONSTRAINTS tienen una columna de propietario, el cual se puede utilizar para restringe tu consulta. También hay variantes de estas tablas que comienzan con USER en lugar de ALL, que solo enumeran objetos a los que puede acceder el usuario actual.
Una de these vistas debería ayudar a resolver su problema. Siempre me funcionaron bien para problemas similares.
Encontré esta pregunta como el resultado principal al buscar en Google cómo encontrar el propietario de una tabla en Oracle, así que pensé que aportaría una tabla de respuesta específica para la conveniencia de los demás.
encontrar al propietario de una tabla específica en una base de datos Oracle, utilice la siguiente consulta:
select owner from ALL_TABLES where TABLE_NAME ='<MY-TABLE-NAME>';
- 1. Encontrar el propietario de un iterador STL
- 2. ¿Cómo puedo encontrar el centro del objeto?
- 3. En Selenio, ¿cómo puedo encontrar el objeto "Actual"
- 4. ¿Cómo obtengo información sobre un propietario de índice y tabla en Oracle?
- 5. javascript cómo encontrar el número de hijos en un objeto
- 6. cómo encontrar el propietario de un archivo o directorio en python
- 7. Dado un objeto javascript arbitrario, ¿cómo puedo encontrar sus métodos?
- 8. ¿Cómo encontrar las propiedades de un objeto?
- 9. ¿Cómo determino el propietario de un proceso en C#?
- 10. Encontrar el propietario y el grupo de un archivo (como una cadena)
- 11. ¿Cómo encontrar anotaciones en un objeto PHP5?
- 12. Cómo encontrar filas bloqueadas en Oracle
- 13. ¿Cómo puedo encontrar la cantidad de registros en un cursor Oracle PL/SQL?
- 14. Buscar el propietario de un archivo en Unix
- 15. ¿Cómo puedo calcular el tamaño de un índice de Oracle?
- 16. jQuery tablesorter cómo encontrar el objeto sortList
- 17. ¿Puedo usar Grails en software propietario?
- 18. ¿Cómo obtener el propietario y el objeto bloqueado del evento locks_lock_timeouts_greater_than_0 en SQL Server?
- 19. ¿Cómo encontrar el tamaño de un Objeto Iterable?
- 20. ¿Hay alguna manera de encontrar el hilo del propietario de un control?
- 21. ¿Cómo encontrar un objeto de cierto tipo en un NSArray?
- 22. Cómo cambiar el propietario de una rsync
- 23. : dependiente =>: eliminar el belongs_to no elimina propietario del objeto
- 24. Oracle: ¿Cómo determino el NUEVO nombre de un objeto en un desencadenante "DESPUÉS DE ALTERAR"?
- 25. LD_LIBRARY_PATH: cómo encontrar un objeto compartido
- 26. Configurando el propietario de los objetos en un cubo S3
- 27. ¿Cómo encontrar el tipo de objeto que tengo en Perl?
- 28. Error esperado del objeto Page_ClientValidate(), no puedo encontrar el validador
- 29. ¿Cómo puedo obtener el nombre de un Objeto en Java?
- 30. ¿Cómo puedo obtener el tamaño de un objeto en HttpRuntime.Cache?
sólo para hacer la consulta un poco más flexible, me gustaría consultar 'donde más baja (object_name) = ' foo'' Esto es especialmente útil cuando tiene un nombre de función, pero no de mayúsculas y minúsculas (por ejemplo, como una llamada en un programa externo que no distingue entre mayúsculas y minúsculas, como fue el caso para mí). – Travis
@Travis: eso haría que la consulta sea más flexible. Para que coincida más de cerca con la forma en que Oracle ve los identificadores "insensibles a mayúsculas y minúsculas" en una declaración de SQL, queremos ** ** WHERE object_name = UPPER ('foo') '**. (Un identificador que no está entre comillas dobles en una declaración de SQL es visto por Oracle como si fuera mayúscula. (Los identificadores de Oracle * son * sensibles a mayúsculas y minúsculas, solo debemos incluirlos entre comillas dobles en una declaración de SQL para preservar las minúsculas) Cuando hacemos 'SELECT * FROM foo', Oracle realmente ve el identificador como' FOO', como si hubiéramos hecho 'SELECT * FROM FOO'.) – spencer7593