Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用触发器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 - Fatal编程技术网

如何使用触发器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比较不同表中的两个值? 创建触发器比较器\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,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
(缺少冒号)

不过,这不是唯一的问题;不能从正在修改的表中进行选择;应出现变异表错误。幸运的是,您不必从
文章
中进行选择,因为您可以使用相同的
: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;
/