UTL_HTTPが動かない、との相談があったので検証してみました。
Autonomous DatabaseでのUTL_HTTPの使用には制限があります。以下の内容に該当していないのが前提です。
共有Exadataインフラストラクチャ上のOracle Autonomous Databaseの使用
PL/SQLパッケージの制限 - UTL_HTTPの制限
以下のURLをテストで呼び出してみます。
https://static.oracle.com/cdn/apex/21.1.2/apex_version.txtDECLARE
req UTL_HTTP.REQ;
resp UTL_HTTP.RESP;
value raw(1024);
BEGIN
utl_http.set_wallet('');
req := UTL_HTTP.BEGIN_REQUEST('https://static.oracle.com/cdn/apex/21.1.2/apex_version.txt');
UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
resp := UTL_HTTP.GET_RESPONSE(req);
UTL_HTTP.READ_raw(resp, value, 1024);
dbms_output.put_line(utl_raw.cast_to_varchar2(value));
UTL_HTTP.END_RESPONSE(resp);
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
UTL_HTTP.END_RESPONSE(resp);
END;
実行すると以下が表示されます。Application Express Version: 21.1
begin
dbms_network_acl_admin.create_acl(acl => 'test-oracle-cdn.xml',
description => 'Oracle CDN Access',
principal => 'APEXDEV',
is_grant => true,
privilege => 'connect');
--
dbms_network_acl_admin.assign_acl(acl => 'test-oracle-cdn.xml',
host => 'static.oracle.com');
--
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'test-oracle-cdn.xml',
principal => 'APEXDEV',
is_grant => true,
privilege => 'resolve');
end;
/
または以下のコードでも定義できます。ACLの名称はシステムによって決められます。begin
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'static.oracle.com',
ace => xs$ace_type(
privilege_list => xs$name_list('connect','resolve'),
principal_name => 'APEXDEV',
principal_type => xs_acl.ptype_db));
commit;
end;
/
データベース・アクションの開発のSQLから実行します。
登録されているACLの確認には以下のSQLが使用できます。APEXDEVはワークスペースのスキーマになります。connectの部分はresolveに変更すると、resolveの権限について確認できます。
select host, acl,
decode(dbms_network_acl_admin.check_privilege_aclid(aclid, 'APEXDEV', 'connect'), 1, 'GRANTED', 0, 'DENIED', NULL) privilege
from dba_network_acls;
ACLからホストを取り除いたり、ACLを削除するには以下のスクリプトを呼び出します。ACL名やhostなどの引数は環境に合わせて変更します。
begin
dbms_network_acl_admin.unassign_acl(acl => 'test-oracle-cdn.xml',
host => 'static.oracle.com');
dbms_network_acl_admin.drop_acl(acl => 'test-oracle-cdn.xml');
end;
/
以上になります。
Oracle APEXのアプリケーション開発の参考になれば幸いです。
完