GBase 8a提供了存储过程元数据表gbase.proc,其中的body和body_uft8里保存了存储过程的正文主体,通过对该字段的like查询可以找到哪些存储过程用到了某张表。
该方法只能查找写死在存储过程内的,不能找到动态生成的,比如游标。
目录导航
参考
查询样例
加上trim是为了显示方便。
gbase> select trim(db),trim(name) from gbase.proc where body_utf8 like '%audit_log%';
+------------+-------------------+
| trim(db) | trim(name) |
+------------+-------------------+
| gclusterdb | audit_log_archive |
+------------+-------------------+
1 row in set (Elapsed: 00:00:00.00)
body字段是longblob类型的,如果某些版本不支持直接查询,则需要临时将这个数据转到express类型的表里。
gbase> create table testdb.tmp_proc(db varchar(100),name varchar(100),body_utf8 longtext);
Query OK, 0 rows affected (Elapsed: 00:00:00.59)
gbase> set _gbase_query_path=1;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> insert into testdb.tmp_proc select db,name,body_utf8 from gbase.proc;
Query OK, 4 rows affected (Elapsed: 00:00:00.30)
Records: 4 Duplicates: 0 Warnings: 0
gbase> select trim(db),trim(name) from testdb.tmp_proc where body_utf8 like '%audit_log%';
+------------+-------------------+
| trim(db) | trim(name) |
+------------+-------------------+
| gclusterdb | audit_log_archive |
+------------+-------------------+
1 row in set (Elapsed: 00:00:00.00)