Oracle中用游标实现多表级联更新详解

级联更新使用名目:

 代码如下 复制代码

CREATE TABLE A001(ID INT PRIMARY KEY,NAME VARCHAR(20))

CREATE TABLE A002(ID INT REFERENCES A001(ID)ON DELETE CASCADE ON UPDATE CASCADE,AGE TINYINT)

例1

 代码如下 复制代码

declare
  CURSOR D_CURSOR_CUS_INFO IS
    select t3.id_           as id_,
           t3.owe_money_    as owe_money_,
           a.heatingArea    as heating_area_
    from T_CUS_OWE_MONEY_2 t2
    left join T_CUS_OWE_MONEY_3 t3 on t2.id_= t3.id_
    left join (select s.bh,  sum(
           case
                 when s.stkbz='0' then nvl(s.mj,0)
                 when s.stkbz='1' then 0-nvl(s.mj,0)
           end
      ) as heatingArea from  sk s  where s.nd = '2008-2009' group by s.bh) a on t2.bh_=a.bh
  where  t3.owe_money_- t2.owe_money_  = a.heatingArea*5 and t3.OWE_MONEY_ > 0;

--然后循环游标对数据进行更新:

 

 代码如下 复制代码
begin
        FOR everyRow IN D_CURSOR_CUS_INFO
        loop
         update T_CUS_YEAR_STATUS t
             set t.HEATING_AREA_ = everyRow.HEATING_AREA_,
                 t.OWE_MONEY_    = everyRow.owe_money_
             where t.YEAR_ = '2008-2009'
                   and t.id_ = everyRow.id_;
       end loop;
      commit;
end;

上面是介绍的是利用游标来实例,我们先来介绍一下关于游标用法

游标的分类 : 静态游标和动态游标

1. 在说明游标分类之前, 先说明一下PL/SQL 的两个操作, 游标属性, 变量属性

SET SERVEROUTPUT ON ;-- 此语句用于开启打印输出功能

DMBS_OUTPUT.PUT_LINE();-- 打印输出并换行.

%FOUND: 判断当前游标是否指向有效的一条行记录. 是则返回TRUE, 否则返回FALSE

%NOTFOUND: 与%FOUND 恰好相反.

%ISOPEN: 判断游标是否打开, 打开则返回TRUE, 否则返回FALSE.

%ROWCOUNT: 判断当前游标在所指向的结果集中提取的行数. 并非所有总记录数

%TYPE: 声明变量的类型与表中的某列的数据类型完全一致.%TYPE 声明有两个好处: 一是你不必知道某列的确切数据类型二是当某列的数据类型改变时不用修改变量的数据类型.

%ROWTYPE: 声明变量的数据类型与表中的行记录数据类型一致. 对于自定义的记录, 则必须声明自己的域.

2. 静态游标:

静态游标又可以分为两类:

1) 隐式游标

隐式游标的特点:

- 隐式游标是由PL/SQL 来管理的, 即不需要声明游标语句, 也不需要OPEN,FETCH,CLOSE 操作

- 隐式游标中必须要有select cur_name into [ 变量名或其他数据类型]. 此句完成OPEN,FETCH,CLOSE 操作.

- 隐式游标只能返回一行记录, 如果无符合条件的记录将会出现NO_DATA_FOUND 异常. 如果出现多条记录将出现TOO_MANY_ROWS 异常.

- 隐式游标只能用SQL% 判断其游标属性

- 对于任何位置使用SQL%ISOPEN 结果都是FALSE, 隐式游标由PL/SQL 管理

- 对于在隐式游标位置前使用SQL%FOUND 或SQL%NOTFOUND, SQL%ROWCOUNT 结果值是NULL( 不确定值)

时间: 2024-09-13 19:43:15

Oracle中用游标实现多表级联更新详解的相关文章

Oracle多表级联更新详解

我们在平时的工作中可能遇到过,多表级联更新,我也在网上看到过不少的方法,但是使用这些方法一般都没成功过,所以今天我给大家介绍一种稍微麻烦的方法,有需要的朋友可以参考下   用游标实现,我觉得绝对这种方法比较安全的.--首先定一个游标把需要用到的一些数据存放到游标中: 复制代码 代码如下: declare   CURSOR D_CURSOR_CUS_INFO IS     select t3.id_           as id_,            t3.owe_money_    as

