2014-11-20 8 views
0

есть простой способ получить заголовки столбцов из заданного sql-запроса.извлечение заголовков из запроса sql

Так из следующих функций:

select name, dob, trunc((sysdate-dob)/365.25) age, address "Persons address" from persons 

можно было бы получить:

NAME 
DOB 
AGE 
Persons address 
+0

Почему вам нужны только заголовки без данных? – arunb2w

+0

Вы используете свой sql в определенном приложении, например, в java или в другой структуре программирования? –

+0

Возможный дубликат [Выбрать список имен столбцов/псевдонимов из пользовательского под-запроса] (http://stackoverflow.com/questions/17198923/select-list-of-column-names-aliases-from-custom-sub-query) –

ответ

0

Имя псевдонима не может отображаться непосредственно, если она не будет сохранена в базе данных, но мы можем создать таблицу образуют оператор выбора например ниже

create table persons_temp as 
select name, dob, trunc((sysdate-dob)/365.25) age, address "Persons address" from persons 

затем мы можем запросить таблицу словаря данных user_tab_columns lik e

select column_name from user_tab_columns where table_name = 'PERSONS_TEMP' 

надеюсь, что это вам поможет.

+0

Программы, такие как TOAD put заголовки столбцов в верхней части их выходных сеток при запуске запроса и, по-видимому, они ничего не сохраняют в базе данных, прежде чем делать это. –

+0

@TonyWolff да, возможно, это просто псевдоним, поэтому отображение имени может быть сделано только таким образом. – Exhausted

0

TOAD и другие инструменты и среды могут отображать заголовки столбцов, поскольку после получения информации о столбце после выполняется разбор инструкции, которая выполняется при ее выполнении.

В зависимости от вашей среды, вы можете написать код для разбора вашего запроса, а затем анализируемый оператор будет объектом с коллекцией объектов столбцов, которые имеют имя и тип данных и длину в качестве атрибутов. Это возможно на многих языках программирования, которые поддерживают подготовку и выполнение операторов SQL.

В PL/SQL вы также можете анализировать инструкцию и получать информацию о столбцах с использованием пакета DBMS_SQL. Посмотрите в документации здесь: https://docs.oracle.com/database/121/ARPLS/d_sql.htm#ARPLS68199 (прокрутите вниз к примеру 8.)

Упрощенной адаптация примера 8 раз, давая имена столбцов вам нужно:

declare 
    c   number; 
    col_cnt  integer; 
    rec_tab  dbms_sql.desc_tab; 
begin 
    c := dbms_sql.open_cursor; 

    dbms_sql.parse(c, q'[SELECT 'a' col1, 3 "Col2" FROM dual]', dbms_sql.native); 

    dbms_sql.describe_columns(c, col_cnt, rec_tab); 

    for j in 1..col_cnt loop 
     dbms_output.put_line(rec_tab(j).col_name); 
    end loop; 

    dbms_sql.close_cursor(c); 
end; 
/

Этого выход (если у вас есть DBMS_OUTPUT включен, конечно) следующее:

COL1 
Col2 

Если вы видите пример 8 в документации вы можете увидеть, что другая информация колонка также доступна, как тип данных, длину, точность и тому подобное.

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