将当前行作为参数发送到 Oracle DB 触发器中的 http 请求

Send current row as a parameter to http request in Oracle DB Trigger

每当通过 Oracle 数据库触发器

在 TEST_TABLE 上发生插入或更新时,我使用以下代码调用 http 调用
create or replace TRIGGER TEST_TABLE_TRIGGER 
AFTER INSERT OR UPDATE OF VALUE ON TEST_TABLE 

for each row
DECLARE

  req utl_http.req;
  res utl_http.resp;
  url varchar2(100) := 'http://{serverIP}:8086/testMethod';

BEGIN
  -- need to pass current row to the http method
  req := utl_http.begin_request(url, 'GET',' HTTP/1.1');
  utl_http.set_header(req, 'content-type', 'application/json');
  res := utl_http.get_response(req);
  utl_http.end_response(res);

END;

如何将新 added/updated 行作为参数传递给 http 请求?正在调用的 Http 请求是一个 Java RESTful Web 服务,我将在其中处理新的 added/updated 行。

新行或更新行中的列可以像触发器中的 :new.column_name 一样被引用。您必须自己构建 JSON 有效负载并将其放置在 header 中。

如果您的 REST 服务出现故障会怎样?如果您的触发器抛出错误,如所写,事务将失败并且更新将回滚。这是想要的结果吗?

另请注意,即使它有效,交易也不会在收到 REST 调用的响应之前完成,因此这种安排可能会给您的应用程序带来大量延迟(无论更新 table).如果您不想要这种依赖或延迟,您可能需要检查 "pragma autonomous_transaction" 调用。