CREATE OR REPLACE PROCEDURE insert_ol
(
p_ord_id order_line.order_id%type,
p_pid order_line.product_id%type,
p_qty order_line.quantity%type,
p_price order_line.price%type,
p_pname order_line.prod_name%type,
p_alias order_line.prod_alias%type)
IS
BEGIN
INSERT INTO order_line values (p_ord_id, p_pid, p_qty, p_price, p_pname,
p_alias);
END;
を発射そして、私は、代わりにこのようなTRIGGER OF持っていない:私はにデータを挿入するとき代わりのトリガ
CREATE OR REPLACE FORCE VIEW "OL_INS"
AS
SELECT ot.order_id, prd.prod_code, ot.qty, prd.prod_cost, prd.prod_name,
ot.palias
FROM ol_temp ot
JOIN product prd
ON ot.palias=prd.prod_alias;
:
CREATE OR REPLACE TRIGGER insert_ol
INSTEAD OF INSERT ON ol_ins
FOR EACH ROW
BEGIN
insert_ol
(:new.order_id,:new.prod_code,
:new.qty,prod_cost,:new.prod_name,:new.palias);
end;
トリガがベースとなっている図であるが"OL_TEMP"テーブルの場合、部分データは "PRODUCT"テーブルと結合され、ビューに入ります。しかしトリガは起動せず、プロシージャを呼び出してデータを "ORDER_LINE"テーブルに挿入します。
私がやっている間違いとそれを修正する方法は何ですか?
トリガは 'prod_cost'ではなく':new.prod_cost'を使うべきですが、コンパイルに失敗し、ビューに挿入するとエラーが発生します。しかし、 "OL_TEMP'テーブルにデータを挿入すると、テーブルを直接操作すると、ビューに対するトリガは起動しません。 'OL_INS'ビューに挿入するとどうなりますか? –
私は直接ビューにデータを挿入し、これが起こってみました:ol_ins INTO INSERT VALUES(4,37、3、35、 'ミネラルウォーター'、 'MW')コマンドラインで エラー:1列:1 エラー・レポート - SQLエラー:ORA-01779:非キー保存表にマップする列を変更できません 01779. 00000 - "非キー保存表にマップする列を変更できません" *原因: が非キー保存テーブルにマップする結合ビューの列を挿入または更新するようになりました。 *処置:基礎となる基本表を直接変更してください。 –
また、 'OL_TEMP'とは何ですか?そして、それは他のテーブルとどう関係していますか? –