Oracle存储过程语法
原文链接:http://www.jb51.net/article/31805.htm
Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END;
行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行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 类型(值范围);
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+异常名
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 <= vs_ym_end GROUP BY area_code,CMCODE; DBMS_OUTPUT.put_line('ins当月记录='||SQL%rowcount||'条'); --遍历游标处理后更新到表。遍历游标有几种方法,用for语句是其中比较直观的一种。
FOR rec IN cur_1 LOOP UPDATE 表名 SET rmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn WHERE area_code = rec.area_code AND CMCODE = rec.CMCODE AND ym = is_ym; END LOOP; COMMIT;
--错误处理部分。OTHERS表示除了声明外的任意错误。SQLERRM是系统内置变量保存了当前错误的详细信息。
EXCEPTION
WHEN OTHERS THEN vs_msg := 'ERROR IN xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);
ROLLBACK;
--把当前错误记录进日志表。
INSERT INTO LOG_INFO(proc_name,error_info,op_date) VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE); COMMIT; RETURN;
END;
oracle存储过程语法
1 、判断语句:
if 比较式 then begin end; end if;
2 、For 循环
For ... in ... LOOP
-- 执行语句
end LOOP;
(1) 循环遍历游标
(2) 循环遍历数组
3 、While 循环
while 条件语句 LOOP
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) 自定义的数组类型 ( 自定义数据类型时,建议通过创建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.TestArray; varArray := new myPackage.TestArray();
end TestArray;
5. 游标的使用 Oracle 中Cursor 是非常有用的,用于遍历临时表中的查询结果。其相关方法和属性也很多,现仅就常用的用法做一二介绍:
(1)Cursor 型游标( 不能用于参数传递)
实例
下面写一个简单的例子来对以上所说的存储过程的用法做一个应用:
现假设存在两张表,一张是学生成绩表(studnet) ,字段为:stdId,math,article,language,music,sport,total,average,step
一张是学生课外成绩表(out_school), 字段为:stdId,parctice,comment
通过存储过程自动计算出每位学生的总成绩和平均成绩,同时,如果学生在课外课程中获得的评价为A ,就在总成绩上加20 分。
转载于:https://www.cnblogs.com/zhongshiqiang/p/6169946.html
Oracle存储过程语法相关推荐
- Oracle存储过程语法学习
Oracle存储过程: 1.1 第一个存储过程 --创建存储过程 create or replace procedure proc1( p_para1 varchar2, p_para2 out va ...
- mysql 、oracle存储过程语法区别
mysql .oracle存储过程语法区别 1. 条件语句:mysql使用elseif关键字,oracle是elsif关键字: oracle: if表达式 then 表达式: elsif 表达式: ...
- oracle 存储过程语法
oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) ...
- Oracle存储过程语法记录
ORACEL存储过程 一.什么是存储过程 一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,专门干一件事一段sql语句. 二.存储过程的优点 1.效率高 2 ...
- oracle存储过程语法和用法,oracle存储过程 语法 函数 总结
对于oracle 存储过程是很优秀的一种脚本语言.下面是一些整理: 一,Plsql 调试存储过程: 1. 在oracle的 配置和移植工具 àNET MANAGER中配置连接 2. 在plsql中新建 ...
- Oracle存储过程语法和基本使用
前言 之前总结了mysql 的存储过程,这个Oracle 的存储过程语法有相似之处,但也有不同,所以就总结一下. 1.基本语法 1)基本结构 CREATE OR REPLACE PROCEDURE 存 ...
- Oracle 存储过程语法及使用
写在前面 本来这种东西作为一个写Java的我以为应该是基本用不上的,以前基本就是听过而已的一个概念,但是实际接到的一个需求就是需要数据库去定期执行存储过程,本着打好基础的目的,还是稍微学习了一下,本篇 ...
- oracle存储过程语法与使用
oracle 存储过程的基本语法 1.基本结构 1 CREATE OR REPLACE PROCEDURE 存储过程名2 IS3 BEGIN4 NULL;5 END; 行1: CREATE OR RE ...
- oracle 存储过程语法例子
包的定义: create or replace package myTest is type out_cur is ref cursor; procedure writeCount(codeid in ...
最新文章
- 一.MongoDB简介
- Matlab-绘制日期图
- javaoo-构造方法和添加方法
- Git复习(十三)之git revert用法及与git reset区别
- uni中动态加载class_Java基础·类加载、反射
- KnowledgeGraph Slides项目(CCKS系列报告2013-2018)
- 泡泡玛特回应与肯德基联名引发炒作:暂停食品行业的定制盲盒业务
- LVS-DR负载均衡-02
- HTML5_Canvas_属性、定义及方法
- percona 5.7.11root初始密码设置
- Android Stutio 3.0 - Gradle sync failed
- 雅礼中学第四场20180109
- angularjs外部文件中的控制器使用
- 离散数学之主析取范式,主合取范式
- 软件测试师和网络工程师,【软件测试工程师(科技部)网络工程师面试题目|面试经验】-看准网...
- IBM深陷云计算业务欺诈丑闻,遭股东集体诉讼
- 常见系统故障修复(二)——修复GRUB引导故障
- golang报错:slice bounds out of range
- Shell--点名器脚本,实现点名去重。
- 继续魔改TCP BBR
热门文章
- cr3格式怎么转换成jpg_pdf怎么转换成jpg图片?成为办公大神的第一步!
- 《梦断代码》读后笔记_2
- js笔记——call,apply,bind使用笔记
- Codeforces Round #333 (Div. 2) C. The Two Routes flyod
- js测试网络连通情况
- H3CNE考试讨论群
- 五一减肥狂掉肉饮食法
- 剑指offer 算法(栈和队列 查找和排序)
- Linux后台运行和关闭程序、查看后台任务
- Android Studio 3.0+ Record Espresso Test 自动化测试