Могу ли я узнать, является ли столбец первичным ключом в представлении Oracle ALL_TAB_COLS? - PullRequest
2 голосов
/ 24 августа 2011

Могу ли я узнать, является ли столбец первичным или внешним ключом в представлении Oracle ALL_TAB_COLS?

select * 
from all_tab_cols 
where table_name = 'ALL_TAB_COLS'
;

1   SYS ALL_TAB_COLS    OWNER   VARCHAR2            30          N   1       <Long>                                  CHAR_CS 30  NO  NO      30  B   NO  YES NO  NO  1   1
2   SYS ALL_TAB_COLS    TABLE_NAME  VARCHAR2            30          N   2       <Long>                                  CHAR_CS 30  NO  NO      30  B   NO  YES NO  NO  2   2
3   SYS ALL_TAB_COLS    COLUMN_NAME VARCHAR2            30          N   3       <Long>                                  CHAR_CS 30  NO  NO      30  B   NO  YES NO  NO  3   3
4   SYS ALL_TAB_COLS    DATA_TYPE   VARCHAR2            106         Y   4       <Long>                                  CHAR_CS 106 NO  NO      106 B   NO  YES NO  NO  4   4
5   SYS ALL_TAB_COLS    DATA_TYPE_MOD   VARCHAR2            3           Y   5       <Long>                                  CHAR_CS 3   NO  NO      3   B   NO  YES NO  NO  5   5
6   SYS ALL_TAB_COLS    DATA_TYPE_OWNER VARCHAR2            30          Y   6       <Long>                                  CHAR_CS 30  NO  NO      30  B   NO  YES NO  NO  6   6
7   SYS ALL_TAB_COLS    DATA_LENGTH NUMBER          22          N   7       <Long>                                          NO  NO      0       NO  YES NO  NO  7   7
8   SYS ALL_TAB_COLS    DATA_PRECISION  NUMBER          22          Y   8       <Long>                                          NO  NO      0       NO  YES NO  NO  8   8
9   SYS ALL_TAB_COLS    DATA_SCALE  NUMBER          22          Y   9       <Long>                                          NO  NO      0       NO  YES NO  NO  9   9
10  SYS ALL_TAB_COLS    NULLABLE    VARCHAR2            1           Y   10      <Long>                                  CHAR_CS 1   NO  NO      1   B   NO  YES NO  NO  10  10
11  SYS ALL_TAB_COLS    COLUMN_ID   NUMBER          22          Y   11      <Long>                                          NO  NO      0       NO  YES NO  NO  11  11
12  SYS ALL_TAB_COLS    DEFAULT_LENGTH  NUMBER          22          Y   12      <Long>                                          NO  NO      0       NO  YES NO  NO  12  12
13  SYS ALL_TAB_COLS    DATA_DEFAULT    LONG            0           Y   13      <Long>                                  CHAR_CS 0   NO  NO      0       NO  YES NO  NO  13  13
14  SYS ALL_TAB_COLS    NUM_DISTINCT    NUMBER          22          Y   14      <Long>                                          NO  NO      0       NO  YES NO  NO  14  14
15  SYS ALL_TAB_COLS    LOW_VALUE   RAW         32          Y   15      <Long>                                          NO  NO      0       NO  YES NO  NO  15  15
16  SYS ALL_TAB_COLS    HIGH_VALUE  RAW         32          Y   16      <Long>                                          NO  NO      0       NO  YES NO  NO  16  16
17  SYS ALL_TAB_COLS    DENSITY NUMBER          22          Y   17      <Long>                                          NO  NO      0       NO  YES NO  NO  17  17
18  SYS ALL_TAB_COLS    NUM_NULLS   NUMBER          22          Y   18      <Long>                                          NO  NO      0       NO  YES NO  NO  18  18
19  SYS ALL_TAB_COLS    NUM_BUCKETS NUMBER          22          Y   19      <Long>                                          NO  NO      0       NO  YES NO  NO  19  19

Ответы [ 3 ]

6 голосов
/ 24 августа 2011

Нет - вы не можете, так как эта информация не является частью этого представления, см. http://download.oracle.com/docs/cd/B13789_01/server.101/b10755/statviews_1179.htm

Чтобы узнать столбцы первичного ключа таблицы, см. http://www.techonthenet.com/oracle/questions/find_pkeys.php -информация в представлениях all_constraints + all_cons_columns.

Чтобы найти информацию о внешнем ключе, попробуйте:

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cons.constraint_type = 'R'
AND cons.constraint_name = cols.constraint_name
ORDER BY cols.table_name, cols.position;
2 голосов
/ 21 октября 2013

В приведенном ниже запросе к базе данных Oracle будут перечислены все имена таблиц, присутствующих в вашей текущей схеме, для которых данный столбец (YOUR_COLUMN_NAME) объявлен как первичный ключ / составной ключ :

SELECT cols.table_name,cols.column_name,cols.position,cons.status,cons.owner ОТ минусы all_constraints,столбцы all_cons_columns ГДЕ cons.constraint_type = 'P' AND cols.column_name = '<<strong> GIVE_YOUR_COLUMN_NAME_HERE >' AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner ORDER BY cols.table_name, cols.position;

0 голосов
/ 01 декабря 2016

Это то, что я сделал, чтобы определить, был ли столбец частью первичного ключа (при условии, что первичным ключам не присвоены причудливые имена):

select a.*, b.CONSTRAINT_NAME
from ALL_TAB_COLS a
left join 
  (select CONSTRAINT_NAME,table_name,column_name from ALL_CONS_COLUMNS 
  where OWNER= '<USER_YOU_WANT>'
  and (CONSTRAINT_NAME like '%PK'
  or CONSTRAINT_NAME like 'PK%'
  or CONSTRAINT_NAME like '%PK%')
  and CONSTRAINT_NAME not like 'BIN%') B on a.COLUMN_NAME=B.COLUMN_NAME and a.TABLE_NAME=B.TABLE_NAM 
WHERE a.OWNER='<USER_YOU_WANT>'
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...