(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1705838 )
在数据库管理中,会出现限制某个IP访问数据库的连接数或某个用户访问数据库的连接数的需求。
对于用户访问数据库的连接数限制,我们可以从数据库的profile上着手,使用profile的特性实现该需求。
对于IP访问数据库的连接数限制,从数据库上可以使用logon on database触发器来实现。
每一次新会话登录,都将IP记录在vrsession的client_info中,然后count出所有符合条件的会话数目,如果超过了,就直接断开会话连接。
但这个会话连接数据库如果限制了,也只能对非dba角色的用户生效。dba用户只会在alert.log中写一个警告信息而已。
实现该功能的触发器代码如下:
create table t_target
(id number,
owner varchar2(30),
object_name varchar2(128),
object_id number,
xx date,
yy varchar2(10)
)
源表为dba_objects ,表结构在数据库中可以查到。
需要将源表dba_objects 中两个字段object_name,owner 两个字段的值复制到t_target 表中。
declare
type t_array is table of t_target%rowtype;
t_data t_array;
cursor c is
select null id, owner, object_name, null object_id, null xx, null yy
from dba_objects;
begin
open c;
loop
fetch c bulk collect
into t_data limit 100;
forall i in 1 .. t_data.count
insert into t_target values t_data (i);
exit when c%notfound;
end loop;
close c;
commit;
end;
Fastest
- Explicit cursors doing a BULK COLLECT into a local collection (with an appropriate LIMIT) and using FORALL to write back to the database.
- Implicit cursors doing a BULK COLLECT for you behind the scenes along with single-row writes back to the datbase.
- Explicit cursors that are not doing a BULK COLLECT and not taking advantage of PL/SQL collections.
顺便说一下,这里开发人员多,如果碰到类似要求的,各位可以测试一下这个方法。试试在更大数据量的执行时间和成本会变的如何?
本人测试
我迁移了一个334W的表中两个字段,用了40秒,不知道这个速度怎么样,呵呵.
分享到:
相关推荐
详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据
结合一个存储过程的实例,介绍了 bulk collect 的使用
采用bulk collect可以将查询结果一次性地加载到collections中。...可以在select into,fetch into,returning into语句使用bulk collect。注意在使用bulk collect时,所有的into变量都必须是collections.
记录 集合 BULK COLLECT FORALL 执行计划
bulk collect函数的使用,可以可以提高数据的访问效率
sal,ename BULK COLLECT INTO sal,ename BULK COLLECT INTO sal,ename BULK COLLECT INTO vsal,ename BULK COLLECT INTO sal,ename BULK COLLECT INTO sal,ename BULK COLLECT INTO sal,ename BULK COLLECT ...
bulk collect bulk collect bulk collect例子特殊应用
BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer用法笔记。对oracle批量查询 删除 更新使用bulk collect提高效果的相关知识感兴趣的朋友通过本文一起学习吧
我们知道PL/SQL程序中运行SQL语句是存在...下面详解这爷俩㈠ 通过BULK COLLECT 加速查询⑴ BULK COLLECT 的用法采用BULK COLLECT可以将查询结果一次性地加载到collections中,而不是通过cursor一条一条地处理可以在sele
在一般的情况下,使用批量fetch的几率并不是很多,但是Oracle提供了这个功能我们最好能熟悉一下,说不定什么时候会用上它。 代码如下:declare cursor c1 is select * from t_depart; v_depart t_depart%...
Oracle 遍历游标的四种方式(for、fetch、while、bulk collect+forall) 2.问题分析 我们可以把游标想象成一张表,想要遍历游标,就要取到游标的每行数据,所以问题的关键就成了:如何取到行数据? 3.解决方案 ...
代码如下: — Created on 2010/11/04 by WANGNAN declare — Local variables here i integer; TYPE t_table IS TABLE OF VARCHAR2(10 ) INDEX BY VARCHAR2 (2); v_t_table t_table; TYPE t_pg3 IS TABLE OF asis.PG...
COLLECT
com.google.common.collect.Maps; Maps.newConcurrentMap();
abap collect的用法与实例 abap collect的用法与实例