在oracle中使用触发器更改日期时出现问题

2024-02-14

我想创建一个触发器,可以修改或插入我的表“合同”中的日期:

“如果拥有当前合同的客户签署新合同,结束日期 前一个活动将是新活动开始日期的前一天”

So, my trigger is:

CREATE OR REPLACE TRIGGER TRIGGER_D
BEFORE
INSERT OR UPDATE ON CONTRACTS
FOR EACH ROW
DECLARE
idcliente CONTRACTS.CLIENTID%TYPE;
fecha_fin CONTRACTS.ENDDATE%TYPE;
BEGIN
  if :NEW.CLIENTID = idcliente  
    then 
    if TO_CHAR(fecha_fin) IS NULL OR TO_CHAR(fecha_fin) > TO_CHAR(:NEW.STARTDATE)
      then
        INSERT INTO CONTRACTS (ENDDATE) VALUES 
        (:NEW.STARTDATE);
        update CONTRACTS
        set
          ENDDATE = :NEW.STARTDATE;
    end if;      
  end if;
END;

我尝试插入这样的行:

INSERT INTO CONTRACTS (CONTRACTID, CLIENTID, STARTDATE, ENDDATE, CONTRACT_TYPE ,ADDRESS ,TOWN, ZIPCODE, COUNTRY)
VALUES              ('TW42260/09','99/98480296/22T',TO_DATE('18/04/17','DD/MM/YY'), NULL ,'Flat Rate Lover','69 Citadel Street, Ground floor, door 1','Summer forest', '11164' ,'Taiwan, Province of China');

这个触发器编译得很好,但他们没有做任何事情。


你想要这样的东西:

CREATE OR REPLACE TRIGGER TRIGGER_D
BEFORE
INSERT OR UPDATE ON CONTRACTS
FOR EACH ROW
DECLARE
BEGIN
  UPDATE CONTRACTS
  SET    ENDDATE   = :NEW.STARTDATE - INTERVAL '1' DAY
  WHERE  CLIENTID  = :NEW.CLIENTID
  AND    ENDDATE   > :NEW.STARTDATE
  AND    STARTDATE < :NEW.STARTDATE;
END;

但是,它正在更新触发器正在监视的表,并且触发器似乎可能会导致更新,从而再次调用触发器并获得变异表错误。

您可能最好将业务逻辑包装在存储过程中,在存储过程中它可以对前一行执行更新,然后执行插入/更新。然后,不是直接在表上执行 DML 语句,而是调用存储过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在oracle中使用触发器更改日期时出现问题 的相关文章

