2016-04-26 13 views
0

ビューの作成に役立つ必要があります。各請求書広告申込情報が入力されると営業担当者手数料(売上高の10%)、在庫数量、および顧客残高が更新されます。私はエラーを取得し続けるoracle sqlでビューとトリガーを作成します

CREATE OR REPLACE TRIGGER UPDATE_COMMISSION 
AFTER INSERT ON INVOICE_LINE_ITEM FOR EACH ROW 
BEGIN 
UPDATE SALESPERSON 
SET COMMISSION = (SALE_PRICE * QUANTITY_SOLD) *.10 
WHERE :NEW.COMMISSION = SALESPERSON.COMMISSION; 
END; 

:悪いバインド変数 '

CREATE OR REPLACE VIEW NEW_INVOICE_LINE_ITEM 
AS 
SELECT COMMISSION, INV_QUANTITY, CUSTOMER_BALANCE 
FROM SALESPERSON, INVENTORY, CUSTOMER; 

これは私がトリガを持っているものです。

このは私がビューのために、今持っているものですnew.commission '

このマイデータベースのスキーマは次のとおりです。

DROP TABLE PO_LINE_ITEM; 
DROP TABLE PURCHASE_ORDER; 
DROP TABLE VENDOR; 
DROP TABLE INVOICE_LINE_ITEM; 
DROP TABLE INVENTORY; 
DROP TABLE INVOICE; 
DROP TABLE SALESPERSON; 
DROP TABLE CUSTOMER; 
CREATE TABLE CUSTOMER 
(CUSTOMER_ID DECIMAL(2,0) PRIMARY KEY,  
CUSTOMER_NAME CHAR(25), 
CUSTOMER_ADDRESS CHAR(15), 
CUSTOMER_ZIPCODE DECIMAL(5,0), 
CUSTOMER_CITY CHAR(15), 
CUSTOMER_STATE CHAR(2), 
CUSTOMER_BALANCE DECIMAL(4,2) 
); 
CREATE TABLE SALESPERSON 
(SALESPERSON_ID DECIMAL(3,0) PRIMARY KEY, 
SALESPERSON_NAME CHAR(25), 
COMMISSION DECIMAL(5,2) 
); 
CREATE TABLE INVOICE 
(INVOICE_ID DECIMAL(3,0), 
CUSTOMER_ID DECIMAL(2,0), 
SALESPERSON_ID DECIMAL(3,0), 
ITEM_NUM DECIMAL(4,0), 
INVOICE_DATE DATE, 
PRIMARY KEY (CUSTOMER_ID, SALESPERSON_ID), 
FOREIGN KEY (CUSTOMER_ID) REFERENCES CUSTOMER, 
FOREIGN KEY (SALESPERSON_ID) REFERENCES SALESPERSON 
); 
CREATE TABLE INVENTORY 
(INV_NUM DECIMAL(4,0) PRIMARY KEY, 
DESCRIPTION CHAR(10), 
INV_QUANTITY DECIMAL(4,0), 
INV_PRICE DECIMAL(7,2), 
INV_COST DECIMAL(7,2), 
INVOICE_ID DECIMAL(3,0), 
ITEM_NUM DECIMAL(4,0), 
FOREIGN KEY (INVOICE_ID, ITEM_NUM) REFERENCES INVOICE 
); 
CREATE TABLE INVOICE_LINE_ITEM 
(QUANTITY_SOLD DECIMAL(4,0), 
SALE_PRICE DECIMAL(7,2), 
INVOICE_ID DECIMAL(3,0), 
INV_NUM DECIMAL(4,0), 
ITEM_NUM DECIMAL(4,0), 
PRIMARY KEY (INVOICE_ID, INV_NUM, ITEM_NUM), 
FOREIGN KEY (INVOICE_ID, ITEM_NUM) REFERENCES INVOICE, 
FOREIGN KEY (INV_NUM) REFERENCES INVENTORY 
); 
CREATE TABLE VENDOR 
(VENDOR_ID DECIMAL(2,0) PRIMARY KEY, 
VENDOR_NAME CHAR(25), 
CITY CHAR(15), 
STATE CHAR(2), 
VENDOR_BALANCE DECIMAL(4,2) 
); 
CREATE TABLE PURCHASE_ORDER 
(PURCHASE_ORDER_ID DECIMAL(2,0) PRIMARY KEY, 
BALANCE DECIMAL(4,2), 
SHIPMENT CHAR(10), 
PURCHASE_ORDER_DATE DATE, 
VENDER_ID DECIMAL (2,0), 
FOREIGN KEY (VENDER_ID) REFERENCES VENDOR 
); 
CREATE TABLE PO_LINE_ITEM 
(PO_DATE DATE, 
PO_BALANCE DECIMAL(4,0), 
ITEM_NUM DECIMAL(4,0), 
INV_QUANTITY DECIMAL(4,0), 
INV_NUM DECIMAL(4,0), 
PURCHASE_ORDER_ID DECIMAL(2,0), 
PRIMARY KEY (INV_NUM, PURCHASE_ORDER_ID), 
FOREIGN KEY (INV_NUM) REFERENCES INVENTORY, 
FOREIGN KEY (PURCHASE_ORDER_ID) REFERENCES PURCHASE_ORDER); 

ありがとうございます!

+0

どのクライアントを使用していますか?コードを実行する間違った方法を使用すると、SQL Developerが時々それを行いますが、どちらの方法であっても手を覚えることはできません。 'run statement'を使用している場合は 'script run'を試してください。逆も同様です。それが問題に両方のテーブルの構造を追加するのに役立たない場合。ビューの妥当性は何ですか?なぜ、それには結合条件(または実際には適切な結合条件)がありませんか? –

+1

'invoice_line_item'は'コミッション '列を持っていません...あなたは親請求書から営業担当者を見つけるはずですか?そしてあなたは現在の任務を置き換えているの? –

+1

これはトリガーの悪い使用であるとだけコメントします。これは申請手続にあるべきです。それは非常にバギーに見えるという事実の何も言わない。そのWHERE条件について注意深く考えてください。現在のコミッションが計算された値を持つすべてのセールスマンのコミッションを更新しています。私はそれがあなたのことであると疑っています – EdStevens

答えて

0

invoice_line_itemには列commissionが含まれていません。これがのバインド変数の無効な理由のエラーです。あなたはここのようなあなたのトリガコードを書き換える必要があります:あなたのviewあなたはここに、テーブルを結合する方法の条件を添付していなかったで

create or replace trigger update_commission 
    after insert on invoice_line_item for each row 
begin 
    update salesperson sp 
    set sp.commission = sp.commission + (:new.sale_price * :new.quantity_sold * .1) 
    where sp.salesperson_id = 
     (select salesperson_id 
      from invoice i 
      where i.invoice_id = :new.invoice_id); 
end; 

はこれを行う方法の例です:

create or replace view vw_invoices as 
    select ili.invoice_id, ili.quantity_sold, ili.sale_price, 
     i.salesperson_id, sp.salesperson_name 
    from invoice_line_item ili 
    join invoice i on i.invoice_id = ili.invoice_id 
    join salesperson sp on sp.salesperson_id = i.salesperson_id; 

たあなたの情報に応じて、表示したい - 適切なテーブルを接続し、正しい結合を使用する。

+0

私はそれが働いているが、それは私に行8のエラーが表示されます: –

+0

新しい投稿はここに投稿されて:http://stackoverflow.com/questions/36903748/sqlトリガーフォービュー –

関連する問題