Re: Question about foreign keys

From: Moorthy N. Rekapalli <moorthy_at_atl.mindspring.com>
Date: 1996/05/27
Message-ID: <4obav4$20ic_at_mule2.mindspring.com>#1/1


duffy_at_cais.cais.com (MCC) wrote:

>Hi All,
 

> I have a foreign key and need to find the table/column
>it is referencing, I've tried DBA_CONS_COLUMNS and DBA_CONSTRAINTS
>and could not get the clue, please help.
 

>Thanks,
>MCC
FOLLOW THROUGH THE EXAMPLE AND IF YOU HAVE ANY QUESTIONS, PLEASE LET ME KNOW. SQL> create table primary_table (

  2     sno number
  3      constraint primary_table_pk primary key,
  4     name varchar2(10));

Table created.

SQL> create table foreign_table (

  2     sno number
  3      constraint foreign_table_fk references primary_table(sno),
  4     age number);

Table created.

FOREIGN_TABLE'S SNO FIELD IS REFERENCING PRIMARY_TABLE'S SNO. BUT, YOU DON'T KNOW THIS UNLESS
I TELL YOU. BUT, ORACLE KEEPS TRACK OF THESE CONSTRAINTS IN A DATA DICTIONARY TABLE
CALLED USER_CONSTRAINTS. SQL> describe user_constraints

 Name                            Null?    Type
 ------------------------------- -------- ----
 OWNER                           NOT NULL VARCHAR2(30)
 CONSTRAINT_NAME                 NOT NULL VARCHAR2(30)
 CONSTRAINT_TYPE                          VARCHAR2(1)
 TABLE_NAME                      NOT NULL VARCHAR2(30)
 SEARCH_CONDITION                         LONG
 R_OWNER                                  VARCHAR2(30)
 R_CONSTRAINT_NAME                        VARCHAR2(30)
 DELETE_RULE                              VARCHAR2(9)
 STATUS                                   VARCHAR2(8)


YOU KNOW THE CONSTRAINT NAME ON YOUR TABLE. IF YOU DID NOT NAME YOUR CONSTRAINTS WHILE
CREATING TABLES, ORACLE WILL GENERATE CONSTRAINT NAMES LIKE SYS_C90821. IN THIS EXAMPLE,
I NAMED MY CONSTRAINT AS FOREIGN_TABLE_FK. SQL> select * from user_constraints
  2 where constraint_name = 'FOREIGN_TABLE_FK';

OWNER                          CONSTRAINT_NAME                C
TABLE_NAME                          
------------------------------ ------------------------------ -
------------------------------      

SEARCH_CONDITION
R_OWNER                        R_CONSTRAINT_NAME
DELETE_RU STATUS                      
------------------------------ ------------------------------
--------- --------                    
KRISHNA                        FOREIGN_TABLE_FK               R
FOREIGN_TABLE                       


KRISHNA                        PRIMARY_TABLE_PK               NO
ACTION ENABLED                     


FOREIGN_TABLE_FK IS REFERENCING THE CONSTRAINT PRIMARY_TABLE_PK. THAT IS SHOWN UNDER
R_CONSTRAINT_NAME FIELD. FIND OUT WHICH TABLE HAS THE PRIMARY_TABLE_PK AS SHOWN BELOW:
UNDER TABLE_NAME FIELD, YOU WILL FIND PRIMARY_TABLE. THIS IS YOUR ANSWER. SQL> select * from user_constraints
  2 where constraint_name = 'PRIMARY_TABLE_PK';

OWNER                          CONSTRAINT_NAME                C
TABLE_NAME                          
------------------------------ ------------------------------ -
------------------------------      

SEARCH_CONDITION
R_OWNER                        R_CONSTRAINT_NAME
DELETE_RU STATUS                      
------------------------------ ------------------------------
--------- --------                    
KRISHNA                        PRIMARY_TABLE_PK               P
PRIMARY_TABLE                       
Received on Mon May 27 1996 - 00:00:00 CEST

Original text of this message