南大通用GBase 8a查看哪些存储过程用到了某张表

GBase 8a提供了存储过程元数据表gbase.proc,其中的body和body_uft8里保存了存储过程的正文主体,通过对该字段的like查询可以找到哪些存储过程用到了某张表。

该方法只能查找写死在存储过程内的,不能找到动态生成的,比如游标。

参考

GBase8a 集群查看建表结构,存储过程的语句

查询样例

加上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)