pagesize linesize comandos oracle

linesize - Oracle todas las referencias de clave externa



sqlplus set lines (6)

He heredado un esquema, así que no tengo conocimiento / confianza completos en lo que hay.

Tengo una tabla de proyectos con un ID de proyecto. Hay un montón de otras tablas que hacen referencia a esta tabla por el ID del proyecto. Lo que quiero hacer es ejecutar una consulta para establecer:

  1. ¿Qué tablas tienen referencias de clave externa a la tabla de proyecto en el ID de proyecto?
  2. Qué tablas tienen una columna llamada ID de proyecto (en caso de que no se configuren las claves externas).

Si era SQL Server, sé cómo consultar los metadatos, pero ¿cómo hago esto en Oracle?


1)

select table_name from all_constraints where r_constraint_name = [your pk/uk constraint on PROJECTS(id)]

2)

select table_name from all_tab_columns where column_name = ''PROJECT_ID''

Es posible que desee agregar un predicado adicional que contenga la columna PROPIETARIO.

Saludos, Rob.


1): SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME=''R'' and R_CONSTRAINT_NAME=''xxx''

donde xxx es el nombre de la restricción de clave principal en la tabla del proyecto

2): SELECT * FROM USER_TAB_COLUMNS WHERE COLUMN_NAME=''PROJECT_ID''


De acuerdo. Aquí una solicitud que le da la tabla y la columna de referencia:

SELECT c_list.CONSTRAINT_NAME as NAME, substr(c_src.COLUMN_NAME, 1, 20) as SRC_COLUMN, c_dest.TABLE_NAME as DEST_TABLE, substr(c_dest.COLUMN_NAME, 1, 20) as DEST_COLUMN FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest WHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME AND c_list.OWNER = c_src.OWNER AND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME AND c_list.OWNER = c_dest.OWNER AND c_list.CONSTRAINT_TYPE = ''R'' AND c_src.OWNER = ''<your-schema-here>'' AND c_src.TABLE_NAME = ''<your-table-here>'' GROUP BY c_list.CONSTRAINT_NAME, c_src.TABLE_NAME, c_src.COLUMN_NAME, c_dest.TABLE_NAME, c_dest.COLUMN_NAME;

Que te dan algo como esto:

NAME |SRC_COLUMN |DEST_TABLE | DEST_COLUMN ----------------------|----------------|----------------------|----------- CFK_RUB_FOR |FOR_URN |T03_FORMAT |FOR_URN CFK_RUB_RUB |RUB_RUB_URN |T01_RUBRIQUE |RUB_URN CFK_RUB_SUP |SUP_URN |T01_SUPPORT |SUP_URN CFK_RUB_PRD |PRD_URN |T05_PRODUIT |PRD_URN

Puede olvidar la función substr () si el resultado es utilizable sin. Este no es mi caso.


Las respuestas de r_constraint_name aquí no parecieron funcionar para mí, no estoy seguro de por qué soy nuevo en Oracle, pero esto funcionó:

SELECT * FROM ALL_CONSTRAINTS WHERE CONSTRAINT_NAME = ''<constraint>'';


Mi problema fue ligeramente diferente. Tengo una tabla y quería saber de manera programática a qué otras tablas / columnas hace referencia.

Comencé con la respuesta de Stan anterior, pero esto no me dio exactamente lo que necesitaba, por lo que se me ocurrió esto, que publico aquí en caso de que alguien más tenga mi problema:

WITH src as (SELECT ac.table_name, ac.constraint_name, accs.column_name, accs.position, ac.r_constraint_name FROM ALL_CONSTRAINTS ac, all_cons_columns accs WHERE ac.owner = ''<owner>'' AND ac.constraint_type = ''R'' AND ac.table_name = ''<src_table>'' AND accs.owner = ac.owner AND accs.table_name = ac.table_name AND accs.constraint_name = ac.constraint_name ORDER BY ac.table_name, ac.constraint_name, accs.position), dst as (SELECT ac.table_name, ac.constraint_name, accs.column_name, accs.position FROM ALL_CONSTRAINTS ac, all_cons_columns accs WHERE ac.owner = ''<owner>'' AND accs.owner = ac.owner AND accs.table_name = ac.table_name AND accs.constraint_name = ac.constraint_name ORDER BY ac.table_name, ac.constraint_name, accs.position) SELECT src.table_name as src_table, dst.table_name as dst_table, src.constraint_name as src_constraint, src.column_name as src_column, dst.column_name as dst_column, src.position as position FROM src,dst WHERE src.r_constraint_name = dst.constraint_name AND src.position = dst.position


Utilice esta consulta.

select b.TABLE_NAME,b.CONSTRAINT_NAME ,a.COLUMN_NAME from all_constraints b, all_cons_columns a where r_constraint_name = ''Constraint_Name'' and a.CONSTRAINT_NAME=b.CONSTRAINT_NAME;