2016-03-25 8 views
0

Ich bin ein Anfänger in Trigger. Bitte entschuldigen Sie, wenn ich eine dumme Frage gestellt habe. Ich habe versucht, einen Auslöser zu schreiben, der einen Feldwert (Name) in sol_erp_2014_admission_academic_course_master Tabelle mit Änderung in sol_erp_2014_academic_course_master Tabelle aktualisiert. Im Folgenden habe ich die Struktur der Tabellen und des Auslösers erwähnt, die ich geschrieben habe.Ausgabe auf Trigger in Mysql

Struktur der sol_erp_2014_academic_course_master Tabelle:

CREATE TABLE IF NOT EXISTS `sol_erp_2014_academic_course_master` (
     `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'cbcs_major_id', 
     `major_type` int(11) NOT NULL, 
     `section_id` int(11) NOT NULL, 
     `academic_institute_id` int(11) NOT NULL, 
     `academic_department_id` int(11) NOT NULL, 
     `specialization_id` varchar(255) NOT NULL DEFAULT '0', 
     `code` varchar(200) NOT NULL, 
     `name` varchar(200) NOT NULL, 
     `unit` int(11) NOT NULL, 
     `no_of_year` int(11) NOT NULL, 
     `max_num_of_year` int(11) NOT NULL, 
     `no_of_sem` int(11) NOT NULL, 
     `tot_min_credit` int(11) NOT NULL, 
     `tot_max_credit` int(11) NOT NULL, 
     `min_sem_pass_prctng` decimal(4,2) NOT NULL, 
     `routine_system` int(11) NOT NULL COMMENT '1->Day System; 2-> Week System', 
     `exam_evalution_grade_master_id` int(11) NOT NULL, 
     `status` enum('0','1') NOT NULL DEFAULT '1', 
     `date_added` date NOT NULL, 
     `date_edited` date NOT NULL, 
     `is_deleted` int(2) NOT NULL DEFAULT '0', 
     PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='MAJOR' AUTO_INCREMENT=1 ; 

Struktur der sol_erp_2014_admission_academic_course_master Tabelle:

CREATE TABLE IF NOT EXISTS `sol_erp_2014_admission_academic_course_master` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `academic_institute_id` int(11) NOT NULL, 
    `academic_department_id` int(11) NOT NULL, 
    `name` varchar(255) NOT NULL, 
    `status` enum('0','1') NOT NULL DEFAULT '1', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

nun der Auslöser, was ich geschrieben habe:

DELIMITER $$ 

DROP TRIGGER /*!50032 IF EXISTS */ `erp_adbu`.`sol_erp_2014_academic_course_master_update_before`$$ 

CREATE 
    /*!50017 DEFINER = 'root'@'%' */ 
    TRIGGER `sol_erp_2014_academic_course_master_update_before` BEFORE UPDATE ON `sol_erp_2014_academic_course_master` 
    FOR EACH ROW BEGIN 
    DECLARE name_var VARCHAR(255); 
    DECLARE id_var INT; 

    SELECT name 
    INTO name_var 
    FROM sol_erp_2014_academic_course_master 
    WHERE sol_erp_2014_academic_course_master.id = NEW.id; 

    UPDATE sol_erp_2014_admission_academic_course_master SET name = name_var WHERE id = NEW.id; 
    END; 
$$ 

DELIMITER ; 

Jetzt bin ich zu aktualisieren einen Datensatz aus sol_erp_2014_academic_course_master Tisch. Aber der entsprechende Datensatz von sol_erp_2014_admission_academic_course_master Tabelle wird nicht aktualisiert.

Kann mir bitte jemand helfen?

Vielen Dank im Voraus.

Antwort

0

Es gibt zwei Probleme mit Ihrem vorhandenen Trigger:

  1. Es sollte ein AFTER-Trigger sein, nicht ein BEFORE-Trigger
  2. Sie müssen keine Variablen deklarieren. Sie können den Wert NEW.name im Update verwenden.

versuchen, etwas wie folgt aus:

DELIMITER $$ 

DROP TRIGGER /*!50032 IF EXISTS */ `erp_adbu`.`sol_erp_2014_academic_course_master_update_before`$$ 

CREATE 
    /*!50017 DEFINER = 'root'@'%' */ 
    TRIGGER `sol_erp_2014_academic_course_master_update_before` AFTER UPDATE ON `sol_erp_2014_academic_course_master` 
    FOR EACH ROW BEGIN 
     UPDATE sol_erp_2014_admission_academic_course_master SET name = NEW.name WHERE id = NEW.id; 
    END; 
$$ 

DELIMITER ; 
+0

Vielen Dank für Ihre Antwort. Es funktioniert gut. – Soumya