반응형
SQL에서 매일 트리거를 동시에 실행하는 방법
우리는 마이크로뱅킹 프로젝트를 진행 중인데 데이터베이스 차원에서 금리를 계산해야 합니다.따라서 절차와 트리거를 사용했지만 아래 절차를 수행하려면 트리거를 매일 한 번에 실행해야 합니다.트리거를 생성할 수 있는 솔루션을 제공할 수 있습니까?잘 부탁드립니다
DELIMITER //
create procedure addFDInterestToAccount(in account_number bigint(20))
BEGIN
declare interest float default 0;
declare account_type varchar(10);
declare rate float;
declare savings_account bigint(20);
start transaction;
select balance from fd_account where account_no = account_number into interest;
SELECT plan_id from fd_account where account_no = account_number into account_type;
SELECT saving_account_no from fd_account where account_no = account_number into savings_account;
select interest_rate from fd_plan where plan_id = account_type into rate;
set interest = interest*rate/1200;
insert into transaction (transaction_id, account_no, credit_debit, date_time, amount, type_, agent_id, is_fee) values (null, savings_account, 'debit', now(), interest, 'not_special', null, false);
update account set balance = balance + interest where account_no = savings_account;
commit;
END //
DELIMITER ;
call addFDInterestToAccount(90842311);
당신의 요구 사항을 이해한 이상 SQL Events를 사용할 수 있을 것 같습니다.일반적인 구문은 이렇습니다.
CREATE [OR REPLACE]
[DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
이를 얻기 위해 다음 코드를 수정/사용할 수 있습니다.
CREATE EVENT example
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP
DO call addFDInterestToAccount(90842311);
자세한 내용은 여기를 클릭해 주세요.
또한 이벤트를 실행하기 전에 이 쿼리를 실행해야 합니다.
SET GLOBAL event_scheduler = ON;
트리거는 삽입, 업데이트 또는 삭제 스테이트먼트에 응답하여 실행되는 절차로 정의됩니다.이러한 DML 조작 중 하나를 실행할 때마다 실행됩니다.트리거를 하루에 한 번 실행하도록 스케줄링할 수 없습니다.
MySql 문서(트리거를 구현하는 모든 데이터베이스에 적용 가능):
트리거는 스테이트먼트가 관련 테이블의 행을 삽입, 갱신 또는 삭제할 때 활성화되도록 정의되어 있습니다.이러한 행 연산은 트리거 이벤트입니다.
대신 태스크 스케줄러를 찾아야 합니다.각 OS에 독자적인 스케줄러 소프트웨어가 있거나 서드파티 스케줄러 소프트웨어를 찾을 수 있습니다.
언급URL : https://stackoverflow.com/questions/53511399/how-to-execute-a-trigger-everyday-at-once-in-sql
반응형
'programing' 카테고리의 다른 글
MariaDB에서 MySQL의 JSONOBJECTAGG()와 동등한 방법이 있습니까? (0) | 2022.10.21 |
---|---|
EC2 인스턴스에서 RDS 인스턴스에 연결할 수 없습니다. (0) | 2022.10.21 |
Panda GroupBy를 사용하여 각 그룹(수, 평균 등)에 대한 통계를 얻으시겠습니까? (0) | 2022.10.21 |
C 또는 C++에서 문자열을 되돌리려면 어떻게 해야 합니까? (0) | 2022.10.21 |
프래그먼트 내의 컨텍스트 사용 (0) | 2022.10.21 |