Oracle REST Data Services has a useful Implicit Parameter feature which conveniently are automatically available to use in Resource Module Handlers without declaring them. More information about Resource Module Handlers is available in the Developing Oracle REST Data Services Applications section of the ORDS documentation.
Amongst other things, these implicit parameters provide access to the request body for a POST or PUT either as a BLOB through :body or CLOB through :body_text. For both parameters the documentation says they should only be referred to once.
parameter must be dereferenced only once in a PL/SQL block.ORDS Implicit Parameter documentation
The documentation for the :body implicit parameter explains why. If it is dereferenced more than once, then the second and subsequent dereferences will appear to be empty. This is because the client sends the request body only once. So the first :body reference will return a BLOB but the second reference will return null. The same applies to :body_text which is a CLOB representation of the same request body.
That is in the Resource Module Handler PL/SQL block if the source references :body and then :body_text the :body_text will return null.
begin insert into tab1(content) values (:body); -- request body will be inserted dbms_output.put_line('Request body ' || :body_text); -- request body will be null end;
However, a second call to :body_text will result in an error at runtime – SQL Error Code: 17270, Error Message: Duplicate stream parameter: 2.
begin dbms_output.put_line('Request body ' || :body_text); -- request body as CLOB dbms_output.put_line('Request body ' || :body_text); -- error occurs end;
There is an inconsistency here in how a second call to get the request body content is handled but if you’re getting this Duplicate steam parameter error message do review the source for duplicate references to :body_text implicit parameter.