如何使用触发器SQL比较不同表中的两个值? 创建触发器比较器\u Prix 在更新文章之前 每行开始 选择ARTICLE.PRIXVENTE、ARTICLE.N_PRODUIT、ARTICLE.N_fabrican、LIEN_fabrican_PRODUIT.Prixfabrican、LIEN_fabrican_PRODUIT.N_PRODUIT、LIEN_fabrican_PRODUIT.N_fabrican 来自文章,LIEN_Fabrican_PRODUIT 其中ARTICLE.N_FABRICANT=留置权生产商,ARTICLE.N_生产商=留置权生产商,ARTICLE.N_生产商; 如果(NEW.PRIXVENTE
我试图创建一个触发器,它编码以下规则:销售价格必须始终高于制造价格 下面是我得到的错误: 错误(2,3):PL/SQL:SQL语句被忽略如何使用触发器SQL比较不同表中的两个值? 创建触发器比较器\u Prix 在更新文章之前 每行开始 选择ARTICLE.PRIXVENTE、ARTICLE.N_PRODUIT、ARTICLE.N_fabrican、LIEN_fabrican_PRODUIT.Prixfabrican、LIEN_fabrican_PRODUIT.N_PRODUIT、LIEN_fabrican_PRODUIT.N_fabrican 来自文章,LIEN_Fabrican_PRODUIT 其中ARTICLE.N_FABRICANT=留置权生产商,ARTICLE.N_生产商=留置权生产商,ARTICLE.N_生产商; 如果(NEW.PRIXVENTE,sql,oracle,triggers,Sql,Oracle,Triggers,我试图创建一个触发器,它编码以下规则:销售价格必须始终高于制造价格 下面是我得到的错误: 错误(2,3):PL/SQL:SQL语句被忽略 错误(2,69):PL/SQL:ORA-00904:“留置权人”.“PRIXFABRICANT”:无效标识符 错误(2.92):PLS-00302:必须声明组件“PRIXFABRICANT”。 错误(5,3):PL/SQL:语句被忽略 错误(5,10):PLS-00201:必须声明标识符“NEW.PRIXVENTE” 它不是new,而是:new(缺少冒号) 不
错误(2,69):PL/SQL:ORA-00904:“留置权人”.“PRIXFABRICANT”:无效标识符
错误(2.92):PLS-00302:必须声明组件“PRIXFABRICANT”。
错误(5,3):PL/SQL:语句被忽略
错误(5,10):PLS-00201:必须声明标识符“NEW.PRIXVENTE”
它不是
new
,而是:new
(缺少冒号)
不过,这不是唯一的问题;不能从正在修改的表中进行选择;应出现变异表错误。幸运的是,您不必从文章
中进行选择,因为您可以使用相同的:new
值引用其值
ORA-00904
表示您使用了该表中不存在的列名。由于您没有发布表的描述,我只是重复您所写的内容。你自己修吧
大概是这样的:
CREATE TRIGGER Comparer_Prix
BEFORE UPDATE ON ARTICLE
FOR EACH ROW BEGIN
SELECT ARTICLE.PRIXVENTE, ARTICLE.N_PRODUIT, ARTICLE.N_FABRICANT, LIEN_FABRICANT_PRODUIT.PRIXFABRICANT, LIEN_FABRICANT_PRODUIT.N_PRODUIT, LIEN_FABRICANT_PRODUIT.N_FABRICANT
FROM ARTICLE, LIEN_FABRICANT_PRODUIT
WHERE ARTICLE.N_FABRICANT=LIEN_FABRICANT_PRODUIT.N_FABRICANT AND ARTICLE.N_PRODUIT=LIEN_FABRICANT_PRODUIT.N_PRODUIT;
IF (NEW.PRIXVENTE< PRIXFABRICANT) THEN RAISE_APPLICATION_ERROR(-20001, 'Refusé');
END IF;
END;
创建或替换触发器比较器\u prix
在更新文章之前
每行
声明
l_prixfabricant lien_fabricant_produit.prixfabricant%类型;
开始
选择prixfabricant
进入l_prixfabricant
来自lien_Fabrican_produit
其中n_fabricann=:new.n_fabricant
和n_produit=:new.n_produit;
如果:new.prixvente
此外,如果您学会了如何正确格式化代码并使其更易于阅读,也不会有什么坏处。使用表别名(而不是那些冗长的表名)。如果比较两个表,请使用:
... 哪里并且存在(选择*从)它正在工作!非常感谢你的帮助!
create or replace trigger comparer_prix
before update on article
for each row
declare
l_prixfabricant lien_fabricant_produit.prixfabricant%type;
begin
select prixfabricant
into l_prixfabricant
from lien_fabricant_produit
where n_fabricatn = :new.n_fabricant
and n_produit = :new.n_produit;
if :new.prixvente < l_prixfabricant then
raise_application_error(-20001, 'Refusé');
end if;
end;
/