DBMS_NETWORK_ACL_ADMIN
DBMS_NETWORK_ACL_ADMIN学习
转载
http://blog.sina.com.cn/s/blog_4f925fc30102e2se.html
标签: oracle it 分类: 数据库
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_networkacl_adm.htm
这个链接的左边菜单树里有关于Oracle的好多高级函数库可学习。
oracle邮件发送存储过程示例
CREATE OR REPLACE PROCEDURE proc_send_mail(
p_recipient VARCHAR2, -- 邮件接收人,多个接收人用逗号分隔“," 例如 abc@xx.com,bcd@xx.com
p_subject VARCHAR2, -- 邮件标题
p_message VARCHAR2 -- 邮件正文
)
IS
--下面四个变量请根据实际邮件服务器进行赋值
v_mailhost VARCHAR2(30) := ''; --SMTP服务器地址
v_user VARCHAR2(30) := ''; --登录SMTP服务器的用户名
v_pass VARCHAR2(20) := ''; --登录SMTP服务器的密码
v_sender VARCHAR2(50) := ''; --发送都邮箱,一般与 ps_user 对应
v_conn UTL_SMTP.connection; --到邮件服务器的连接
v_msg varchar2(30000); --邮件内容
BEGIN
v_conn := UTL_SMTP.open_connection(v_mailhost, 25);
UTL_SMTP.ehlo(v_conn, v_mailhost); --是用 ehlo() 而不是 helo() 函数
--否则会报:ORA-29279: SMTP 永久性错误: 503 5.5.2 Send hello first.
UTL_SMTP.command(v_conn, 'AUTH LOGIN'); -- smtp服务器登录校验
UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_user))));
UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_pass))));
UTL_SMTP.mail(v_conn, '<'||v_sender||'>'); --设置发件人
for c in (select COLUMN_VALUE from table(split_str(p_recipient,',')) ) loop
UTL_SMTP.rcpt(v_conn, '<'||c.COLUMN_VALUE||'>'); --设置收件人
end loop ;
-- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行
v_msg :='Date:'|| TO_CHAR(SYSDATE, 'dd mon yy hh24:mi:ss')
|| UTL_TCP.CRLF || 'From: '|| 'auto sender' || '<' || v_sender || '>'
|| UTL_TCP.CRLF || 'To: ' || p_recipient || '<' || p_recipient || '>'
|| UTL_TCP.CRLF || 'Subject: P7 ' || p_subject
|| UTL_TCP.CRLF || UTL_TCP.CRLF -- 这前面是报头信息
|| p_message; -- 这个是邮件正文
--UTL_SMTP.DATA(v_conn, v_msg);
UTL_SMTP.open_data(v_conn); --打开流
--转换字符集 gaiwei modify 解决中文乱码
UTL_SMTP.WRITE_DATA(v_conn, 'Content-Type: text/plain;charset=utf-8' ||chr(13) || chr(10));
UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(v_msg)); --这样写标题和内容都能用中文
UTL_SMTP.close_data(v_conn); --关闭流
UTL_SMTP.quit(v_conn); --关闭连接
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
DBMS_OUTPUT.put_line(DBMS_UTILITY.format_call_stack);
END;
oracle存储过程通过http接收xml文件并解析入库
--------------------------------------------配置--------------------------------------------------
--创建控制列表并赋权
BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => 'test_acl_file.xml',
description => 'this is a test',
principal => 'SCOTT',
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);
COMMIT;
END;
--添加新用户
EGIN
DBMS_NETWORK_ACL_ADMIN.add_privilege (
acl => 'test_acl_file.xml',
principal => 'user_name',
is_grant => FALSE,
privilege => 'connect',
position => NULL,
start_date => NULL,
end_date => NULL);
COMMIT;
END;
--使用DROP_ACL删除访问控制列表
BEGIN
DBMS_NETWORK_ACL_ADMIN.drop_acl (
acl => 'test_acl_file.xml');
COMMIT;
END;
--给网络分配一个访问控制列表
BEGIN
DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl => 'test_acl_file.xml',
host => 'www.test.com',--特定ip
lower_port => 80,--指定端口
upper_port => NULL);
COMMIT;
END;
--访问控制列表视图
select * from DBA_NETWORK_ACLS;
select * from DBA_NETWORK_ACL_PRIVILEGES;
select * from USER_NETWORK_ACL_PRIVILEGES;
SELECT *
FROM TABLE(DBMS_NETWORK_ACL_UTILITY.domains('www.chinastock.com.cn'));
--测试
DECLARE
l_url VARCHAR2(300) := 'http://www.test.com.cn/stock.xml';
l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
BEGIN
-- Make a HTTP request and get the response.
l_http_request := UTL_HTTP.begin_request(l_url);
l_http_response := UTL_HTTP.get_response(l_http_request);
UTL_HTTP.end_response(l_http_response);
END;
-----------------------------------------代码----------------------------------------------------
create or replace procedure proc_recive_xml (p_url in varchar2)
is
l_http_request utl_http.req;
l_http_response utl_http.resp;
l_clob clob;
l_text varchar2(32767);
l_parser dbms_xmlparser.parser;
l_doc dbms_xmldom.domdocument;
l_nl dbms_xmldom.domnodelist;
l_n dbms_xmldom.domnode;
parent_rootnode dbms_xmldom.domnode;
l_rootnode_name varchar2(200);
l_name varchar2(1000);
l_code varchar2(6);
type v_index_stock is record (
index_name varchar2(50),--板块名称
stock_code varchar2(6)--股票代码
);
type v_arr_index_stock is table of v_index_stock index by binary_integer;
arr_index_stock v_arr_index_stock;
begin
dbms_lob.createtemporary(l_clob, false);-- 初始化clob
-- 发送http请求
l_http_request := utl_http.begin_request(p_url);
utl_http.set_header(l_http_request, 'content-type', 'text/html; charset=utf8');
l_http_response := utl_http.get_response(l_http_request);
-- 存储接收的http数据到clob
begin
loop
utl_http.read_text(l_http_response, l_text, 32767);
dbms_lob.writeappend (l_clob, length(l_text), l_text);
end loop;
exception
when utl_http.end_of_body then
utl_http.end_response(l_http_response);
end;
l_parser := dbms_xmlparser.newparser;-- 创建解析器
-- 解析并创建dom文档
dbms_xmlparser.parseclob(l_parser, l_clob);
l_doc := dbms_xmlparser.getdocument(l_parser);
--取节点item下各元素的值,先将items节点全部存放在 l_nl中
l_nl := dbms_xmldom.getElementsByTagName_r(l_doc,'stock');
for cur_emp in 0 .. dbms_xmldom.getlength(l_nl) - 1 loop
l_n := dbms_xmldom.item(l_nl, cur_emp);
-- 得到节点stock下元素的值
l_code := xmldom.getattribute(xmldom.makeelement(l_n),'code');
-- 得到节点stock的父节点bk
parent_rootnode := dbms_xmldom.getparentnode(l_n);
l_rootnode_name := xmldom.getnodename(parent_rootnode);
-- 得到节点bk的属性name的值
l_name := xmldom.getattribute(xmldom.makeelement(parent_rootnode),'name');
arr_index_stock(arr_index_stock.count + 1).index_name := l_name;
arr_index_stock(arr_index_stock.count).stock_code := l_code;
end loop;
-- 释放分析函数的资源
dbms_xmlparser.freeparser(l_parser);
-- 将doc清空,释放资源
dbms_xmldom.freedocument(l_doc);
--清空数据
delete from tb_index_0292;
for idx in 1..arr_index_stock.count loop
--dbms_output.put_line('name =' ||arr_stock_concept(idx).index_name || ' ,code = '||arr_stock_concept(idx).stock_code);
insert into tb_index_0292
values(idx,arr_index_stock(idx).index_name,arr_index_stock(idx).stock_code,ob_seq_id.nextval);
end loop;
commit;
--释放临时clob
dbms_lob.freetemporary(l_clob);
exception
when others then
rollback;
utl_http.end_response(l_http_response);
dbms_lob.freetemporary(l_clob);
end;
--------------------------------------文件格式---------------------------------------------------
DBMS_NETWORK_ACL_ADMIN的更多相关文章
- DBMS_NETWORK_ACL_ADMIN (OCP 053 第七题)
You create an access control list(ACL)using the DBMS_NETWORK_ACL_ADMIN package It is a list of users ...
- 使用Zabbix监控Oracle数据库
Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...
- Oracle发送邮件,支持HTML,多收件人,多附件
Oracle发邮件,权限问题 - 创建 ACL BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'email_server_permissions. ...
- 1Z0-050
QUESTION 13 View the Exhibit.Examine the following command that is executed for the TRANSPORT table ...
- oracle 11g 新特性UTL_TCP、UTL_HTTP 和 UTL_SMTP程序包发邮件
首先,创建一个 ACL: begindbms_network_acl_admin.create_acl (acl => 'utlpkg.xml', ---创建的访问控制列 ...
- oracle发送邮件
1.创建发送邮件的存储过程 CREATE OR REPLACE PROCEDURE send_mail(p_recipient VARCHAR2, -- 邮件接收人 p_subject VARCHAR ...
- 精通 Oracle+Python,第 7 部分:面向服务的 Python 架构
面向服务的架构 (SOA) 在当今的业务战略中具有至关重要的作用.混搭企业组件已成为所有任务关键的企业应用程序的标准要求,从而确保在企业架构的各层实现顺畅的服务编排.对此,Python 是一个不错的选 ...
- zabbix oracle监控插件orabbix部署安装
1,下载orabbix插件包(插件包同时满足在大部分POSIX-linux及unix和大部分版本的windows下运行,玩转类似但不等同于Tomcat) wget http://www.smartma ...
- acl操作记录
官方文档内容: 1.CREATE_ACL Procedure创建ACL Note: This procedure is deprecated in Oracle Database 12c. While ...
随机推荐
- 数据预处理中归一化(Normalization)与损失函数中正则化(Regularization)解惑
背景:数据挖掘/机器学习中的术语较多,而且我的知识有限.之前一直疑惑正则这个概念.所以写了篇博文梳理下 摘要: 1.正则化(Regularization) 1.1 正则化的目的 1.2 正则化的L1范 ...
- 从Fiddler抓包到Jmeter接口测试(简单的思路)
备注:本文为博主的同事总结的文章,未经博主允许不得转载. Fiddler下载和配置安装 从网上下载fiddler的安装包即可,直接默认,一直点击下一步,直至安装完成. 安装完成后直接打开Fiddler ...
- 使用AWS亚马逊云搭建Gmail转发服务(二)
title: 使用AWS亚马逊云搭建Gmail转发服务(二) author:青南 date: 2014-12-31 14:44:27 categories: [Python] tags: [Pytho ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析
系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...
- 无限循环轮播图之结构布局(原生JS)
html部分 <div class="box" id="box"> <ul> <li><img src="i ...
- Oracle使用SQL传输表空间
源环境:RHEL 6.4 + Oracle 11.2.0.4 目的环境:RHEL 6.4 + Oracle 11.2.0.4 DG双机 要求:使用SQL传输表空间DBS_D_JINGYU从源环境到目的 ...
- php多关键字查询
php单一关键字查询 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 tdansitional//EN" "http: ...
- DataAccess通用数据库访问类,简单易用,功能强悍
以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...
- css3新单位学习
vw,vh,vmin,vmax vw 1vw = 视窗width*1% vh 1vh = 视窗heihgt*1% 如果视窗的宽度小于高度,1vmin = 1vw,如果视窗宽度大于高度,1vmin = ...
- CLR和.Net对象生存周期
标签:GC .Net C# CLR 前言 1. 基础概念明晰 * 1.1 公告语言运行时 * 1.2 托管模块 * 1.3 对象和类型 * 1.4 垃圾回收器 2. 垃圾回收模型 * 2.1 为什么需 ...