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的更多相关文章

  1. 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 ...

  2. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  3. Oracle发送邮件,支持HTML,多收件人,多附件

    Oracle发邮件,权限问题 - 创建 ACL BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'email_server_permissions. ...

  4. 1Z0-050

    QUESTION 13 View the Exhibit.Examine the following command that is executed for the TRANSPORT table ...

  5. oracle 11g 新特性UTL_TCP、UTL_HTTP 和 UTL_SMTP程序包发邮件

    首先,创建一个 ACL: begindbms_network_acl_admin.create_acl (acl             => 'utlpkg.xml', ---创建的访问控制列 ...

  6. oracle发送邮件

    1.创建发送邮件的存储过程 CREATE OR REPLACE PROCEDURE send_mail(p_recipient VARCHAR2, -- 邮件接收人 p_subject VARCHAR ...

  7. 精通 Oracle+Python,第 7 部分:面向服务的 Python 架构

    面向服务的架构 (SOA) 在当今的业务战略中具有至关重要的作用.混搭企业组件已成为所有任务关键的企业应用程序的标准要求,从而确保在企业架构的各层实现顺畅的服务编排.对此,Python 是一个不错的选 ...

  8. zabbix oracle监控插件orabbix部署安装

    1,下载orabbix插件包(插件包同时满足在大部分POSIX-linux及unix和大部分版本的windows下运行,玩转类似但不等同于Tomcat) wget http://www.smartma ...

  9. acl操作记录

    官方文档内容: 1.CREATE_ACL Procedure创建ACL Note: This procedure is deprecated in Oracle Database 12c. While ...

随机推荐

  1. 一种简单,轻量,灵活的C#对象转Json对象的方案(续)

    本文参考资料 一种简单,轻量,灵活的C#对象转Json对象的方案 [源码]Literacy 快速反射读写对象属性,字段 一段废话 之前我已经介绍了这个方案的名称为JsonBuilder,这套方案最大的 ...

  2. Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(45)-工作流设计-设计步骤

    系列目录 步骤设计很重要,特别是规则的选择. 我这里分为几个规则 1.按自行选择(在起草时候自行选审批人,比较灵活) 2.按上级(无需指定,当时需要知道用户的上司是谁,可以在职位管理设置,或者在用户表 ...

  4. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  5. 如何重新注册VMware Update Manager(VUM)至vCenter Server中

    在VMware的vSphere化境中,VUM的角色相当于Windows 环境中的WSUS(Windows 更新服务器),可以批量,自动化的完成所管辖ESXi主机的大版本迁移,小版本升级的任务,深受管理 ...

  6. Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...

  7. spring boot(七):springboot+mybatis多数据源最简解决方案

    说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务.我们项目是后者的模式,网上找了很多,大都是根据jpa来做多数据源解决方案,要不就是老的spring多数据源解 ...

  8. java netty socket库和自定义C#socket库利用protobuf进行通信完整实例

    之前的文章讲述了socket通信的一些基本知识,已经本人自定义的C#版本的socket.和java netty 库的二次封装,但是没有真正的发表测试用例. 本文只是为了讲解利用protobuf 进行C ...

  9. 微信小程序基础入门

    准备 Demo 项目地址 https://github.com/zce/weapp-demo Clone or Download(需准备GIT环境) $ cd path/to/project/root ...

  10. .Net语言 APP开发平台——Smobiler学习日志:如何实现离线声音文件上传

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的"S ...