【发布时间】:2023-12-11 09:21:01
【问题描述】:
我在我的 Oracle 基础上创建了一个触发器。
TRIGGER Customer_trigger
BEFORE INSERT ON Customer
FOR EACH ROW
它通过 http 请求连接到某个服务。该服务在响应中提供列及其值。我的问题是如何按名称设置列值。我想做这样的事情。
column_name := from http response
column_value := from http response
:new.<column_name> := column_value
我尝试使用立即执行,但没有成功。
感谢您的帮助。
【问题讨论】:
-
您不能在 AFTER INSERT 触发器中更改列的值 - 但是,您可以在 BEFORE INSERT 触发器中使用
:NEW.<column_name> :=语法。 -
我的错!它在触发器之前。
-
当您说“我尝试使用立即执行但没有运气”时发生了什么 - 还是没有发生?请向我们展示您的代码和其他相关详细信息,包括错误消息。
-
对不起,我没有提供足够的信息,但我已经尝试了很多方法......通常我在将“新”变量绑定到匿名块时遇到了麻烦。
-
也许你可以尝试这样的事情:
EXECUTE IMMEDIATE 'SELECT ' || nColumn_value || ' INTO :NEW.' || strColumn_name || ' FROM DUAL'。不过,老实说,我认为从触发器执行 HTTP 请求只是在寻找问题。仅仅因为你可以做某事并不意味着你应该。我认为应该在执行 INSERT 之前完成 HTTP 请求是合理的。 YMMV。
标签: oracle triggers plsql httprequest httpresponse