oracle-apexoracle-apex-5oracle-apex-19.1oracle-apex-18.2

make a GET request using APEX


this question is simple.

¿Why i can't use the next code?

select apex_web_service.make_rest_request(
    --p_url => 'https://api.exchangeratesapi.io/history?start_at=2018-01-01\&\end_at=2018-09-01',
    p_url => 'https://api.exchangeratesapi.io/history?',
    p_http_method => 'GET',
    p_parm_name   => APEX_UTIL.string_to_table('start_at:end_at'),
    --p_parm_value  => APEX_UTIL.string_to_table('"2018-01-01":"2018-09-01"')
    --p_parm_value  => APEX_UTIL.string_to_table('"2018-01-01"' || ':' || '"2018-09-01"')
    --p_parm_value  => APEX_UTIL.string_to_table('2018-01-01:2018-09-01', ':')
    p_parm_value  => APEX_UTIL.string_to_table('2018-01-01:2018-09-01')
) as test
from dual;

This is the error:

ORA-00902: tipo de dato no válido
00902. 00000 -  "invalid datatype"
*Cause:    
*Action:
Error en la línea: 20, columna: 22

I also try with this form:

declare
  l_clob clob;
begin
  l_clob := APEX_WEB_SERVICE.make_rest_request(
    p_url         => 'https://api.exchangeratesapi.io/history',
    p_http_method => 'GET',
    --p_parm_name   => APEX_UTIL.string_to_table('"start_at"' || ':' ||'"end_at"'),
    p_parm_name   => APEX_UTIL.string_to_table('start_at:end_at'),
    --p_parm_value  => APEX_UTIL.string_to_table('"2018-01-01"' || ':' || '"2018-09-01"')
    p_parm_value  => APEX_UTIL.string_to_table('2018-01-01' || ':' || '2018-09-01')
    --p_parm_value  => APEX_UTIL.string_to_table(2018-01-01 || ':' || 2018-09-01)
    --p_parm_value  => APEX_UTIL.string_to_table('2018-01-01:2018-09-01')
  ) ;
    dbms_output.put_line(l_clob);
end;
/

and this is the error:

Informe de error -
ORA-06502: PL/SQL: error  numérico o de valor
ORA-06512: en línea 14
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    An arithmetic, numeric, string, conversion, or constraint error
           occurred. For example, this error occurs if an attempt is made to
           assign the value NULL to a variable declared NOT NULL, or if an
           attempt is made to assign an integer larger than 99 to a variable
           declared NUMBER(2).
*Action:   Change the data, how it is manipulated, or how it is declared so
           that values do not violate constraints.

I want get this json: https://api.exchangeratesapi.io/history?start_at=2018-01-01&end_at=2018-09-01

I try with postman, and works

enter image description here

There are several comments, are test's but doesn't work.

Does really works p_parm_name and p_parm_value?

Can somebody help me?

Regards


Solution

  • The problem is with your dbms_output.put_line. dbms_output.put_line is limited to a VARCHAR2, or 32,767 bytes. If you use the following code, you'll see that you're getting a result. The size I got was 74,037.

    declare
      l_clob clob;
    begin
      l_clob := APEX_WEB_SERVICE.make_rest_request(
        p_url         => 'https://api.exchangeratesapi.io/history',
        p_http_method => 'GET',
        p_parm_name   => APEX_UTIL.string_to_table('start_at:end_at'),
        p_parm_value  => APEX_UTIL.string_to_table('2018-01-01' || ':' || '2018-09-01')
      ) ;
    
      dbms_output.put_line(dbms_lob.getlength(l_clob));
    end;
    /