私は2つのテーブルを持っています。トリガーを使用して複数のテーブルにレコードを挿入するにはどうすればよいですか?
同じレコードを両方のテーブルに同時に挿入したいとします。
つまり、最初のテーブルのレコードを挿入している間、この同じレコードもトリガを使用して2番目のテーブルに挿入されます。
このプロセスでの経験やアドバイスはありますか?
私は2つのテーブルを持っています。トリガーを使用して複数のテーブルにレコードを挿入するにはどうすればよいですか?
同じレコードを両方のテーブルに同時に挿入したいとします。
つまり、最初のテーブルのレコードを挿入している間、この同じレコードもトリガを使用して2番目のテーブルに挿入されます。
このプロセスでの経験やアドバイスはありますか?
ストアドプロシージャを使用している場合、あなたは簡単にこの
CREATE PROCEDURE sp_Insert
@Value varchar(10)
AS
insert into table1 (...,...) values (@value,...)
insert into table2 (...,...) values (@value,...)
を管理することができ、私はトリガーを超えるエリックのメソッドを使用してお勧めします。トリガーはパフォーマンス上の問題を引き起こす傾向があり、多くの場合、トリガーが存在することを忘れて予期しない動作が発生します。しかし、トリガーを使用したい場合、それは動作します。ここに例があります:
CREATE TRIGGER trgTest ON Test
FOR INSERT
AS
INSERT Test2
(Id, value)
SELECT Id, Value
FROM Inserted
カーソルコンセプトを使用できます!
CREATE OR REPLACE TRIGGER bi_order
BEFORE INSERT
ON ord
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
WHEN (NEW.payment_type = 'CREDIT')
DECLARE
CURSOR cur_check_customer IS
SELECT 'x'
FROM customer
WHERE customer_id = :NEW.customer_id
AND credit_rating = 'POOR';
lv_temp_txt VARCHAR2(1);
lv_poor_credit_excep EXCEPTION;
BEGIN
OPEN cur_check_customer;
FETCH cur_check_customer INTO lv_temp_txt;
IF (cur_check_customer%FOUND) THEN
CLOSE cur_check_customer;
RAISE lv_poor_credit_excep;
ELSE
CLOSE cur_check_customer;
END IF;
EXCEPTION
WHEN lv_poor_credit_excep THEN
RAISE_APPLICATION_ERROR(-20111, 'Cannot process CREDIT ' ||
'order for a customer with a POOR credit rating.');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20122, 'Unhandled error occurred in' ||
' BI_ORDER trigger for order#:' || TO_CHAR(:NEW.ORDER_ID));
END bi_order;
キャップで簡単.... – Alex
どのようにレコードを元のテーブルに挿入して始めますか? – GregD