日期:2014-05-17  浏览次数:20698 次

如何获取特定的字符串
我想查V$sql里的sql_text 里的不重复的表名出来,那么如何可以截取到sql语句的表名,sql语句基本上都是select XX from table where xx,那么如何写才可以截取到table资料出来?

------解决方案--------------------
查FROM 和之后第二个空格之间的字符串
然后解析这个字符串

------解决方案--------------------
貌似没啥更好的法。
------解决方案--------------------
如果有子查询那就麻烦大了,
没有的话,就用1楼的了,没有更好的办法了

或者可以根据你表的命名规则来搜索。比如以 't'开头 或者以'cub'开头的表 等
------解决方案--------------------
第二个空格,还是不保险。
到 join 或 where 为止试一下。
------解决方案--------------------
探讨
我想查V$sql里的sql_text 里的不重复的表名出来,那么如何可以截取到sql语句的表名,sql语句基本上都是select XX from table where xx,那么如何写才可以截取到table资料出来?

------解决方案--------------------
1.用正则试试。截取from后面第一个非空字符是不是(,如果不是就截取串。(这个应该会用到connect by)
2.自己写个函数(不需要用connect by)。
sql书写太随意了。分解其元素很麻烦。
------解决方案--------------------
SQL code
select substr(sql_text,instr(sql_text,'from')+5,(instr(sql_text,'where')-(instr(sql_text,'from')))-6) from v$sql 
where sql_text='select mod(spare2, 256) subparttype from partobj$ where obj# = :1'