获取Oracle中不包含“_”的表名

gnihil 发布于 2019-03-09 oracle 最后更新 2019-03-09 14:32 0 浏览

我正在创建一个脚本,用于获取包含指定列的表名列表,并排除包含下划线的表名。我努力了:

SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE 
    COLUMN_NAME = 'SERIAL_NUMBER' AND
    TABLE_NAME NOT LIKE '%\_%';
该查询仍然会拉取包含下划线的表名。我错过了什么?
已邀请:

veos

赞同来自:

Underscore是LIKE语句中的通配符 - 它只匹配一个字符。试试这个:

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

发布后我注意到你实际上试图逃避下划线。 LIKE没有默认转义字符,因此您需要告诉数据库您正在做什么:
  SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE COLUMN_NAME = 'SERIAL_NUMBER' 
AND TABLE_NAME  NOT LIKE '%\_%' ESCAPE '\';
Find out more.