Excerpts from Daniel Polski's message of 2015-09-24 07:38:24 -0300:
> Hello!
>
> --Table t1 contains some "base" data
> CREATE TABLE t1 (
> id INTEGER PRIMARY KEY,
> name VARCHAR(10),
> value INT NOT NULL
> );
>
> INSERT INTO t1 VALUES(1, 't1 1', 0);
> INSERT INTO t1 VALUES(2, 't1 2', 0);
>
> --Table t2 can contain extra data for a row in table t1
> CREATE TABLE t2(
> id INTEGER PRIMARY KEY,
> t1_id INT NOT NULL,
> data INT NOT NULL,
> CONSTRAINT 'FK_t2_001' FOREIGN KEY( t1_id ) REFERENCES t1 ( id )
> );
> INSERT INTO t2 VALUES(1, 1, 10);
> INSERT INTO t2 VALUES(2, 1, 20);
> INSERT INTO t2 VALUES(3, 2, 30);
>
> CREATE TABLE t3 (
> id INTEGER PRIMARY KEY,
> name VARCHAR(10)
> );
>
> CREATE TABLE t4(
> t2_id INT NOT NULL,
> t3_id INT NOT NULL,
> CONSTRAINT 'FK_t4_001' FOREIGN KEY( t2_id ) REFERENCES t2 ( id ),
> CONSTRAINT 'FK_t4_002' FOREIGN KEY( t3_id ) REFERENCES t3 ( id )
> );
>
>
>
> -- Here is where my real question starts. Can I fetch a list of rows in
> a trigger
> -- and update different tables from that data? Im looking for some kind
> -- of looping over the rows found in t2, where I can insert data to t3 and
> -- t4 for each row found in t2.
>
> CREATE TRIGGER trigger_1 AFTER UPDATE OF value ON t1
> WHEN new.value = 1
> AND EXISTS (SELECT id FROM t2 WHERE t1_id = new.id)
> AND (some more rules)
> ...
> -- For each row in t2 with a t1_id referencing the t1 id,
> -- 1: insert a row into t3
> -- 2: insert a row into t4 binding the newly created row in t3 to the
> corresponding row in t2
may try this to insert into t3.
CREATE TRIGGER trigger_on_table_1
AFTER UPDATE OF value ON t1
FOR EACH ROW WHEN NEW.VALUE = 1 AND EXISTS (SELECT id FROM te WHERE
ti_id = NEW.id)
BEGIN
-- SELECT THE ROWS FROM t2 to insert values
INSERT INTO t3 VALUES(id, name) SELECT t2.t1_id, 'dummy' FROM t2
WHERE t2.t1_id == NEW.id;
END;
Then you may wish to set a trigger to t4 itself to handle the newly
created t3 rows.
--
Marco Arthur @ (M)arco Creatives