2015-10-27 2 views
0

Я пытаюсь отследить некоторые информационные/первичные ключи в таблицах, а обычный механизм, который мы используем для этого, - это представления, которые представляют собой не что иное, как семантические слои поверх таблиц с чрезвычайно загадочными именами столбцов.Где/Как объявляются псевдонимы столбцов Oracle?

В качестве примера, таблица выглядит следующим образом:

create table F3002_WH 
(
    ixtbm CHAR(9) not null, 
    ixkit NUMBER not null, 
    ixmmcu CHAR(36) not null, 
    ixcpnt NUMBER not null, 
    ixsbnt NUMBER not null, 
    ixbqty NUMBER not null, 
    ixcoby CHAR(3) not null 
); 

Но взгляды превратить каждое из этих полей в читаемых имена, такие как «TYPE_BILL» вместо «ixtbm.»

Однако, когда я смотрю на DDL для зрения:

CREATE OR REPLACE VIEW F3002_VIEW AS 
SELECT 
    ixtbm, ixkit, ixmmcu, ixcpnt, ixsbnt, ixbqty, ixcoby 
from F3002_WH; 

Я не вижу псевдоним. Я бы ожидал увидеть ixtbm as type_bill.

Итак, мой вопрос в том, откуда этот псевдоним, и как я могу привязать его к имени исходного поля, не превращая его в научный проект? Я не понимаю, как это можно сделать при запросе представления, не входя в код представления.

Для чего это стоит, я использую PL/SQL Developer от All Around Automation. Я сильно подозреваю, что это не преступник, но в интересах полного раскрытия я подумал упомянуть об этом.

+0

Как вы смотрите на DDL? 'dbms_metadata.get_ddl' покажет имена столбцов представления, независимо от того, соответствуют ли они таблице или нет, и вы можете видеть в' user_tab_columns' как для таблицы, так и для представления. Казалось бы странным, если PL/SQL Developer не показывал это, но я не устанавливал его на этом ПК для проверки. Также стоит упомянуть, какую версию базы данных и PL/SQL Developer вы используете, и именно там, где вы смотрите на DDL. –

+0

Спасибо за отзыв. Я смотрел DDL через PL/SQL Developer. «Desc» в PL * SQL показывает псевдонимы, но не в том поле, к которому они относятся. Я нахожусь в Oracle 11. PL/SQL Developer - 11.0.4.1774. Похоже, мне нужно попробовать 'dbms_metadata.get_ddl' – Hambone

+0

Там нет нигде, где отображается сопоставление от имени столбца представления к имени столбца таблицы, потому что необязательно простая ссылка - представление может быть против а не простой столбец. Вероятно, вы застряли в анализе запроса вида, чтобы получить имена столбцов таблицы и сравнив их с именами столбцов представления - либо из определения, либо из 'user_tab_columns' на основе' column_id'. (Вы не можете предположить, что значения 'column_id' для таблицы соответствуют представлению, они будут в вашем примере, но не должны и не могут быть безопасными принимать что-либо). –

ответ

2
CREATE VIEW myView (alias1, alias2) as select ixtbm, ixkit from f3002_wh; 

Должен сказать, что если вы видите основной запрос, то обфускация - пустая трата времени!

И, по-моему, происходит то, что DDL, сгенерированный вашим инструментом, по умолчанию не включает список столбцов, поэтому вы его не видите. Если вы отбросили представление и перестроили его с помощью созданного DDL вместо того, чтобы использовать скрипт, который изначально его создал, и вы потеряете псевдонимы.

Их могут быть параметры генератора DDL, чтобы включить список имен столбцов в представлениях, но поскольку у меня нет этого инструмента, я не могу это проверить. Для этого им нужно запросить ALL_TAB_COLUMNS, а не просто показывать запрос из поля ТЕКСТ ALL_VIEWS.

+0

это действительно было в 'all_tab_columns'. Я неправильно предположил, что покажет мне тот же контент, что и DDL из IDE. Большое спасибо. – Hambone

Смежные вопросы