随机推荐

  • CAD 爆炸图算法

    我正在制作一个程序来查看 3D CAD 模型 并希望构建自动分解视图 将看到的所有组件都是轴对称的 有些可能不是 但大多数是 我想找出一种算法 用于自动将组件中的零件移动到分解视图位置 这是我想通过算法实现的示例 当然不包括标签 我必须使用
  • NaN 和 None 有什么区别?

    我正在使用 pandas 读取 csv 文件的两列readcsv 然后将值分配给字典 这些列包含数字和字母的字符串 有时会出现单元格为空的情况 在我看来 读取该字典条目的值应该是None但反而nan被安排了 一定None更能描述空单元格 因
  • 类型“Observable<{}>”不可分配给类型“Observable |”布尔值'

    我试图跟随本教程 https angular io docs ts latest guide router html route config 但我收到错误 路径匹配 完整 我尝试改变 角度 路由器 to 3 0 0 beta 2 还是同样
  • 检查 Linux 系统上 python 多处理中的 fork 行为

    我必须从许多进程中访问一组大型且不可选取的 python 对象 因此 我想确保这些对象没有被完全复制 根据评论this https stackoverflow com questions 5549190 is shared readonly
  • 如何在 Intellij 13 中创建测试目录?

    我是一个使用 v13 的 Intellij 菜鸟 我有一个简单的 java 项目 默认 结构 如下所示 idea src com test mytestClass1 mytestClass2 现在 我想编写一个简单的测试 并将该代码放在 s
  • “latin-1”编解码器无法对字符进行编码

    我的代码适用于英语文本 但不适用于俄语 search text 我该如何修复它 错误文本 UnicodeEncodeError latin 1 编解码器无法对位置 41 46 中的字符进行编码 主体 不是有效的 Latin 1 如果您想以
  • C++ 从图中删除顶点

    3he 以下使用 boost 1 46 1 进行编译 include
  • 无法使用 MPMoviePlayerViewController 播放视频

    我使用以下 ViewController m 创建了一个新项目 当我运行该应用程序时 我可以看到一个预期来源 大小 38 100 250 163 的框 但它是黑色的并且没有视频播放 Xcode 中有一个奇怪的输出 2012 08 23 15
  • Java调用重载方法[重复]

    这个问题在这里已经有答案了 考虑这个代码段 class StockServer StockServer String company int Shares double currentPrice double cashOnHand doub
  • phpMyAdmin 4.5.0.2 中无法识别 MySql“NOT IN”子句

    一个简单的 SQL 语句 例如 SELECT 1 from MyTable WHERE 1 NOT IN 2 生成 4 Errors were found during analysis 1 Unrecognized keyword nea
  • 测量网格之间的距离

    对于我的项目 我需要测量两个 STL 文件之间的距离 我编写了一个脚本 允许读取文件 将它们相对于彼此放置在所需的位置 现在 在下一步中 我需要检查一个物体到另一个物体的距离 库上是否有可用的函数或脚本允许我执行此过程 因为那时我想要定义诸
  • Flutter ListView.builder() 小部件的交叉轴占据了整个屏幕高度

    我在用ListView builder scrollDirection Horizo ntal 小部件内Container在颤振中 ListView 的主轴占据了预期的整个屏幕宽度 我希望ListView的crossAxis 垂直方向 占据
  • 如何通过将 python 中的列表与单独的列表进行比较来对列表进行排序? [复制]

    这个问题在这里已经有答案了 假设我有一个清单 A cat dog mouse horse bird rabbit 将用作参考列表 以及另一个列表 B dog rabbit horse bird cat dog 它具有与参考列表完全相同的元素
  • 颜色必须是 aRGB 十六进制值?

    所以我之前为污染数据集运行了一些代码 并且代码运行得很好 现在 我收到此错误 颜色必须是 aRGB 十六进制值 我唯一的代码行如下 pollution jawn pd read excel ObservationData irkfioc c
  • C++ 中的友元函数可以有一个类型具有私有析构函数的默认参数吗?

    在下一个示例中 类U带有私有析构函数有一个友元函数foo 这个友元函数有类型参数U带默认值U class U U friend void foo U void foo U Clang 和 MSVC 接受此代码 但 GCC 拒绝它并出现错误
  • “提交”和“修订”有什么区别

    提交和修订有什么区别 我们使用 SVN 并从 Atlassian Fisheye 获取指标 Fisheye 中有一份报告显示了 顶级提交者 按修订 和 顶级提交者 按提交 这里没有人能告诉我有什么区别 非常感谢 安迪 一次提交可以包含许多文
  • 微调超参数不会提高分类器的分数

    我遇到一个问题 即使用 GridSearchCV 微调超参数并不能真正改善我的分类器 我认为改进应该比这更大 我使用当前代码获得的分类器的最大改进约为 0 03 我有一个包含八列和不平衡二进制结果的数据集 对于评分 我使用 f1 并使用 K
  • 为什么我的 Snort 日志为空?

    我运行的是 macOS Sierra 10 12 3 sw vers ProductName Mac OS X ProductVersion 10 12 3 BuildVersion 16D32 我已经使用安装了snorthomebrew
  • 什么是“ld-2.11.1.so”以及如何查看源代码?

    我正在尝试对计算机上 RDTSC 指令的使用进行分类 我的第一个想法是运行我的 lib文件夹通过objdump并搜索 RDTSC for f in ls lib do echo f objdump d f grep n rdtsc done
  • 在oracle中使用触发器更改日期时出现问题

    我想创建一个触发器 可以修改或插入我的表 合同 中的日期 如果拥有当前合同的客户签署新合同 结束日期 前一个活动将是新活动开始日期的前一天 So my trigger is CREATE OR REPLACE TRIGGER TRIGGER