Problem: How does the UTL_HTTP package use Oracle Net
I am using a command like
UTL_HTTP.set_transfer_time
SELECT HTTPURITYPE.createuri
( ‘http://fluffy.sf.nowhere.
|| ‘myuser&password=password&
|| ‘re.prxcommon.entity.RTota
).getclob () web_page
INTO l_web_page
FROM DUAL;
What does TNS have to do with HTTPURITYPE (which is really utl_tcp in a wrapper). I don’t understand how TNS gets involved. It would seem to me that the implementation of utl_tcp which in written in C, would create the necessary socket etc. I understand how Oracle Net gets involved for inbound HTTP connections but for outbound connections it doesn’t make any sense.
ORA-29273: HTTP request failed
ORA-06512: at “SYS.UTL_HTTP”, line 1674
ORA-12535: TNS:operation timed out
ORA-06512: at “SYS.HTTPURITYPE”, line 34
ORA-06512: at line 6
As a side note, the error takes 3 min 44 seconds before it happens. It should take 5 seconds to time out, because of the UTL_HTTP.set_transfer_time
The Question:
How can I ensure that control returns to my PL/SQL process after 5 seconds.
Solution : How does the UTL_HTTP package use Oracle Net
I’m sorry, I thought I had responded to this thread. I must have written up my response and forgot to click send.
Anyway, if it’s still helpful…..
You can’t break out of pl/sql on a timer like that, but you can simulate it.
submit a dbms_job to retrieve your web page and then have your current session sleep (dbms_lock.sleep(5)) for 5 seconds then when it wakes up check to see if the job has completed. If it has then read the data (presumedly the job would write it to a table for you) if it has not completed then raise an error, log it, wait again, etc. whatever you need.
Note, 5 seconds might be too quick of a time window for the dbms_job timer to pick up your new job and complete it. If 5 seconds is a non-negotiable hard limit, you may have to write your process in a java stored procedure that has a more robust tcp api.