2013-04-11 54 views
1

我正在處理一個腳本,該腳本應該抓取包含指定列的表名列表,並排除包含下劃線的表名。我曾嘗試過:獲取Oracle中不包含「_」的表名

此查詢仍拉取包含下劃線的表名稱。我錯過了什麼?

回答

9

Underscore是LIKE語句中的通配符 - 它恰好匹配一個字符。試試這個:

SELECT TABLE_NAME 
FROM USER_TAB_COLUMNS 
WHERE COLUMN_NAME = 'SERIAL_NUMBER' 
AND instr(TABLE_NAME, '_') = 0; 

發佈我注意到,你居然還企圖逃跑下劃線後。沒有像沒有缺省轉義字符,所以你需要告訴你在做什麼數據庫:

SELECT TABLE_NAME 
FROM USER_TAB_COLUMNS 
WHERE COLUMN_NAME = 'SERIAL_NUMBER' 
AND TABLE_NAME NOT LIKE '%\_%' ESCAPE '\'; 

Find out more.

+0

那完美。謝謝!感謝您解釋轉義字符。 – amlane86 2013-04-11 16:03:00

+0

不知道你是否看過我的附錄? – APC 2013-04-11 16:06:11

+0

我做過了,在你編輯你的答案之前,我就已經問過了。感謝您提供一個很好的答案。 – amlane86 2013-04-11 16:08:20