我在ORACLE PL / SQL中有一个触发器,如下所示:
create or replace TRIGGER HISTORISATION_PRIX
BEFORE UPDATE OF PRIX
ON PRODUIT
FOR EACH ROW
DECLARE
var VARCHAR2(30000);
BEGIN
var := SYS.UTL_HTTP.REQUEST('163.81.56.131:8019/Coctos/insertion?numero=:old.NUMERO&prix=:old.PRIX');
END;
如您所见,在我的请求中,我想放置参数:old.NUMERO
和:old.PRIX
。但是,当我这样做时,触发器不起作用,我更新我的表PRODUIT但没有任何反应。
但如果我提出一些随机数字:
var := SYS.UTL_HTTP.REQUEST('163.81.56.131:8019/Coctos/insertion?numero=45&prix=555');
END;
然后它完美地运作。
那么,如何在我的请求中引入参数:old.NUMERO
和:old.PRIX
?
答案 0 :(得分:3)
看起来你在字符串中有“:old”,这意味着在你的请求中发送了文字值“:old.NUMERO”和“:old.PRIX”而不是它们的值。 / p>
尝试:
create or replace TRIGGER HISTORISATION_PRIX
BEFORE UPDATE OF PRIX
ON PRODUIT
FOR EACH ROW
DECLARE
var VARCHAR2(30000);
BEGIN
var := SYS.UTL_HTTP.REQUEST('163.81.56.131:8019/Coctos/insertion?numero=' || :old.NUMERO || '&prix=' || :old.PRIX);
END;
如果这不起作用,请在触发器中临时添加异常处理程序(在END;
之前)并直接在表上运行更新(从SQLPlus开始,服务器输出打开):
exception when others then
dbms_output.put_line(' Error Msg : ' || SYS.UTL_HTTP.get_detailed_sqlcode || SYS.UTL_HTTP.Get_Detailed_Sqlerrm);