首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在oracle schema中,有没有一种方法可以将表的创建和列修改与执行者一起记录在表中?

在Oracle Schema中,可以通过使用触发器(Trigger)来记录表的创建和列修改操作,并将执行者信息记录在表中。

触发器是一种特殊的数据库对象,它可以在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动触发执行一段预定义的代码。通过在表上创建触发器,可以在表的创建和列修改操作发生时,将相关信息记录在表中。

具体实现方法如下:

  1. 创建一个新表,用于记录表的创建和列修改操作的相关信息。该表可以包含以下列:操作类型(CREATE或ALTER)、操作时间、操作者用户名、表名、列名等。
  2. 创建一个触发器,用于在表的创建和列修改操作发生时触发执行。触发器可以定义在表级别或列级别,具体根据需求而定。
  3. 在触发器的代码中,通过使用特定的Oracle系统函数和伪列,可以获取当前操作的相关信息,如操作类型、操作时间、操作者用户名等。
  4. 将获取到的相关信息插入到记录操作信息的表中,以实现将表的创建和列修改与执行者一起记录在表中的目的。

以下是一个示例触发器的代码:

代码语言:txt
复制
CREATE TABLE schema_audit (
    operation_type VARCHAR2(10),
    operation_time TIMESTAMP,
    operation_user VARCHAR2(30),
    table_name VARCHAR2(30),
    column_name VARCHAR2(30)
);

CREATE OR REPLACE TRIGGER schema_audit_trigger
AFTER CREATE OR ALTER ON SCHEMA
DECLARE
    v_operation_type VARCHAR2(10);
    v_operation_time TIMESTAMP;
    v_operation_user VARCHAR2(30);
    v_table_name VARCHAR2(30);
    v_column_name VARCHAR2(30);
BEGIN
    -- 获取操作类型
    v_operation_type := CASE
        WHEN ORA_DICT_OBJ_TYPE = 'TABLE' THEN 'CREATE'
        WHEN ORA_DICT_OBJ_TYPE = 'TABLE PARTITION' THEN 'ALTER'
        WHEN ORA_DICT_OBJ_TYPE = 'TABLE SUBPARTITION' THEN 'ALTER'
        ELSE NULL
    END;

    -- 获取操作时间
    v_operation_time := SYSTIMESTAMP;

    -- 获取操作者用户名
    v_operation_user := SYS_CONTEXT('USERENV', 'SESSION_USER');

    -- 获取表名和列名
    v_table_name := ORA_DICT_OBJ_NAME;
    v_column_name := ORA_DICT_OBJ_SUBNAME;

    -- 将操作信息插入到记录表中
    INSERT INTO schema_audit (
        operation_type,
        operation_time,
        operation_user,
        table_name,
        column_name
    ) VALUES (
        v_operation_type,
        v_operation_time,
        v_operation_user,
        v_table_name,
        v_column_name
    );
END;

