我想创建一个可以在表“合同”中修改或插入日期的触发器:
“如果具有当前合同的客户签订了新合同,则前一个合同的结束日期将是新合同开始日期的前一天”
因此,我的 触发条件 是:
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语句,不如调用存储过程。
问题内容: 我有一个班上的一个项目。当我们的两个表对它们进行了更改时,我们需要创建一个日志:insert / update /delete。我们需要使用Oracle触发器和PL-SQL。在日志文件中,我们需要记录UserID,DateTime,IPAddress和Event(插入/更新/删除)。我知道如何设置触发器,但是我遇到的主要问题是UserID(从以UserID在Users表中登录到PHP站
问题内容: 我已经阅读了有关创建触发器的Oracle文档,并且正在按照显示的方式进行操作,但是这是行不通的。我的目标是使用出现在TPM_TRAININGPLAN表中的最小STARTDATE更新TPM_PROJECT表。因此,每次有人更新TPM_TRAININGPLAN中的STARTDATE列时,我都想更新TPM_PROJECT表。这是我正在尝试的方法: 创建的触发器没有错误,但是我得到了警告: 当
我在向表单输入日期时遇到了一个问题,我查看了其他帖子,但他们给我的解决方案对我不起作用:(错误指示我一个无效的月份错误。 我尝试使用TO_DATE('...','dd/mm/yyyy'),但通过这样做引发了另一个错误(actualizaoferta.php): 我试了很多方法来输入日期,但什么都没有。 程序 提前致谢:)
问题内容: 我正在尝试为我的表创建一个触发器,该触发器根据某个标志设置为“ Y”的时间自动添加发布日期 我没有创建触发器的丰富经验,但到目前为止,这是我所拥有的 更新列时出现此错误 触发器“ USER.ADD_CREATE_DT”无效且重新验证失败 有任何想法吗? 谢谢 问题答案: 使用WHEN子句: 或使用IF: 在这种情况下,WHEN更合适,更有效。
问题内容: 我该如何解决Oracle不允许在触发器中进行子查询的局限性。 这是我尝试创建的示例触发器,但由于无法使用子查询而无法创建。 问题答案: 这个触发器可以做到: 我假设从项目中进行选择将始终找到一行;如果不是,它将引发您可能需要处理的NO_DATA_FOUND异常。
日期格式如下所示:2020-07-11 23:11:52 我正在使用fetch从csv文件中提取数据并将其拆分为单个数据 如何将此字符串(日期)更改为带时间的日期,以便在图表上绘图