查看用户对某个表的操作记录(查看某表被哪些存储过程使用)
一、相关表讲解(存储相关SQL语句)
1、V$SQL
存储SQL语句的前1000个Bytes和一些相关的统计信息
字段 类型 含义
SQL_TEXT VARCHAR2(1000) SQL语句的前1000个Bytes
SQL_FULLTEXT CLOB SQL语句的所有字符
SQL_ID VARCHAR2(13) SQL_ID
FIRST_LOAD_TIME VARCHAR2(19) SQL存入时间
COMMAND_TYPE NUMBER 命令类型
ADDRESS RAW(8) 地址
HASH_VALUE NUMBER 哈希值
SERVICE VARCHAR2(64) 服务名
ACTION VARCHAR2(64) 动作
LAST_LOAD_TIME VARCHAR2(19) 最后修改时间
PARSING_SCHEMA_NAME VARCHAR2(128) 操作用户
//查看哪些用户使用了表SZJFSRHK_SRHK select PARSING_SCHEMA_NAME, SQL_ID, SQL_TEXT, FIRST_LOAD_TIME, SERVICE, ACTION, "MODULE", LAST_LOAD_TIME from v$sql where hash_value in (select hash_value from v$sql_plan where object_owner='ODS' AND OBJECT_NAME='SZJFSRHK_SRHK');
2、V$SQLTEXT
字段 类型 含义
ADDRESS RAW(8) 地址
HASH_VALUE NUMBER 哈希值
SQL_ID VARCHAR2(13) SQL_ID
COMMAND_TYPE NUMBER 命令类型
SQL_TEXT VARCHAR2(64) 包含一块SQL语句的字段
PIECE NUMBER 某SQL语句的第几块
3、USER_SOURCE(查看存储过程)
字段 类型 含义
NAME VARCHAR2(128) 存储过程名称
TYPE VARCHAR2(12) 类型,基本都是PROCEDURE
LINE NUMBER 一个存储过程分多行,这个是行号
TEXT VARCHAR2(4000) 存储过程的内容
二、查看表的操作记录
1、查找某表的操作记录,获取SQL_ID
select PARSING_SCHEMA_NAME, SQL_ID, SQL_TEXT, FIRST_LOAD_TIME, SERVICE, ACTION, "MODULE", LAST_LOAD_TIME from v$sql where hash_value in (select hash_value from v$sql_plan where object_owner='ODS' AND OBJECT_NAME='SZJFSRHK_SRHK');
2、在SQLTEXT查询SQL_ID的sql内容
SELECT B.* FROM V$SQLAREA A,V$SQLTEXT B WHERE A.SQL_ID=B.SQL_ID AND A.SQL_ID='177cuh91c9kuq' //V$SQLTEXT查询出来的是完整的SQL操作语句,但是是分段显示,一行一段,用piece标记
可以通过listagg函数将其连接成一条完整的SQL操作语句
select listagg(SQL_TEXT,'') within group (order by piece) from (SELECT B.PIECE,B.SQL_TEXT FROM V$SQLAREA A,V$SQLTEXT B WHERE A.SQL_ID=B.SQL_ID AND A.SQL_ID='177cuh91c9kuq')
三、查看表被哪些存储过程使用
SELECT * from user_source where upper(text) like '%SUCCEZ_FYPGS1_FYPGS%'; //查看使用表SUCCEZ_FYPGS1_FYPGS的存储过程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下