【发布时间】:2020-07-28 11:55:06
【问题描述】:
我有以下使用 utl_http 发送一些数据的过程
procedure DoSomeThing is
HttpRequest utl_http.req;
HttpResponse utl_http.resp;
ResponseText clob;
URL varchar2(500) := 'https://someurl';
PostPrameters varchar2(30000);
begin
PostPrameters := 'Très cool';
PostPrameters := utl_url.escape(PostPrameters);
URL := utl_url.escape(URL,false,'UTF-8');
UTL_HTTP.SET_BODY_CHARSET('UTF-8');
HttpRequest := utl_http.begin_request(URL, 'POST', 'HTTP/1.1');
utl_http.set_authentication(HttpRequest, UserName, Password);
utl_http.set_header(HttpRequest,'Content-Type','application/x-www-form-urlencoded;');
utl_http.set_header(HttpRequest, 'Content-Length',length(PostPrameters));
utl_http.write_text(HttpRequest, PostPrameters);
HttpResponse := utl_http.get_response(HttpRequest);
utl_http.read_text(HttpResponse,ResponseText);
utl_http.end_response(HttpResponse);
end;
我要发送的数据包含一些特殊字符:'Très cool'
从 SQL Developer 测试此过程时,特殊字符会正确发送到服务器。
exec DoSomeThing; << Works great from SQL Developer
但是,该过程应该从以下工作启动:
Jobname := dbms_scheduler.generate_job_name('Job_');
JobAction := 'begin DoSomeThing; end;';
dbms_scheduler.create_job(job_name => Jobname, job_type => 'PLSQL_BLOCK', job_action => JobAction, enabled => true);
在这种情况下,完全相同的程序不会发送特殊字符。它会跳过它们:'Tr?s cool'
我想这是因为我在 SQL Developer 上的会话与工作中的会话没有相同的特征。
请问有人知道怎么解决吗?
干杯,
【问题讨论】:
-
你的数据库的字符集是什么??
-
请问如何获得?
-
SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET' ; -
从 SQL Developer 中返回:AL32UTF8
-
我不知道所有会话是否都一样
标签: oracle