select a.OWNER||'.'||A.NAME proc_name,b.owner table_owner ,b.table_name table_name,a.text from all_SOURCE A ,all_tables B
WHERE UPPER(A.TEXT) LIKE '%'||B.TABLE_NAME||'%' AND A.TYPE = 'PROCEDURE';
查询结果会有这种
proc_name table_owner table_name text
1 SYS.VALIDATE_APEX JACOB T_USER " select user# into l_owner# from sys.user$ where name = 'APEX_030200';
会有这种结果,t_user里的下划线被当成了通配符,求教该怎么处理
对于这个问题,您可以考虑转义下划线字符,使其不被当成通配符。在 Oracle 中,可以使用 ESCAPE 关键字指定转义字符,将其作为通配符前缀以进行匹配查询。具体做法如下:
select a.OWNER||'.'||A.NAME proc_name, b.owner table_owner, b.table_name table_name, a.text from all_SOURCE A, all_tables B
WHERE UPPER(A.TEXT) LIKE '%' || REPLACE(B.TABLE_NAME, '_', '_') || '%' ESCAPE '' AND A.TYPE = 'PROCEDURE';
在上面的查询语句中,使用 REPLACE 函数将所有的下划线替换为转义字符 '_',然后在 LIKE 子句中指定 ESCAPE 字符,以确保下划线只被用作普通字符而不是通配符。
这应该能解决您查询中下划线被误认为是通配符的问题。