2016-03-04 3 views
-1

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

select (
       select column_name 
       from all_tab_cols 
       where table_name='BED_2016_MAR_CIT4114A_FYP1_G_' 
        and column_name like '%na%' 
      ) 
    from BED_2016_MAR_CIT4114A_FYP1_G_; 
+0

Какая ошибка? Предположительно не «ORA-00942: таблица или представление не существует», что я получаю ... Но если я использую таблицу, которая существует в моей схеме, а не BED_2016_MAR_CIT4114A_FYP1_G_, то я вообще не получаю ошибки. –

+0

Ошибка - это ошибка логической ошибки. В основном я хочу, чтобы он выбирал столбцы на основе условия, как обычно, мы помещаем select * или выбираем id, name, поэтому я хочу, чтобы выбрать select на основе столбцов, которые имеют значение% na% –

+0

Столбец * name * подобен 'na' (в нижний регистр, подразумевающий цитируемые идентификаторы); или значение столбца похоже на 'na'? Они очень разные. Вы пытаетесь определить, какие столбцы содержат данные, соответствующие этому шаблону? –

ответ

0

SQL-запрос должен содержать список столбцов, которые он явно использует. Вы можете делать то, что хотите, используя динамический SQL (execute immediate). Например:

declare 
    sql varchar2(4000); 
    cols varchar2(4000); 
begin 
    select listagg(column_name, ',') within group (order by column_name) 
    into cols 
    from all_tab_cols 
    where table_name = 'BED_2016_MAR_CIT4114A_FYP1_G_' and column_name like '%na%' ; 

    sql := ' 
create table newtab as 
select @cols 
from BED_2016_MAR_CIT4114A_FYP1_G_'; 

    sql := replace(sql, '@cols', cols); 

    execute immediate sql; 
end; 

select * 
from newtab; 
0

Похоже, что проблема находится в состоянии where:

where table_name='BED_2016_MAR_CIT4114A_FYP1_G_' 
        and column_name like '%na%' 

Удалить условие table_name. Вы уже выбираете из BED_2016_MAR_CIT4114A_FYP1_G_, поэтому будут показаны только столбцы в этой таблице.

Вот более упрощенная версия запроса:

select column_name 
from BED_2016_MAR_CIT4114A_FYP1_G_ 
where column_name like '%na%' 

Надежда помогла

+0

это не работает. –

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