这样,当在Oracle Schema中创建表或修改列时,相关的操作信息将被记录在schema_audit表中,包括操作类型、操作时间、操作者用户名、表名、列名等。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库(https://cloud.tencent.com/product/cdb)
  • 腾讯云云服务器(https://cloud.tencent.com/product/cvm)
  • 腾讯云云原生应用引擎(https://cloud.tencent.com/product/tke)
  • 腾讯云安全产品(https://cloud.tencent.com/product/safe)
  • 腾讯云人工智能(https://cloud.tencent.com/product/ai)
  • 腾讯云物联网(https://cloud.tencent.com/product/iot)
  • 腾讯云移动开发(https://cloud.tencent.com/product/mobdev)
  • 腾讯云对象存储(https://cloud.tencent.com/product/cos)
  • 腾讯云区块链(https://cloud.tencent.com/product/bc)
  • 腾讯云元宇宙(https://cloud.tencent.com/product/mu)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

DML Error Logging 特性

最近的项目中发现处理DML Error 时,逐条逐条处理1千多条的数据从临时表 insert 到正式表需要差不多1分钟的时间,性能相当低下,而Oracle 10g中的DML error logging对于DML异常处理性能卓著。原本打算写篇关于这个特性的文章,正好有经典篇章,于是乎,索性翻译供大家参考,有不尽完美之处,请大家拍砖。 缺省情况下,一个DML命令失败的时候,在侦测到错误之前,不论成功处理了多少条记录,都将将使得整个语句回滚。在使用DML error log之前,针对单行处理首选的办法是使用批量SQL FORALL 的SAVE EXCEPTIONS子句。而在Oracle 10g R2时,DML error log特性使得该问题得以解决。通过为大多数INSERT,UPDATE,MERGE,DELETE语句添加适当的LOG ERRORS子句,不论处理过程中是否出现错误,都可以使整个语句成功执行。这篇文章描述了DML ERROR LOGGING操作特性,并针对每一种情形给出示例。 一、语法 对于INSERT, UPDATE, MERGE 以及 DELETE 语句都使用相同的语法 LOG ERRORS [INTO [schema.]table] [('simple_expression')] [REJECT LIMIT integer|UNLIMITED] 可选的INTO子句允许指定error logging table 的名字。如果省略它,则记录日志的表名的将以"ERR$_"前缀加上基表名来表示。 simple_expression表达式可以用于指定一个标记,更方便去判断错误。simple_expression能够为一个字符串或任意能转换成字符串的函数 REJECT LIMIT 通常用于判断当前语句所允许出现的最大错误数。缺省值是0,最大值则是使用UNLIMITED关键字。对于并行DML操作而言,REJECT LIMIT 会应用到每个并行服务器。 二、使用限制 下列情形使得DML error logging 特性失效 延迟约束特性 Direct-path INSERT 或MERGE 引起违反唯一约束或唯一索引 UPDATE 或 MERGE 引起违反唯一约束或唯一索引 除此之外,对于LONG,LOB,以及对象类型也不被支持。即使是一个包含这些列的表被作为错误日志记录目标表。 三、示例 下面的代码创建表并填充数据用于演示。

02

[答疑]买家发起退款与买家撤消退款是什么关系

杭大伟(28****23)13:27:26 问个UML用例之间的关系问题:在电商网站中,买家买到东西不满意,于是发起了退款。后来卖家说买家一点补偿。于是买家想撤消退款。 杭大伟(28****23)13:27:42 于是问题是:买家发起退款这个用例, 与买家撤消退款这个用例, 杭大伟(28****23)13:27:45 两者是什么关系? 杭大伟(28****23)13:27:48 扩展? 潘加宇(3504847)13:29:50 你的研究对象是"电商网站"? 杭大伟(28****23)13:30:01 是的。 潘加宇(3504847)13:30:24 就是两个用例嘛 潘加宇(3504847)13:30:27 不用扯上关系 杭大伟(28****23)13:31:06 可是如果 不事先走发起退款这个用例,撤消退款用例这个其实不存在的。 潘加宇(3504847)13:31:35 "不事先走发起退款这个用例,撤消退款用例这个其实不存在的"这个想法是不对的 杭大伟(28****23)13:32:04 为什么呢? 潘加宇(3504847)13:32:58 是否可以使用系统来"撤消退款"用例,判断标准是"存在符合退款条件的订单" 潘加宇(3504847)13:33:41 至于系统如何达到"存在符合退款条件的订单"的状态,不一定和某个特定用例相关 杭大伟(28****23)13:33:50 判断标准是:1,必须有退款(买家已经发过),2, 退款还在退款中。 潘加宇(3504847)13:34:23 这个细微的问题恰好是软件复杂性的关键所在 杭大伟(28****23)13:35:06 嗯,我现在在做系统用例,遇到这个问题,在用例图上如何表现 发起退款, 撤消退款, 杭大伟(28****23)13:35:23 感觉不是那么好表现。用扩展关系,感觉又不像又像。 潘加宇(3504847)13:36:46 两个独立的用例。因为退款结束,执行者就走开了,交互已经完毕。什么时候想用系统来取消,是另一件事情。取消并非退款的分支。 潘加宇(3504847)13:37:19 你如果这样想就麻烦了 潘加宇(3504847)13:37:36 存款是不是取款的扩展啊 潘加宇(3504847)13:38:05 要想取款,是不是先得用系统存款? 杭大伟(28****23)13:38:10 撤消退款是用户主动发起的。 杭大伟(28****23)13:38:19 不是系统来发起的。 杭大伟(28****23)13:38:42 又感觉 撤消退款不能作为一个用例。软件方法里说到,系统用例是用户的一种期望,撤消退款显然也不能作为用户的期望。就像软件方法中的登录,登录不能作为系统用例一样。 潘加宇(3504847)13:38:57 撤销退款和登录不一样 潘加宇(3504847)13:40:03 我刚才讲的 至于系统如何达到"存在符合退款条件的订单"的状态,不一定和某个特定用例相关 你理解没有? 潘加宇(3504847)13:40:14 状态和行为的区别 杭大伟(28****23)13:40:55 但您的意思是,撤消退款就单独做为一个用例么 潘加宇(3504847)13:41:34 拿开饭馆举例,顾客来吃饭,喝茶、打包、办宴会,城管来收管理费,都是用例。 但是"进门坐下"不是 潘加宇(3504847)13:41:46 我上面已经说清楚了 杭大伟(28****23)13:45:38

01

从看项目管理之任务管理,今天你违法了吗

7.1日起,新修订的《老年人权益保障法》开始实施,新修订的《老年人权益保障法》中规定,家庭成员应当关心老年人的精神需求,不得忽视、冷落老年人,与老年人分开居住的家庭成员,应当经常看望或者问候老年人(常回家看看);如赡养人在单位工作的,用人单位应当按照国家有关规定保障赡养人探亲休假。关于新法的实施,引来网友很多的评论,褒贬不一,但基本结论却是惊人的一致:ZF出发点是好的,但是规定本身的可执行性却遭到了质疑,一方面时间不允许,一年就那么几天假期,三天的假期在路上的时间都不够,咋探亲。另一方面是经济成本,铁老大就是个吸血鬼啊。还有一个可笑的传说,就是关于探亲休假,莫非我真的来自喵星么,这样的假期,你休过吗?由此,让我想到了项目管理中,一个类似的现象,量化的任务指标问题。

02
领券