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