Oracle多表级联更新详解_oracle

用游标实现,我觉得绝对这种方法比较安全的.--首先定一个游标把需要用到的一些数据存放到游标中: 复制代码 代码如下: declare   CURSOR D_CURSOR_CUS_INFO IS    select t3.id_           as id_,           t3.owe_money_    as owe_money_,           a.heatingArea    as heating_area_    from T_CUS_OWE_MONEY_2 t2   

Oracle CBO几种基本的查询转换详解

Oracle CBO几种基本的查询转换详解 查询转换(Query Transformation),又称为逻辑优化(Logical Optimization),也称为软优化,即查询转换器在逻辑上对语句做一些语义等价转换,从而能使优化器生成效率更高的执行计划. 语句在被提交到Oracle后,解析器(Parser)会对SQL语句的语法.语义进行分析,并将查询中的视图展开.划分为小的查询块(Query Block).它们是嵌套或者相互关联的,而查询形式则决定了它们之间是如何关联的.这些查询块被传送给了查

WordPress数据库表及字段详解

今天熊哥在朋友的博客看到关于wordpress数据库的介绍,感觉很有用,相信对同样在使用wordpress的同学也很有用,所以就拿过来分享一下.希望对自己和大家有所帮助. [废话] 记得刚接触网站时对数据库一点概念也没有,那时公司网站要换服务器,于是就单纯的转移了网站文件,结果可想而知.一翻折腾,在糊里糊涂中按网上的教程终于搞定,享受成就感时也第一次接触了数据库.那时感觉数据库高端深奥遥远,从没想过自己以后会跟数据库再有交集:而后,自己成为一名数据库工程师时也没想起当年数据库曾给自己带来困扰.现

jQuery validate+artdialog+jquery form实现弹出表单思路详解_jquery

功能描述: 在页面弹出一个form表单,ajax无刷新提交表单,表单需通过验证. 适用范围: 适用于在列表页面新增,修改记录. 需要加载的js文件: jquery.min.js artDialog.js iframeTools.js jquery.form.js jquery.validate.js 实现思路: 在页面中将表单放到一个隐藏的容器中,用artdialog弹出该form并对form加上jqueryvalidate验证,提交采用jqueryform ajax提交,由于都是用现成的插件写

JS中artdialog弹出框控件之提交表单思路详解_javascript技巧

artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口. 前言: 自适应内容 artDialog的特殊UI框架能够适应内容变化,甚至连外部程序动态插入的内容它仍然能自适应,因此你不必去考虑消息内容尺寸使用它.它的消息容器甚至能够根据宽度让文本居中或居左对齐--这一切全是XHTML+CSS原生实现. 完善的接口 它的接口完善,可以轻易与外部程序配合使用.如异步写入消息.控制位置.尺寸.显示与隐藏.关闭等. 细致的体验 如果不是在输入状态,它支持Esc快捷键关

oracle中用Create Table创建表时,Storage中参数的含义!

oracle|创建 可用于:表空间.回滚段.表.索引.分区.快照.快照日志 参数名称缺省值最小值最大值说明INITIAL5(数据块)2(数据块)操作系统限定分配给Segment的第一个Extent的大小,以字节为单位,这个参数不能在alter语句中改变,如果指定的值小于最小值,则按最小值创建.NEXT5(数据块)1(数据块)操作系统限定第二个Extent的大小等于NEXT的初值,以后的NEXT值=前一NEXT大小乘以(1+PCTINCREASE/100),如果指定的值小于最小值,则按最小值创建.

C++Builder注册表编程实例详解

一.注册表编程详解 Windows 注册表中包含了系统配置.机器硬件配置. Win32 应用程序和用户的其他配置信息.许多高级一些的功能都要通过对注册表的操作来实现.在 WinAPI 中提供了 RegCgreateKey() . RegOpenKey() . RegQueryValue() 等函数操作注册表,但是用这些函数来操作注册表使用起来非常麻烦.而利用 C ++ Builder 的 TREGISTRY 类,我们则可以轻松实现对注册表的操作.下面我先介绍一下 TRegistry 类使用方法.

DB2表空间管理详解(原创)

create tablespace语法树 >>-CREATE --+-----------------------+---------------------------->            +-LARGE-----------------+               +-REGULAR---------------+               | .-SYSTEM-.            |               '-+--------+--TEMPORARY-'