2016-03-04 83 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

錯誤是邏輯錯誤沒有顯示。我基本上想要像基於條件選擇列一樣,通常我們把選擇*或選擇ID,名稱,所以我想要選擇基於有像%na%列% –

+0

列* name *就像'na'(in小寫,暗示引用的標識符);或列值是否像'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

這不起作用。 –