[英]Call a stored procedure in a trigger? SQL
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;
如果用戶嘗試在營業時間做某事,我的程序應該有效,並且觸發器是確保不允許用戶在營業時間插入或更新表 job_history?
我已經工作了幾個小時,但我找不到問題的幫助,我應該如何通過觸發器調用我的程序
謝謝你
只需使用TIME_CHECK;
:
CREATE TRIGGER mod_job_history
before insert or update on JOB_HISTORY
for each row
BEGIN
TIME_CHECK;
END mod_job_history;
/
此外,您的程序將無法按預期工作,因為JOUR
最初設置為NULL
並且您在WHERE
子句中與它進行比較。
您可以使用以下過程(無論您使用哪種語言,該過程都有效):
CREATE PROCEDURE TIME_CHECK
AS
day PLS_INTEGER := TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW');
time INTERVAL DAY TO SECOND := (SYSDATE - TRUNC(SYSDATE)) DAY TO SECOND;
BEGIN
IF ( day IN (0, 1, 2, 3, 4) -- Monday to Friday
AND time BETWEEN INTERVAL '8' HOUR
AND INTERVAL '22' HOUR
)
OR
( day = 5 -- Saturday
AND time BETWEEN INTERVAL '08' HOUR
AND INTERVAL '12' HOUR
)
THEN
-- Inside business hours
NULL;
ELSE
raise_application_error(-20111,'OUT OF BUSINESS HOURS');
END IF;
END;
/
db<> 在這里擺弄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.