2016-01-15 24 views
-1

我已經創建了兩個表customerorders,我已經在customer表中插入了一些數據,但在訂單表中沒有任何內容。現在,我想在訂單表上創建一個觸發器,該訂單表將在訂單表o_id(在訂單表中定義爲foreign key)中僅複製id列(在客戶表中定義爲primary key)。如何在派生表上創建觸發器?

我想檢查我創建的觸發器,並在發現任何錯誤時修復它。

我的訂單表觸發器:

CREATE OR REPLACE TRIGGER tri_order 
     BEFORE INSERT 
     ON orders 
     FOR EACH ROW 
    BEGIN 
     SELECT ID 
     INTO :NEW.o_id 
     FROM customer; 
    END; 

感謝。

+0

你確實有問題。選擇'SELECT ID FROM customer;'將選擇多行,而不是一行。您應該添加一個where子句來指定要獲取的行。 –

+0

請爲客戶和訂單添加定義,因爲答案很瘋狂。 –

+0

無需觸發器:'插入訂單(o_id)從客戶選擇ID –

回答

1

我想創建訂單表的觸​​發器,將只複製 ID列 你就可以開始做這樣的,(順便說一句我不明白的地方要使用你的派生表?什麼是查詢)

CREATE OR REPLACE TRIGGER tri_order 
     BEFORE INSERT 
     ON orders 
     FOR EACH ROW 
     declare cnt number (3); 
    BEGIN 

    select count(1) into cnt from customer where id=:new.id; // its is checking 
    if cnt=0 then 
    insert into customer (id) values (:new.id); 
    end if; 
    // you can add raise error here 
    END; 
/
+0

您將訂單ID插入客戶? –

+0

他的問題不太清楚。 – Moudiz

+0

我想客戶表的這個ID複製到訂單o_id表就像「在級聯更新」的作品,爲什麼你不明白:( – Ahtisham

0

要值從customer表複製到orders表觸發的幫助,所以首先你會需要以不orders表創建customer表中的觸發器,因爲在客戶表中所做的觸發器將在每次插入被觸發一次,這將在訂單表中插入一個值。

CREATE OR REPLACE TRIGGER tri_order 
AFTER INSERT 
ON customer 
FOR EACH ROW 
BEGIN 
INSERT INTO orders 
      (o_id) 
    SELECT :NEW.ID 
    FROM customer; 
END; 
+0

你不理解我男人我想在訂單表上創建觸發器,以便每當我在訂單表中插入一些數據時,它應該自動將客戶中的ID值複製到訂單表的o_id – Ahtisham

+0

啊好吧..所以那裏必須是客戶和訂單表之間的關係。因爲您想要從客戶表中獲取數據。你從什麼基礎上獲取客戶的數據?具體條件是什麼? – Dawn

+0

@AhtishamChishti你想拷貝什麼數據? – Moudiz

0

您必須指定查找客戶的規則。 例如:

CREATE OR REPLACE TRIGGER tri_order 
     BEFORE INSERT 
     ON orders 
     FOR EACH ROW 
    BEGIN 
     SELECT c.ID 
     INTO :NEW.o_id 
     FROM customer c 
     WHERE c.customer_code = :NEW.customer_code; 
    END; 
+0

是客戶表的「c」對象? – Ahtisham

+0

c只是表的一個別名 –

+0

哦,我看到了:)感謝bro – Ahtisham