调用触发器中的存储过程?SQL
--触发 如果用户是否在工作时间尝试执行某些操作,并且触发器确保不允许用户在工作时间插入或更新表job_history,则我的过程应该有效 我已经做了好几个小时了,我找不到什么错误的帮助plz,我应该如何通过我的触发器调用我的程序调用触发器中的存储过程?SQL,sql,oracle,plsql,Sql,Oracle,Plsql,--触发 如果用户是否在工作时间尝试执行某些操作,并且触发器确保不允许用户在工作时间插入或更新表job_history,则我的过程应该有效 我已经做了好几个小时了,我找不到什么错误的帮助plz,我应该如何通过我的触发器调用我的程序 谢谢只需使用时间检查: 创建触发器模块作业历史记录 在插入或更新作业历史记录之前 每行 开始 时间检查; 结束mod_job_历史记录; / 此外,由于JOUR最初设置为NULL,并且您在WHERE子句中与之进行比较,因此您的过程将无法正常工作 您可以使用以下过程(
谢谢只需使用
时间检查代码>:
创建触发器模块作业历史记录
在插入或更新作业历史记录之前
每行
开始
时间检查;
结束mod_job_历史记录;
/
此外,由于JOUR
最初设置为NULL
,并且您在WHERE
子句中与之进行比较,因此您的过程将无法正常工作
您可以使用以下过程(无论您使用哪种语言,该过程都有效):
创建过程时间\u检查
作为
天PLS_整数:=TRUNC(SYSDATE)-TRUNC(SYSDATE,'IW');
从天到秒的时间间隔:=(SYSDATE-TRUNC(SYSDATE))从天到秒;
开始
如果(0,1,2,3,4中的一天)--周一到周五
以及间隔“8”小时之间的时间
间隔22小时
)
或
(天=5——星期六)
以及间隔'08'小时之间的时间
间隔12小时
)
然后
--营业时间内
无效的
其他的
提出申请错误(-20111,“营业时间以外”);
如果结束;
结束;
/
dbfiddle您正在使用哪些数据库管理系统?上面的代码是特定于产品的。Oracle Sql Developer您是否告诉我们出了什么问题?我的触发器不完整我真的不知道如何正确调用我的过程只需编写TIME\u CHECK
调用该过程。然而,这个过程有严重的问题,所以你不会得到你期望的结果。
CREATE OR REPLACE PROCEDURE TIME_CHECK
as
JOUR date;
HEURE date;
BEGIN
select to_char(sysdate, 'DAY'), to_char(sysdate,'HH.MI.SS')
into jour, heure
FROM DUAL
WHERE JOUR = to_char(sysdate, 'DAY') AND HEURE = to_char(sysdate,'HH.MI.SS');
if (jour not between 'SUNDAY' AND 'FRIDAY') and (heure not between '08.00.00' AND '22.00.00')
or (jour !='SATURDAY') AND (HEURE NOT BETWEEN '08.00.00' AND '12.00.00')
then raise_application_error(-20111,'OUT OF BUSINESS HOURS');
end if;
end;
CREATE OR REPLACE TRIGGER mod_job_history
before insert or update on JOB_HISTORY
for each row
BEGIN
CALL TIME_CHECK
---??????
END mod_job_history;