本人写的第一个PL/SQL过程
看到别人在论坛的提问:
一个表的效率问题
今天碰到2张表
1张 有字段
表A有
jtbh(家庭编号) hzxm(户主姓名) hnbh(户内最大编号)
1000 张三 03
1001 赵六..........................
表B有
grbh(个人编号=家庭编号+2位户内编号) xm(姓名) gz(工资)
100001 张三 1000
100002 李四 1000
100003 王五 1000
2张表数据几十W。。。。现在由于之前维护不好,表A的最大编号没有更新,例如表B 1001这户人有4个编号,100101,100102 ,100103,100105这样,但是我表A户内最大编号可能只到了04,而实际上要到05,请问各位大侠如何更新有效率,我自己写了个效率太低了。。。。。
于是写了下面的过程,第一次写,记录一下。
CREATE PROCEDURE update_for_csdner();
CURSOR v_cursor IS SELECT MAX(substr(grbh, 4, 2)) hnbh, substr(grbh, 0, 4) jtbh from b GROUP BY substr(grbh, 0, 4);
v_jtbh VARCHAR2(4);
v_hnbh VARCHAR2(2);
BEGIN
OPEN v_cursor;
LOOP
FETCH v_cursor INTO v_hnbh, v_jtbh;
EXIT WHEN v_cursor%NOTFOUND;
UPDATE A SET hnbh = v_hnbh WHERE jtbh = v_jtbh;
COMMIT;
END LOOP;
CLOSE v_cursor;
END;
相关文档:
ORACLE SQL优化
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):
ORACLE 的解析器按照从右到左的顺序处理from 子句中的表名,from 子句中写在最后的表
(基础表driving table)将被最先处理,在from 子句中包含多个表的情况下,你必须选择记
录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需 ......
说到软解析(soft prase
)和硬解析(
hard prase
),就不能不说一下
Oracle
对
sql
的处理过程。当你发出一条
sql
语句交付
Oracle
,在执行和获取结果前,
Oracle
对此
sql
将进行几个步骤的处理过程:
1、语法检查(
syntax check
)
&nb ......
有许多不同类型的数据库管理员。 一些类型的数据库管理员致力于于开发领域,而其他的一部分更重视数据库性能的调整以及仍然有一部分数据库管理员则致力于管理SQL Server的业务。 依据数据库管理员的工作环境不同,他们将执行一定数量的不同的任务。为了区分所有不同的任务,数据库管理员可能要执行我清单上所列的任务。
......
Five basic search conditions are summarized here:
1) Comparison test
2) Range test
3) Set membership test
4) Pattern matching test (Like)
The pattern matching test checks to see whether the data value in a column matches a specified pattern
% mathes any se ......