Skip to Main Content

APEX

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

send large files in base64

Hello, I must use an api for electronic signatures and the idea is to send the documents through an external api, the problem is that I want to send it in base 64, but if the file is very large the limitations of varchar2 prevent me from doing so, any idea how I can solve it? I am using database version 23, this is my code

procedure pa_uplo_docu_byte(i_docu in clob, o_docu_id out varchar2) as

l_http_req UTL_HTTP.req;
l_http_resp UTL_HTTP.resp;
l_url VARCHAR2(4000) := 'https://dataflow-hml.code100.com.py/api/uploads/bytes';
l_payload CLOB;
l_payload_v VARCHAR2(32767);
l_response CLOB;
l_buffer VARCHAR2(32767);
l_json JSON_OBJECT_T;
l_id VARCHAR2(100);

l_json_data JSON_OBJECT_T;
l_json_clob CLOB;
BEGIN

-- Crear JSON en formato de objeto
l_json_data := JSON_OBJECT_T();
l_json_data.PUT('bytes', i_docu);

-- Convertir JSON a CLOB
l_json_clob := l_json_data.TO_CLOB();

-- Crear la solicitud HTTP
l_http_req := UTL_HTTP.begin_request(l_url, 'POST', 'HTTP/1.1');

-- Configurar los headers correctamente
UTL_HTTP.set_header(l_http_req, 'Content-Type', 'application/json');
UTL_HTTP.set_header(l_http_req, 'Accept', 'application/json'); -- Asegurar que devuelva JSON
UTL_HTTP.set_header(l_http_req, 'X-Api-Key', g_api_key);
UTL_HTTP.set_header(l_http_req,
'Content-Length',
l_json_clob);

-- Enviar el JSON en el cuerpo de la solicitud
UTL_HTTP.write_text(l_http_req, l_payload_v);

-- Obtener la respuesta
l_http_resp := UTL_HTTP.get_response(l_http_req);

-- Leer la respuesta de la API
LOOP
BEGIN
UTL_HTTP.read_text(l_http_resp, l_buffer);
DBMS_OUTPUT.PUT_LINE('l_buffer: ' || l_buffer);
l_response := l_response || l_buffer;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
EXIT;
END;
END LOOP;

-- Cerrar la conexión HTTP
UTL_HTTP.end_response(l_http_resp);

-- Procesar el JSON de la respuesta
l_json := JSON_OBJECT_T.PARSE(l_response);
l_id := l_json.get_string('id'); -- Capturar el ID de la respuesta JSON
o_docu_id := l_id;
-- Mostrar el ID capturado
DBMS_OUTPUT.PUT_LINE('ID: ' || l_id);

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);

END;

Comments

James Su Feb 14 2025

Do you have a MOS account? You can see the solution here:

https://support.oracle.com/knowledge/Oracle%20Cloud/2767882_1.html

BTW the toad behavior is normal and I usually choose rollback.

ronald_2017 Feb 15 2025

No, I don't have. Can you please copy paste the solution? Thanks.

James Su Feb 15 2025

Please leave an email address.

ronald_2017 Feb 15 2025

I log in. However, it asks Support Identifier. What should I write?

Thanks

James Su Feb 16 2025

You need to purchase the service to see the content.

I may be able to help you in private but if you don't want to post your email I have no way to contact you.

ronald_2017 Feb 16 2025

First of all thanks for your help. My words are not for you. The illogical thing is why should I purchase the service in order to solve the problem which caused by Oracle. What is Oracle support is used for? Besides, it used to be send dm in Oracle forum. Apparently, it is not active now. These kinds of restrictions are really ridiculous in today's world.

BluShadow Feb 17 2025

Oracle support is for paying customers. Like most businesses, not everything is free.

A part of the contract with having support is that customers are not permitted to share the content that is given within support anywhere in public, hence why James cannot post the solution for you here.

For that error you're getting though, it's a bit of a deceptive message. You may want to look at your Firewall (or get your network guys to) as that's a likely cause.

ronald_2017 Feb 17 2025

For that error you're getting though, it's a bit of a deceptive message. You may want to look at your Firewall (or get your network guys to) as that's a likely cause.

After I login, I am redirected to registration page. I don't think it is related to firewall. It is written “Connect your User Account” and there is an item called Support Identifier. What should I type there?

Thanks.

Cookiemonster76 Feb 17 2025

I believe that BluShadow is talking about the error you're getting in toad there, not your issues with oracle support.

BluShadow Feb 17 2025

Indeed, I'm referring to the ORA-24757: duplicate transaction identifier
I'm not trying to tell you how to get into Oracle Support. For that you would need to have a customer support identifier CSID which you only get when you pay for support. If you're working for a company then maybe your company has support with Oracle? In which case your company would have someone who is the support administrator and can assign your login to have support with Oracle (they will tie up your login with the company's support identifier for you). In many companies this is a DBA who has this access.

ronald_2017 Feb 17 2025

First of all thanks for your support. The thing is, even I just select via db link I get ORA-24757 duplicate transaction identifier error. I didn't do any DML. I use it in my laptop, not for the company. It is for the educational purposes. Where should I check in firewall?

Cookiemonster76 Feb 17 2025

So where are these two DB's that you're linking together?

Is one of them on your laptop?

ronald_2017 Feb 17 2025

One is in my laptop. It is a test db. The other one is in my friend's virtual windows server. Maybe somethings need to be changed in the virtual server.

ronald_2017 6 days ago

What do you recommend? Thanks.

Cookiemonster76 5 days ago

Any and all firewalls between your laptop and the virtual windows server need to have the port(s) you're trying to use completely open.

Alternatively stop trying to link those 2 DBs.

Is there a specific reason you need to link to that DB?

If you're just trying out how DB links work you could just create a loopback link (one that connects to the same DB).

ronald_2017 3 days ago

Yes, I want to use dblink between each other. I just recreated the db link as shared this time. However, it gives another error. It works at first but then gives an error.

ronald_2017 3 days ago

I am just wondering that should I replace 'localhost' in the server's listener file with the server's IP address?

1 - 17

Post Details

Added 4 days ago
1 comment
37 views