- 浏览: 251899 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
无它唯勤:
...
Spring Ioc AOP -
dubaopeng:
挺好的,拿去改改!
java 解析csv文件 -
灵程大哥:
先试一下,看行不行
java 判断文本文件编码 -
pxjianke:
谢谢兄弟。我现在在测试插入千万级数据。做测试。这个太有用了。
Oracle 高速批量速插入数据 解决方案
邮件群发反屏蔽的原理是这样的:
1.每封邮件内容不同(针对反垃圾邮件的HASH技术)
2.每封邮件主题不同(针对反垃圾邮件的HASH技术\关键词过滤技术)
3.邮件发件人不同(针对反垃圾邮件的HASH技术)
4.发送邮件的ip不同(针对反垃圾邮件的黑白名单技术\反向查询技术)
5.单位时间内向某SMTP发送的数量不能超过经验值(针对反垃圾邮件的黑白名单技术)
就本次项目,偶写了如下存过程:
包头:
CREATE OR REPLACE
PACKAGE "EDM_PACK" AS
PROCEDURE FETCH_SENDER(
i_current_time IN NUMBER,
i_other_smtp IN VARCHAR2,
i_unknown_smtp IN VARCHAR2,
o_email_id OUT NOCOPY NUMBER,
o_email OUT NOCOPY VARCHAR2,
o_password OUT NOCOPY VARCHAR2,
o_smtp OUT NOCOPY VARCHAR2);
END;
包体:PACKAGE "EDM_PACK" AS
PROCEDURE FETCH_SENDER(
i_current_time IN NUMBER,
i_other_smtp IN VARCHAR2,
i_unknown_smtp IN VARCHAR2,
o_email_id OUT NOCOPY NUMBER,
o_email OUT NOCOPY VARCHAR2,
o_password OUT NOCOPY VARCHAR2,
o_smtp OUT NOCOPY VARCHAR2);
END;
CREATE OR REPLACE
PACKAGE BODY "EDM_PACK" AS
PROCEDURE FETCH_SENDER(
i_current_time IN NUMBER,
i_other_smtp IN VARCHAR2,
i_unknown_smtp IN VARCHAR2,
o_email_id OUT NOCOPY NUMBER,
o_email OUT NOCOPY VARCHAR2,
o_password OUT NOCOPY VARCHAR2,
o_smtp OUT NOCOPY VARCHAR2)
IS
temp_count_other_smtp NUMBER DEFAULT 0;
temp_anti_shield_id NUMBER DEFAULT NULL;
temp_current_day DATE DEFAULT NULL;
BEGIN
SELECT COUNT(DISTINCT other_smtp)
INTO temp_count_other_smtp
FROM anti_shields
WHERE other_smtp = i_other_smtp;
--查看i_other_smtp是否在反屏蔽的smtp之内
IF temp_count_other_smtp = 0
THEN
--此other_smtp未列入返屏蔽之内
--从anti_shields中随机取出一条符合指定other_smtp,
--且sending_time大于最小间隔的记录的id
UPDATE anti_shields
SET sending_time = i_current_time
WHERE id IN (
SELECT * FROM
(SELECT id
FROM anti_shields
WHERE i_current_time -
NVL(sending_time,i_current_time) >
86400000/NVL(count_per_day,500)
AND other_smtp = i_unknown_smtp
ORDER BY DBMS_RANDOM.Value
)
WHERE ROWNUM <=1)
RETURNING id INTO temp_anti_shield_id;
ELSE
--此other_smtp已列入返屏蔽之内
--从anti_shields中随机取出一条符合指定other_smtp,
--且sending_time大于最小间隔的记录的id
UPDATE anti_shields
SET sending_time = i_current_time
WHERE id IN (
SELECT * FROM
(SELECT id
FROM anti_shields
WHERE i_current_time -
NVL(sending_time,i_current_time) >
86400000/NVL(count_per_day,500)
AND other_smtp = i_other_smtp
ORDER BY DBMS_RANDOM.Value
)
WHERE ROWNUM <=1)
RETURNING id INTO temp_anti_shield_id;
END IF;
--从anti_shields中随机取出一条符合指定other_smtp,
--且sending_time大于最小间隔的记录的id
UPDATE anti_shields
SET sending_time = i_current_time
WHERE id IN (
SELECT * FROM
(SELECT id
FROM anti_shields
WHERE i_current_time -
NVL(sending_time,i_current_time) >
86400000/NVL(count_per_day,500)
AND other_smtp = i_other_smtp
ORDER BY DBMS_RANDOM.Value
)
WHERE ROWNUM <=1)
RETURNING id INTO temp_anti_shield_id;
--如果得到了记录
IF temp_anti_shield_id IS NOT NULL
THEN
--得到指定id的记录的current_day并存入temp_current_day中
SELECT current_day
INTO temp_current_day
FROM anti_shields
WHERE id = temp_anti_shield_id;
--如果得到了当前时间
IF temp_current_day IS NOT NULL
THEN
--看是否更新current_day和count_day
IF TO_CHAR(SYSDATE,'YYMMDD') !=
TO_CHAR(temp_current_day,'YYMMDD')
THEN
--更新current_day和count_day
UPDATE anti_shields
SET current_day = SYSDATE,count_day = 0
WHERE id = temp_anti_shield_id;
END IF;
END IF;
--得到我们自己SMTP服务器的ip
SELECT ourself_smtp
INTO o_smtp
FROM anti_shields
WHERE id = temp_anti_shield_id;
--如果ourself_smtp不为NULL
IF o_smtp IS NOT NULL
THEN
--随机从自已的SMTP服务器上取得一帐号
SELECT id
INTO o_email_id
FROM
(SELECT id
FROM senders
WHERE ourself_smtp = o_smtp
ORDER BY DBMS_RANDOM.Value
)
WHERE ROWNUM <=1;
--如果得到帐号
IF o_email_id IS NOT NULL
THEN
--得到email帐号
SELECT email
INTO o_email
FROM senders
WHERE id = o_email_id;
--得到email密码
SELECT password
INTO o_password
FROM senders
WHERE id = o_email_id;
END IF;
--判断是否更改日发送量和发送总量
IF o_email_id IS NOT NULL
AND o_email IS NOT NULL
AND o_password IS NOT NULL
AND o_smtp IS NOT NULL
THEN
--更改日发送量和发送总量
UPDATE anti_shields
SET count_day = count_day + 1,
total_count = total_count + 1
WHERE id = temp_anti_shield_id;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
o_email_id := NULL;
o_email := NULL;
o_password := NULL;
o_smtp := NULL;
END;
END;
存储过程,美丽优雅的波浪,呵呵....
PACKAGE BODY "EDM_PACK" AS
PROCEDURE FETCH_SENDER(
i_current_time IN NUMBER,
i_other_smtp IN VARCHAR2,
i_unknown_smtp IN VARCHAR2,
o_email_id OUT NOCOPY NUMBER,
o_email OUT NOCOPY VARCHAR2,
o_password OUT NOCOPY VARCHAR2,
o_smtp OUT NOCOPY VARCHAR2)
IS
temp_count_other_smtp NUMBER DEFAULT 0;
temp_anti_shield_id NUMBER DEFAULT NULL;
temp_current_day DATE DEFAULT NULL;
BEGIN
SELECT COUNT(DISTINCT other_smtp)
INTO temp_count_other_smtp
FROM anti_shields
WHERE other_smtp = i_other_smtp;
--查看i_other_smtp是否在反屏蔽的smtp之内
IF temp_count_other_smtp = 0
THEN
--此other_smtp未列入返屏蔽之内
--从anti_shields中随机取出一条符合指定other_smtp,
--且sending_time大于最小间隔的记录的id
UPDATE anti_shields
SET sending_time = i_current_time
WHERE id IN (
SELECT * FROM
(SELECT id
FROM anti_shields
WHERE i_current_time -
NVL(sending_time,i_current_time) >
86400000/NVL(count_per_day,500)
AND other_smtp = i_unknown_smtp
ORDER BY DBMS_RANDOM.Value
)
WHERE ROWNUM <=1)
RETURNING id INTO temp_anti_shield_id;
ELSE
--此other_smtp已列入返屏蔽之内
--从anti_shields中随机取出一条符合指定other_smtp,
--且sending_time大于最小间隔的记录的id
UPDATE anti_shields
SET sending_time = i_current_time
WHERE id IN (
SELECT * FROM
(SELECT id
FROM anti_shields
WHERE i_current_time -
NVL(sending_time,i_current_time) >
86400000/NVL(count_per_day,500)
AND other_smtp = i_other_smtp
ORDER BY DBMS_RANDOM.Value
)
WHERE ROWNUM <=1)
RETURNING id INTO temp_anti_shield_id;
END IF;
--从anti_shields中随机取出一条符合指定other_smtp,
--且sending_time大于最小间隔的记录的id
UPDATE anti_shields
SET sending_time = i_current_time
WHERE id IN (
SELECT * FROM
(SELECT id
FROM anti_shields
WHERE i_current_time -
NVL(sending_time,i_current_time) >
86400000/NVL(count_per_day,500)
AND other_smtp = i_other_smtp
ORDER BY DBMS_RANDOM.Value
)
WHERE ROWNUM <=1)
RETURNING id INTO temp_anti_shield_id;
--如果得到了记录
IF temp_anti_shield_id IS NOT NULL
THEN
--得到指定id的记录的current_day并存入temp_current_day中
SELECT current_day
INTO temp_current_day
FROM anti_shields
WHERE id = temp_anti_shield_id;
--如果得到了当前时间
IF temp_current_day IS NOT NULL
THEN
--看是否更新current_day和count_day
IF TO_CHAR(SYSDATE,'YYMMDD') !=
TO_CHAR(temp_current_day,'YYMMDD')
THEN
--更新current_day和count_day
UPDATE anti_shields
SET current_day = SYSDATE,count_day = 0
WHERE id = temp_anti_shield_id;
END IF;
END IF;
--得到我们自己SMTP服务器的ip
SELECT ourself_smtp
INTO o_smtp
FROM anti_shields
WHERE id = temp_anti_shield_id;
--如果ourself_smtp不为NULL
IF o_smtp IS NOT NULL
THEN
--随机从自已的SMTP服务器上取得一帐号
SELECT id
INTO o_email_id
FROM
(SELECT id
FROM senders
WHERE ourself_smtp = o_smtp
ORDER BY DBMS_RANDOM.Value
)
WHERE ROWNUM <=1;
--如果得到帐号
IF o_email_id IS NOT NULL
THEN
--得到email帐号
SELECT email
INTO o_email
FROM senders
WHERE id = o_email_id;
--得到email密码
SELECT password
INTO o_password
FROM senders
WHERE id = o_email_id;
END IF;
--判断是否更改日发送量和发送总量
IF o_email_id IS NOT NULL
AND o_email IS NOT NULL
AND o_password IS NOT NULL
AND o_smtp IS NOT NULL
THEN
--更改日发送量和发送总量
UPDATE anti_shields
SET count_day = count_day + 1,
total_count = total_count + 1
WHERE id = temp_anti_shield_id;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
o_email_id := NULL;
o_email := NULL;
o_password := NULL;
o_smtp := NULL;
END;
END;
发表评论
-
Oracle insert into select 序列
2010-03-16 14:46 2425"INSERT INTO AUDIT_TASK_LO ... -
Oracle 存储过程
2007-11-07 11:53 613存储过程是指数据库中已编译的可调程序,它作为PL/SQ ... -
Oracle 安装注意事项
2007-11-07 22:17 682如果你的机器上存在其它版本的Oracle,请先删除以前版本的安 ... -
Oracle 游标
2007-11-11 15:31 1510Oracle游标,从字面理解就是游动的光标。用数据库语言来描述 ... -
ORACLE 异常汇集
2007-11-15 11:53 623------------------------------- ... -
存储过程 Update 返回改更后的 结果
2007-12-18 19:54 1363今天做邮件群发系统开发,遇到这样一个问题:更改数据库一 ... -
Oracle 返回 结果集
2007-12-19 19:26 702过程返回记录集: CREAT ... -
错误的
2007-12-20 19:47 563CREATE OR REPLACE PACKAGE BODY ... -
随机 返回 一条符合条件的记录
2008-01-21 10:29 713SELECT * FROM anti_shields SAMP ... -
ORACLE NOCOPY
2008-01-21 15:23 838PL/SQL中对out,in out参数使用的?默认形 ... -
Oracle dblink
2008-02-20 14:06 629Create Database Link LinkName C ... -
让oracle做定时任务
2008-03-11 14:42 1094今天用oracle的定时任务来实现定时检测。于是goole了一 ... -
ORACL 查看连接
2008-03-14 18:16 645select schemaname,osuser,machin ... -
Oracle 常用函数
2008-03-28 14:42 6151.SUBSTR(string,start[,end]) ... -
Oracle 定时任务 JOB
2008-04-02 17:00 947众所周知,一般操作系统会提供定时执行任务的方法,例如:Uni ... -
copy表时丢失索引
2008-04-07 20:24 645今天发现了一个大问题,copy表时,会丢失索引.这导制 ... -
Oracle decode用法
2008-04-23 13:18 17181、Windows NT4.0+ORACLE 8.0.4 ... -
存储过程-a
2008-05-11 23:51 649create or replace PROCEDURE EMA ... -
存储过程-b
2008-05-11 23:52 747create or replace PROCEDURE Pro ... -
存储过程-c
2008-05-11 23:52 736create or replace Procedure Pro ...
相关推荐
oracle 存储过程的定义:oracle 存储过程是指存储在服务器上的 Transact-SQL 语句的命名集合,是封装重复性任务的方法,支持用户声明变量、条件执行以及其他强有力的编程特性。 oracle 存储过程的优点: 1. 封装...
Oracle客户端连接Oracle...本章节讲解了Oracle客户端连接Oracle服务器的配置过程,包括配置本地Net服务名、使用SQLPlus连接、使用TOAD连接等内容。同时还介绍了Tnsnames.ora文件格式、Listener进程的配置等知识点。
首先,存储过程是预编译的SQL代码集合,存储在数据库服务器上,可以视为可重复使用的函数,它能够减少网络流量,提高执行速度,同时增强系统的安全性。在SQL Server和Oracle中,存储过程有着广泛的应用,例如事务...
Oracle 11g引入了许多新特性,如自动工作负载收集、数据屏蔽、实时应用集群(RAC)改进、高级压缩、自动存储管理(ASM)增强、SQL优化信息库等。这些特性旨在提高数据库的可用性、性能和管理效率。 ojdbc678驱动...
安装过程中,这些文件会被部署到系统路径,使得应用程序能够找到并使用Oracle客户端的接口。 总的来说,Oracle Database Client 19.3 for Windows-32位19C版是针对32位Windows系统优化的数据库连接解决方案,具备...
Oracle 11g R2支持多种操作系统,包括Windows、Linux、Unix等,能够运行在各种服务器硬件上。 ### 安装与配置 安装Oracle 11g R2时,需要注意系统要求,如内存、磁盘空间、操作系统版本等。配置过程中,需要设置...
Oracle Database 19c是Oracle公司推出的一款先进的关系型数据库管理系统,主要针对企业级的数据存储、管理和分析。这款产品在Linux操作系统上运行,为用户提供高效、稳定和安全的数据管理解决方案。"LINUX.X64_...
在Oracle 11g中,值得注意的新特性包括自动存储管理(ASM)、实时应用集群(RAC)、数据屏蔽和透明加密等。ASM简化了存储管理,将磁盘组和卷管理集成到数据库管理系统中。RAC允许多台服务器共享同一数据库,提供高...
Oracle 11g是一款由甲骨文公司推出的数据库管理系统,它是Oracle数据库的第十二个主要版本,也是在Oracle 10g之后的重要升级。Oracle 11g在多个方面提供了增强的功能,旨在提高数据管理效率、性能、安全性和可用性。...
- 如果服务器启用了防火墙,请确保 135 端口未被屏蔽。 - 使用 `telnet IP 135` 或者端口扫描工具如 Advanced Port Scanner 来检查端口状态。 3. **避免环回操作**: - 在事务处理中,确保 SQL Server 不会尝试...
2. **Real Application Clusters (RAC)**:Oracle 11g的RAC功能允许多台服务器共享同一个数据库实例,提供高可用性和负载均衡。 3. **数据屏蔽(Data Masking)**:用于在开发和测试环境中安全地处理敏感数据,保护...
1. **Oracle 11g新特性**:Oracle 11g引入了许多创新特性,如自动存储管理(Automatic Storage Management, ASM)、数据屏蔽(Data Masking)和实时应用克隆(Real Application Clones)。ASM简化了存储管理,数据...
《Oracle10g系统管理员使用手册》是一本深入解析Oracle10g数据库管理系统运维的权威指南,主要面向那些需要管理、监控和优化Oracle10g环境的系统管理员。Oracle10g是Oracle公司推出的数据库产品,它在性能、可扩展性...
例如,Oracle的PL/SQL语言、存储过程、触发器的实现,以及数据库优化器的工作方式等。 3. **实用工具**: - **SQL*Plus**:Oracle的命令行工具,用于执行SQL语句、管理数据库、查看帮助信息等。 - **企业管理器...
Oracle 10g是Oracle数据库的一个版本,发布于2003年,其主要特性包括自动存储管理(Automatic Storage Management, ASM)、数据屏蔽(Data Masking)、实时应用集群(Real Application Clusters, RAC)以及增强的...
2. **Oracle 11g版本**:Oracle 11g是Oracle数据库的一个重要版本,提供了许多增强功能,如自动存储管理(ASM)、数据屏蔽、实时应用克隆等。 3. **OCP(Oracle Certified Professional)和OCM(Oracle Certified ...
PL/SQL是Oracle特有的过程式编程语言,结合了SQL和传统编程语言的特性,常用于编写存储过程、触发器等数据库对象。 五、性能优化 Oracle提供了一系列工具和方法进行性能优化,如SQL*Plus的EXPLAIN PLAN分析查询执行...
4. **数据屏蔽(Data Masking)**:为了增强数据安全性,Oracle 10g提供了数据屏蔽功能,可以在不改变数据格式的情况下替换敏感信息,确保在开发和测试环境中数据的隐私。 5. **闪回技术 (Flashback)**:包括闪回...
- 在 Oracle 数据库 `test` 中创建 `app_user` 表,用于存储用户信息。 - CAS 配置文件中,需要提供数据库连接的详细信息,包括 JDBC URL、用户名、密码、驱动类等,以便 CAS 能够正确地与 Oracle 数据库交互。 6...