0

列の領収書_on = 四半期ごとの利息の場合に列を更新するトリガーを作成しています。そうであれば、列の合計を見つけて、列の合計を検索する必要があります l_app_file_id テーブルからの列 l_app_file_id のローン 列 r_app_file_id のテーブル 領収書_history のローン また、列の月名テーブルの領収書_履歴の領収書_日付は現在の月と同じである必要がありますが、このトリガーを完全に構造化する方法についてはわかりません

-- Trigger DDL Statements
DELIMITER $$

USE `lms`$$

CREATE
DEFINER=`root`@`localhost`
TRIGGER `lms`.`updateloan`
BEFORE UPDATE ON `lms`.`receipt_history`
FOR EACH ROW
BEGIN

if new.receipt_on='Quarterly Interest' then 
    SET new.TEST=SUM(receipt_amount)
    join loan l on 
    l.l_app_file_id=r.r_app_file_id
    WHERE r_app_file_id=l_app_file_id
    and monthname(receipt_date)=MONTHNAME(now())
    end if;    

  END$$
4

1 に答える 1

1

ご存知のように、setステートメントに参加することはできません。
そのためにはselectステートメントを使用する必要があります。
この構文は機能しますが、set i:= (select sum(x) from a);
私は個人的にSELECT something INTO avariable構文を好みますが、それは好みの問題です。

DELIMITER $$

USE `lms`$$

CREATE
DEFINER=`root`@`localhost`
TRIGGER `lms`.`updateloan`
BEFORE UPDATE ON `lms`.`receipt_history`
FOR EACH ROW
BEGIN
  DECLARE itest integer;

  if new.receipt_on='Quarterly Interest' then 
    SELECT SUM(r.receipt_amount) INTO itest FROM receipt_history r
    INNER JOIN loan l ON (l.l_app_file_id=r.r_app_file_id)
    WHERE monthname(r.receipt_date)=MONTHNAME(now());
    SET new.test = itest;
  end if;    

  END$$

注:
結合基準はすでに(一種の)where句であるため、句でそれを繰り返す必要はありませんwhere
トリガー内のすべてのステートメントは、;.

于 2012-04-12T18:51:56.710 に答える