You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有内置函数可快速提取存储过程或函数引用的底层对象名称?

存储过程依赖对象查询方案

内置查询能力说明

主流商用/开源数据库都自带系统视图或内置函数可直接查询存储过程的依赖对象,无需自定义开发:

  • SQL Server:可直接使用内置函数sys.dm_sql_referenced_entities查询,示例如下:
SELECT 
  referenced_schema_name, 
  referenced_entity_name AS table_name
FROM sys.dm_sql_referenced_entities ('<你的存储过程名>', 'OBJECT')
WHERE referenced_class_desc = 'OBJECT_OR_COLUMN' 
  AND referenced_type = 'U'; -- 过滤只返回用户表,去掉可查所有依赖对象
  • MySQL:5.7及以上版本开启sys schema后,查询sys.schema_object_dependencies视图即可:
SELECT 
  referenced_schema_name,
  referenced_table_name
FROM sys.schema_object_dependencies
WHERE object_name = '<你的存储过程名>'
  AND object_type = 'PROCEDURE';
  • PostgreSQL:关联系统表pg_depend、pg_proc、pg_namespace即可查询:
SELECT 
  ns.nspname AS schema_name,
  cls.relname AS table_name
FROM pg_proc p
JOIN pg_depend d ON p.oid = d.objid
JOIN pg_class cls ON d.refobjid = cls.oid
JOIN pg_namespace ns ON cls.relnamespace = ns.oid
WHERE p.proname = '<你的存储过程名>' 
  AND d.deptype = 'n' 
  AND cls.relkind = 'r'; -- 过滤只返回普通表
  • Oracle:查询ALL_DEPENDENCIES视图即可(权限更高可查DBA_DEPENDENCIES):
SELECT 
  owner AS schema_name,
  referenced_name AS table_name
FROM ALL_DEPENDENCIES
WHERE name = '<你的存储过程名>' 
  AND type = 'PROCEDURE' 
  AND referenced_type = 'TABLE';

无内置能力的极简实现方案

如果使用的是没有内置依赖统计能力的小众数据库,按两步操作即可快速实现:

  1. 批量导出所有存储过程的创建脚本到本地文本文件
  2. 写10行以内的简单脚本遍历所有导出的SQL文本,用正则匹配[schema名].[表名]的标识符格式,去重后即可拿到所有关联的表对象,适配性最高,不需要复杂的SQL语法解析逻辑。

注意:如果存储过程中使用了动态SQL拼接表/对象名,所有内置依赖查询能力都无法统计到这部分对象,这种情况只能使用上述文本匹配+人工校验的方式处理。

内容的提问来源于stack exchange,提问作者Sayantan Mandal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:57:00