1
我嘗試創建一個觸發器,以獲取購買價格(preco_custo),當購買價格爲購買(E)並獲得銷售價格(preco_venda)時(S)。但無論它是什麼類型,它都會獲得購買價格。有人可以向我解釋爲什麼這不起作用嗎?Oracle觸發器得到錯誤的值,我做錯了什麼?
CREATE OR REPLACE TRIGGER P_CUSTO
BEFORE INSERT ON FRANCISCO.MOVIMENTACAO
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
V_COUNT PLS_INTEGER := NULL;
V_TIPO FRANCISCO.MOVIMENTACAO.TIPO%TYPE := NULL;
V_PCUSTO FRANCISCO.PRODUTOS.PRECO_CUSTO%TYPE := NULL;
V_PVENDA FRANCISCO.PRODUTOS.PRECO_VENDA%TYPE := NULL;
BEGIN
SELECT COUNT(ROWNUM), NVL(MAX(TIPO),'E')
INTO V_COUNT, V_TIPO
FROM FRANCISCO.MOVIMENTACAO
WHERE ID = :New.ID;
SELECT COUNT(ROWNUM), NVL(MAX(PRECO_CUSTO),0), NVL(MAX(PRECO_VENDA),0)
INTO V_COUNT, V_PCUSTO, V_PVENDA
FROM FRANCISCO.PRODUTOS
WHERE ID = :New.ID_PRODUTO;
IF UPPER(V_TIPO) = 'E' THEN
:New.CUSTO_UNITARIO := V_PCUSTO;
ELSE
:New.CUSTO_UNITARIO := V_PVENDA;
END IF;
END;
/
如何修復這個觸發器後,我使用函數返回的值?
我看不到你想要做的和觸發器中的代碼之間的關係。你爲什麼要算'rownum'?兩張桌子之間有什麼關係?你爲什麼要運行兩個查詢,而不是一起加入表格? – 2014-10-02 23:56:08
一張桌子是註冊產品,另一張是註冊銷售/採購... – 2014-10-03 01:03:54