




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
oracle 存储过程学习经典入门 Oracle 存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL 5 END 行 1 CREATE OR REPLACE PROCEDURE 是一个 SQL 语句通知 Oracle 数据库去创建一个叫做 s keleton 存储过程 如果存在就覆盖它 行 2 IS 关键词表明后面将跟随一个 PL SQL 体 行 3 BEGIN 关键词表明 PL SQL 体的开始 行 4 NULL PL SQL 语句表明什么事都不做 这句不能删去 因为 PL SQL 体中至少需要有一 句 行 5 END 关键词表明 PL SQL 体的结束 存储过程创建语法 create or replace procedure 存储过程名 param1 in type param2 out type as 变量 1 类型 值范围 vs msg VARCHAR2 4000 变量 2 类型 值范围 复制代码 代码如下 Begin Select count into 变量 1 from 表 A where 列名 param1 If 判断条件 then Select 列名 into 变量 2 from 表 A where 列名 param1 Dbms output Put line 打印信息 Elsif 判断条件 then Dbms output Put line 打印信息 Else Raise 异常名 NO DATA FOUND End if Exception When others then Rollback End 注意事项 1 存储过程参数不带取值范围 in 表示传入 out 表示输出 类型可以使用任意 Oracle 中的合法类型 2 变量带取值范围 后面接分号 3 在判断语句前最好先用 count 函数判断是否存在该条操作记录 4 用 select into 给变量赋值 5 在代码中抛异常用 raise 异常名 复制代码 代码如下 CREATE OR REPLACE PROCEDURE 存储过程名 定义参数 is ym IN CHAR 6 the count OUT NUMBER AS 定义变量 vs msg VARCHAR2 4000 错误信息变量 vs ym beg CHAR 6 起始月份 vs ym end CHAR 6 终止月份 vs ym sn beg CHAR 6 同期起始月份 vs ym sn end CHAR 6 同期终止月份 定义游标 简单的说就是一个可以遍历的结果集 CURSOR cur 1 IS SELECT FROM WHERE GROUP BY BEGIN 用输入参数给变量赋初值 用到了 Oralce 的 SUBSTR TO CHAR ADD MONTHS TO DATE 等很常用的函数 vs ym beg SUBSTR is ym 1 6 vs ym end SUBSTR is ym 7 6 vs ym sn beg TO CHAR ADD MONTHS TO DATE vs ym beg yyyymm 12 yyyymm vs ym sn end TO CHAR ADD MONTHS TO DATE vs ym end yyyymm 12 yyyymm 先删除表中特定条件的数据 DELETE FROM 表名 WHERE ym is ym 然后用内置的 DBMS OUTPUT 对象的 put line 方法打印出影响的记录行数 其中用到一个 系统变量 SQL rowcount DBMS OUTPUT put line del 上月记录 SQL rowcount 条 INSERT INTO 表名 area code ym CMCODE rmb amt usd amt SELECT area code is ym CMCODE SUM rmb amt 10000 SUM usd amt 10000 FROM BGD AREA CM M BASE T WHERE ym vs ym beg AND ym 0 then begin x 0 x end end if if x 0 then begin x 1 end end if end test 2 2 ForFor 循环循环 For in LOOP 执行语句 end LOOP 1 1 循环遍历游标循环遍历游标 复制代码 代码如下 create or replace procedure test as Cursor cursor is select name from student name varchar 20 begin for name in cursor LOOP begin dbms output putline name end end LOOP end test 2 2 循环遍历数组循环遍历数组 复制代码 代码如下 create or replace procedure test varArray in myPackage TestArray as 输入参数 varArray 是自定义的数组类型 定义方式见标题 6 i number begin i 1 存储过程数组是起始位置是从 1 开始的 与 java C C 等语言不同 因 为在 Oracle 中本是没有数组的概念的 数组其实就是一张 表 Table 每个数组元素就是表中的一个记录 所以遍历数组时就相当于从表中的第 一条记录开始遍历 for i in 1 varArray count LOOP dbms output putline The No i record in varArray is varArray i end LOOP end test 3 3 WhileWhile 循环循环 while 条件语句 LOOP 复制代码 代码如下 begin end end LOOP E g create or replace procedure test i in number as begin while i 10 LOOP begin i i 1 end end LOOP end test 4 4 数组 数组 首先明确一个概念 Oracle 中本是没有数组的概念的 数组其实就是一张表 Table 每 个数组元素就是表中的一个记录 使用数组时 用户可以使用 Oracle 已经定义好的数组类型 或可根据自己的需要定义数 组类型 1 使用 Oracle 自带的数组类型 x array 使用时需要需要进行初始化 e g create or replace procedure test y out array is x array begin x new array y x end test 2 2 自定义的数组类型自定义的数组类型 自定义数据类型时 建议通过创建 Package 的方式实现 以便 于管理 create or replace package myPackage is Public type declarations type info is record name varchar 20 y number type TestArray is table of info index by binary integer 此处声明了一个 TestArray 的类型数据 其实其为一张存储 Info 数据类型的 Table 而已 及 TestArray 就是一张表 有两个字段 一个是 name 一个是 y 需要注意的是 此处使用了 Index by binary integer 编制该 Table 的索引项 也可以不写 直接写成 type TestArray is table of info 如果不写的话使用数组时就需要进行初始化 varArray myPackage Test Array varArray new myPackage TestArray end TestArray 5 5 游标的使用游标的使用 Oracle 中 Cursor 是非常有用的 用于遍历临时表中的查询结果 其相关 方法和属性也很多 现仅就常用的用法做一二介绍 1 Cursor 型游标 不能用于参数传递 复制代码 代码如下 create or replace procedure test is cusor 1 Cursor is select std name from student where Cursor 的使用方式 1 cursor 2 Cursor begin select class name into cursor 2 from class where Cursor 的使用方式 2 可使用 For x in cursor LOOP end LOOP 来实现对 Cursor 的遍历 end test 2 SYS REFCURSOR 型游标 该游标是 Oracle 以预先定义的游标 可作出参数进行传递 create or replace procedure test rsCursor out SYS REFCURSOR is cursor SYS REFCURSOR name varhcar 20 begin OPEN cursor FOR select name from student where SYS REFCURSOR 只能通过 OPE N 方法来打开和赋值 LOOP fetch cursor into name SYS REFCURSOR 只能通过 fetch into 来打开和遍历 exit wh en cursor NOTFOUND SYS REFCURSOR 中可使用三个状态属性 NOTFOUND 未找到 记录信息 FOUND 找到记录信息 ROWCOUNT 然后当前游标所指向的行位置 dbms output putline name end LOOP rsCursor cursor end test 实例 下面写一个简单的例子来对以上所说的存储过程的用法做一个应用 现假设存在两张表 一张是学生成绩表 studnet 字段为 stdId math article langua ge music sport total average step 一张是学生课外成绩表 out school 字段为 stdId parctice comment 通过存储过程自动计算出每位学生的总成绩和平均成绩 同时 如果学生在课外课程中获 得的评价为 A 就在总成绩上加 20 分 复制代码 代码如下 create or replace procedure autocomputer step in number is rsCursor SYS REFCURSOR commentArray myPackage myArray math number article number language number music number sport number total number average number stdId varchar 30 record myPackage stdInfo i number begin i 1 get comment commentArray 调用名为 get comment 的存储过程获取学生课外评分 信息 OPEN rsCursor for select stdId math article language music sport from student t where t step step LOOP fetch rsCursor into stdId math article language music sport exit when rsCursor N OTFOUND total math article language music sport for i in mentArray count LOOP record commentArray i if stdId record stdId then begin if ment A then begin total total 20 go to next 使用 go to 跳出 for 循环 end end if end end if end LOOP average total 5 update student t set t total total and t average average where t stdId stdI d end LOOP end end autocomputer 取得学生评论信息的存储过程 create or replace procedure get comment commentArray out myPackage myArray is rs SYS REFCURSOR record myPackage stdInfo stdId varchar 30 comment varchar 1 i number begin open rs for select stdId comment from out school i 1 LOOP fetch rs into stdId comment exit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车租赁业务合作协议
- 重庆教委面试题库及答案
- 2025年仓储物流租赁合同模板
- 中医经典知识试题及答案
- 中考试题及答案小学生
- 《一 课间休息讲安全》(教学设计)-2023-2024学年三年级上册综合实践活动沪科黔科版
- 中国中药学考试题及答案
- 中国童话考试题目及答案
- 职中毕业考试题目及答案
- 幼儿安全培训师课件
- 2025年江苏省农垦集团有限公司人员招聘笔试备考及参考答案详解
- 2025至2030年中国粗杂粮及粗杂粮加工行业市场调研分析及投资战略咨询报告
- 军用无人机讲解课件
- 2025年中国移动校园招聘笔试试题解析及答题技巧
- 长宏国际安全知识培训课件
- 项目四旅游电子商务网络营销92课件
- 电缆桥架设备知识培训课件
- 快乐的牛仔课件
- 2025年组织部招聘笔试冲刺
- DB3302T1135-2022新建小区室内公共体育设施配置和管理规范
- 2025年装载机行业当前竞争格局与未来发展趋势分析报告
评论
0/150
提交评论