簡體   English   中英

在觸發器中調用存儲過程? SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM