带有原始主体的 HTTP POST 请求到 ORDS PL/SQL 网关?

HTTP POST request with raw body to ORDS PL/SQL Gateway?

我正在使用 Oracle 数据库 12.2 和 ORDS 18.3。知道 ORDS 仅用于其 PL/SQL 网关,是否可以向 ORDS 发出带有原始正文(无参数,使用 application/x-www-form-urlencodedmultipart/form-data)的 HTTP POST 请求部分,而不是 REST 数据服务部分。

在这种情况下,独立模式下的 ORDS(带有 Jetty)是 HTTP 服务器。发出请求的 HTTP 客户端是一些外部程序(Postman,Java,...)。

我们的想法是发送 JSON 数据,但它可以是二进制数据,例如图像或其他内容。

看起来 PL/SQL 网关 "only" 能够使用参数调用过程(或者根本没有参数,当然也没有主体)。我能够使用多部分形式的虚拟参数发出请求并以某种方式模拟我想要的东西(使用 VARCHAR2 测试,而不是 CLOBBLOB)但我想知道是否有可能存在。

回答我自己的问题,这是不可能的。我们必须使用参数和 MIME 类型 application/x-www-form-urlencoded(或 multipart/form-data)。

有几个 ORDS-specific bind variables (implicit parameters) 可供您使用。

  • :body 将 return 一个 BLOB。这可以用于任何东西,包括图像
  • :body_text 将 return 一个 CLOB。这对于 JSON、XML 或您指定的其他 MIME 类型(application/x-www-form-urlencodedmultipart/form-data
  • 等文本正文很有用

注意:您只能在 PL/SQL 块中取消引用 :body:body_text 参数 一次(如 this documentation), 所以你可能需要在使用它之前将它赋值给一个局部变量。