2015-11-20 5 views
2

Я действительно новичок в ошибках Stackoverflow для любых ошибок.Как получить все столбцы из всех таблиц в конкретной базе данных, которые не являются частью первичных ключей и внешних ключей

Я работаю над Qlikview. Он не позволяет столбцам с одинаковым именем в двух разных таблицах. Я использовал для создания псевдонимов для каждого столбца каждый раз, когда мне нужно импортировать таблицы из oracle. Теперь я хочу иметь дело с большой базой данных. Поэтому я решил создать процедуру, которая принимает весь столбец без ограничений в качестве входных данных и добавляет туда имя таблицы с именами столбцов.

Я написал SQL запрос с базовыми знаниями, возвращающий в настоящее время первичных столбцов, но когда приходит к внешним ключам не работает (он извлекая столбцы, которые имеющие внешние ключи)

Моего запроса выглядит следующим образом

SELECT C.table_name, 
     C.column_name 
FROM user_constraints a, 
    user_cons_columns b, 
    ALL_TAB_COLUMNS C 
WHERE a.OWNER   =b.owner 
AND a.OWNER   =C.owner 
AND C.COLUMN_NAME  !=b.COLUMN_NAME 
AND a.CONSTRAINT_NAME =b.CONSTRAINT_NAME 
AND a.table_name  =b.table_name 
AND a.table_name  =C.table_name 
AND a.constraint_type IN('P','R') 
AND a.table_name NOT LIKE 'BIN%' 
AND A.TABLE_NAME NOT LIKE 'DEF%' 
AND b.table_name NOT LIKE 'BIN%' 
AND b.TABLE_NAME NOT LIKE 'DEF%' 
AND C.table_name NOT LIKE 'BIN%' 
AND C.TABLE_NAME NOT LIKE 'DEF%'; 

Любые предложения будут оценены

Спасибо

ответ

1

Это должно дать вам все столбцы во всех таблицах для данного имени схемы, где эти столбцы не являются частью первичного или внешнего ключа

SELECT atc.owner, 
    atc.table_name, 
    atc.column_name 
FROM 
    all_tab_columns atc 
WHERE 
    NOT EXISTS 
    (
     SELECT acc.owner, 
      acc.table_name, 
      acc.column_name 
     FROM 
      all_cons_columns acc 
     LEFT 
     JOIN all_constraints ac ON acc.owner = ac.owner AND ac.constraint_name = acc.constraint_name AND ac.constraint_type IN ('P', 'R') 
     WHERE 
      atc.owner = atc.owner 
     AND acc.table_name = atc.table_name 
     AND acc.column_name = atc.column_name 
    ) 
AND atc.owner = 'YOUR_SCHEMA_NAME' 
ORDER 
BY 1, 2 
/
+0

Большое спасибо :-) – Munny