差不多一年没写过存储过程,最近要写,发现基本忘了,google一番之后,觉得很有必要把基础的东西写下来备忘。
- 语句块定义:
decalre -- 变量声明 var1 number(2); -- 仅声明 var2 char(2) := '11'; -- 在声明的同时初始化 begin -- 语句 end; -- 语句块结束
- if 语句
if a = 1 or b = 2 then elsif c = 3 then else end if;
- case 语句
case语句如果作为分支控制语句,最后结束语句是end case,如果是作为select语句里的控制语句则只需要end。
declare num number(10) := 1; begin case when num = 0 then dbms_output.put_line( 'zero'); when num = 1 then dbms_output.put_line( 'one'); else dbms_output.put_line( 'default'); end case; case num when 0 then dbms_output.put_line( 'zero'); when 1 then dbms_output.put_line( 'one'); else dbms_output.put_line( 'default'); end case; end;
- for 循环
for循环主要有两个用处。
1、 循环一个范围
格式:for i in [start .. end] loop ... end loop;
for i in 0..9 loop dbms_output.put_line('i:' || i); end loop;
2、遍历隐式游标
隐式游标的好处是不需要手动关闭,方便
for currow in ( select t.col1, t.col2 from tableName t where ... ) loop if currow.col1 = 0 then return; -- 中止sp,返回 end if; end loop;
- while 循环
isok := 9; while isok >= 0 loop isok := isok - 1; if isok = 8 then continue; -- 与编程语言的 continue 语义一样,跳过当前循环的剩余语句,回到循环开始 end if; if isok = 4 then exit; -- 与编程语言的 break 语义一样,跳出循环 end if; dbms_output.put_line('isok:' || isok); end loop; dbms_output.put_line('outside while loop .');
- 存储过程定义
create or replace procedure sp_name ( -- 入参、出参列表, 逗号分隔。 uid in varchar2, -- 不能带长度信息 startDate in date, -- 第二个输入参数 defaultVar in varchar2 default "", -- 默认参数,如果不传,要注意参数的顺序 isok out number, -- 输出参数 result out varchar2 -- 第二个输出参数 ) as -- 变量声明,每个声明用分号结束。可以在声明的同时初始化 var1 varchar2(11); var2 number(2) := 123; begin -- 字符串拼接用 || dbms_output.put_line('isok:' || 'abc'); -- 调用其他存储过程 sub_sp_name(param1, prarm2, outParam1, outParam2); end; -- 存储过程结束
- 函数定义
create or replace function func ( -- 入参、出参列表, 逗号分隔。 uid in varchar2, -- 不能带长度信息 startDate in date, -- 第二个输入参数 defaultVar in varchar2 default "", -- 默认参数,如果不传,要注意参数的顺序 isok out number, -- 输出参数 result out varchar2 -- 第二个输出参数 ) return number -- 定义返回类型 as -- 变量声明,每个声明用分号结束。可以在声明的同时初始化 var1 varchar2(11); var2 number(2) := 123; begin -- 字符串拼接用 || dbms_output.put_line('isok:' || 'abc'); return ret_val; end;
- 存储过程与函数异同
1、两者定义类似,都可以带输入输出参数。
2、函数有返回值,存储过程没有。
3、函数的调用要在select语句里;而存储过程不用,可以独立调用。
- 游标
隐式游标
隐式游标的好处是不需要手动关闭,方便
for currow in ( select t.col1, t.col2 from tableName t where ... ) loop if currow.col1 = 0 then return; -- 中止sp,返回 end if; end loop;
显式游标
declare isok integer; v_event_id number(10); v_isagain number(2); v_rate number(2); v_sender char(11) := '13800138000'; cursor cursorVar is select event_id, isagain, rate from call_event where sender = v_sender; -- 声明游标 begin open cursorVar; -- 打开游标 loop fetch cursorVar into v_event_id, v_isagain, v_rate; -- 取值 exit when cursorVar%notfound; --当没有记录时退出循环 dbms_output.put_line(v_event_id || ', ' || v_isagain || ', ' || v_rate); end loop; close cursorVar; -- 关闭游标 --游标的属性有:%FOUND,%NOTFOUNRD,%ISOPEN,%ROWCOUNT; --%FOUND:已检索到记录时,返回true --%NOTFOUNRD:检索不到记录时,返回true --%ISOPEN:游标已打开时返回true --%ROWCOUNT:代表检索的记录数,从1开始 end;
带参数游标
declare isok integer; v_event_id number(10); v_isagain number(2); v_rate number(2); v_sender char(11) := '13800138000'; cursor cursorVar(p_sender varchar2) is select event_id, isagain, rate from call_event where sender = p_sender; -- 声明游标 begin open cursorVar(v_sender); -- 打开游标,在括号里传参。 loop fetch cursorVar into v_event_id, v_isagain, v_rate; -- 取值 exit when cursorVar%notfound; --当没有记录时退出循环 dbms_output.put_line(v_event_id || ', ' || v_isagain || ', ' || v_rate); end loop; close cursorVar; -- 关闭游标 end;
欢迎关注我的微信公众号: coderbee笔记。
相关推荐
Oracle存储过程基础培训 Oracle存储过程基础培训
oracle存储过程基础性资料,初学者的宝库
oracle存储过程基础教程,很基础的
Oracle存储过程基础[参考].pdf
Oracle存储过程基础及优化,介绍Oracle存储过程的语法及事务处理、异常处理、性能优化等
第二章 oracle存储过程基础――PL/SQL 9 2.1 pl/sql基础 9 2.1.1 PL/SQL简介 9 2.1.2 一个简单的PL/SQL块 10 2.1.3 PL/SQL流程控制 13 2.2 游标(CURSOR) 17 2.2.1 游标的概念 18 2.2.2 游标的属性 18 2.2.3 游标中...
Oracle存储过程 基础培训 异常处理 事务处理 优化存储过程
Oracle存储过程基础知识 Oracle存储过程的基本语法 Oracle存储过程的若干问题备忘 用Java调用Oracle存储过程总结 在存储过程中做简单动态查询 Oracle存储过程调用Java方法
Oracle存储过程基本语法及示例,都是些基础,我喜欢基础扎实
以ORACLE 10G为基础,介绍oralce 10g引入的新的数据类型。让你对oracle数据类型有一个全新的认识。揭示一些不为人知的秘密和被忽略的盲点。从实用和优化的角度出发,讨论每种数据类型的特点。从这里开始oracle之旅!...
Oracle存储过程基础知识; Oracle存储过程的基本语法; 用Java调用Oracle存储过程总结; 在存储过程中做简单动态查询; Oracle存储过程调用Java方法; Oracle高效分页存储过程实例
oracle存储过程 基础知识大全 oracle存储过程分享 实用指数五颗星哈
介绍了oracle存储过程的实现、存储过程的调用和触发器语法及实例的基础知识
Oracle 存储过程基础知识............................................................................................................... 1 Oracle 存储过程的基本语法.........................................
在已有的spring+mybatis 基本操作oracle数据库的基础上,增加了3个调用存储过程的例子:无返回值、返回结果集、返回多个结果,希望对大家能有所帮助
Oracle存储过程,基础培训 1、我们为什么要用存储过程? 2、存储过程是如何定义和维护的? 3、我们如何调用存储过程? 4、存储过程中常用的复合数据处理方式及CTE 5、存储过程如何进行异常处理? 6、存储过程如何...
oracle存储过程基础知识 系统整理及例子。
oracle 存储过程的基本语法,关于oracle存储过程的若干问题备忘,oracle 存储过程语法总结及练习;oracle语法:Oracle触发器语法及实例基础知识(一)。