• 语句块定义:
Sql代码  
  1. decalre
  2. -- 变量声明
  3. var1 number(2);                -- 仅声明
  4. var2 char(2) := '11';          -- 在声明的同时初始化
  5. begin
  6. -- 语句
  7. end; -- 语句块结束
  • if 语句
Sql代码  
  1. if a = 1 or b = 2 then
  2. elsif c = 3 then
  3. else
  4. end if;
  • case 语句

case语句如果作为分支控制语句,最后结束语句是end case,如果是作为select语句里的控制语句则只需要end。

Sql代码  
  1. declare
  2. num number(10) := 1;
  3. begin
  4. case
  5. when num = 0 then dbms_output.put_line( 'zero');
  6. when num = 1 then dbms_output.put_line( 'one');
  7. else  dbms_output.put_line( 'default');
  8. end case;
  9. case num
  10. when 0 then dbms_output.put_line( 'zero');
  11. when 1 then dbms_output.put_line( 'one');
  12. else  dbms_output.put_line( 'default');
  13. end case;
  14. end;
  • for 循环

for循环主要有两个用处。

1、 循环一个范围
格式:for i in [start .. end] loop ... end loop;

Sql代码  
  1. for i in 0..9 loop
  2. dbms_output.put_line('i:' || i);
  3. end loop;

2、遍历隐式游标

隐式游标的好处是不需要手动关闭,方便

Sql代码  
  1. for currow in (
  2. select t.col1, t.col2
  3. from tableName t
  4. where ...
  5. ) loop
  6. if currow.col1 = 0 then
  7. return;    -- 中止sp,返回
  8. end if;
  9. end loop;
  • while 循环
Sql代码  
  1. isok := 9;
  2. while isok >= 0 loop
  3. isok := isok - 1;
  4. if isok = 8 then
  5. continue;                -- 与编程语言的 continue 语义一样,跳过当前循环的剩余语句,回到循环开始
  6. end if;
  7. if isok = 4 then
  8. exit;                    -- 与编程语言的 break 语义一样,跳出循环
  9. end if;
  10. dbms_output.put_line('isok:' || isok);
  11. end loop;
  12. dbms_output.put_line('outside while loop .');
  • 存储过程定义
Sql代码  
  1. create or replace procedure sp_name (
  2. -- 入参、出参列表, 逗号分隔。
  3. uid in varchar2,                          -- 不能带长度信息
  4. startDate in date,                        -- 第二个输入参数
  5. defaultVar in varchar2 default "",        -- 默认参数,如果不传,要注意参数的顺序
  6. isok out number,                          -- 输出参数
  7. result out varchar2                       -- 第二个输出参数
  8. )
  9. as
  10. -- 变量声明,每个声明用分号结束。可以在声明的同时初始化
  11. var1 varchar2(11);
  12. var2 number(2) := 123;
  13. begin
  14. -- 字符串拼接用 ||
  15. dbms_output.put_line('isok:' || 'abc');
  16. -- 调用其他存储过程
  17. sub_sp_name(param1, prarm2, outParam1, outParam2);
  18. end;        -- 存储过程结束
  • 函数定义
Sql代码  
  1. create or replace function func  (
  2. -- 入参、出参列表, 逗号分隔。
  3. uid in varchar2,                          -- 不能带长度信息
  4. startDate in date,                        -- 第二个输入参数
  5. defaultVar in varchar2 default "",        -- 默认参数,如果不传,要注意参数的顺序
  6. isok out number,                          -- 输出参数
  7. result out varchar2                       -- 第二个输出参数
  8. )
  9. return number      -- 定义返回类型
  10. as
  11. -- 变量声明,每个声明用分号结束。可以在声明的同时初始化
  12. var1 varchar2(11);
  13. var2 number(2) := 123;
  14. begin
  15. -- 字符串拼接用 ||
  16. dbms_output.put_line('isok:' || 'abc');
  17. return ret_val;
  18. end;
  • 存储过程与函数异同

1、两者定义类似,都可以带输入输出参数。
2、函数有返回值,存储过程没有。
3、函数的调用要在select语句里;而存储过程不用,可以独立调用。

  • 游标

隐式游标 
隐式游标的好处是不需要手动关闭,方便

Sql代码  
  1. for currow in (
  2. select t.col1, t.col2
  3. from tableName t
  4. where ...
  5. ) loop
  6. if currow.col1 = 0 then
  7. return;    -- 中止sp,返回
  8. end if;
  9. end loop;

显式游标

Sql代码  
  1. declare
  2. isok integer;
  3. v_event_id number(10);
  4. v_isagain number(2);
  5. v_rate number(2);
  6. v_sender char(11) := '13800138000';
  7. cursor cursorVar is select event_id, isagain, rate from call_event where sender = v_sender; -- 声明游标
  8. begin
  9. open cursorVar;    -- 打开游标
  10. loop
  11. fetch cursorVar into v_event_id, v_isagain, v_rate;       -- 取值
  12. exit when cursorVar%notfound;                             --当没有记录时退出循环
  13. dbms_output.put_line(v_event_id || ', ' || v_isagain || ', ' || v_rate);
  14. end loop;
  15. close cursorVar;   -- 关闭游标
  16. --游标的属性有:%FOUND,%NOTFOUNRD,%ISOPEN,%ROWCOUNT;
  17. --%FOUND:已检索到记录时,返回true
  18. --%NOTFOUNRD:检索不到记录时,返回true
  19. --%ISOPEN:游标已打开时返回true
  20. --%ROWCOUNT:代表检索的记录数,从1开始
  21. end;

带参数游标

Sql代码  
  1. declare
  2. isok integer;
  3. v_event_id number(10);
  4. v_isagain number(2);
  5. v_rate number(2);
  6. v_sender char(11) := '13800138000';
  7. cursor cursorVar(p_sender varchar2) is select event_id, isagain, rate from call_event where sender = p_sender; -- 声明游标
  8. begin
  9. open cursorVar(v_sender);    -- 打开游标,在括号里传参。
  10. loop
  11. fetch cursorVar into v_event_id, v_isagain, v_rate;       -- 取值
  12. exit when cursorVar%notfound;                             --当没有记录时退出循环
  13. dbms_output.put_line(v_event_id || ', ' || v_isagain || ', ' || v_rate);
  14. end loop;
  15. close cursorVar;   -- 关闭游标
  16. end;

转载于:https://www.cnblogs.com/copo/p/4720930.html

oracle 存储过程 基础相关推荐

  1. 存储过程while_超详细的Oracle存储过程基础入门介绍

    概述 前面已经对存储过程.函数.包做了个介绍,但是毕竟是写成了一篇,所以没那么细,今天单独介绍一下存储过程基础方面,后面再说遍历什么游标啊,数组啊~ 1.语法 CREATE [OR REPLACE] ...

  2. Oracle存储过程学习

    Oracle存储过程学习 目录 Oracle 存储过程... 1 Oracle存储过程基础知识... 1 Oracle存储过程的基本语法... 2 关于Oracle存储过程的若干问题备忘... 4 1 ...

  3. oracle存储过程学习经典[语法+实例+调用]

    Oracle存储过程基础知识 商业规则和业务逻辑可以通过程序存储在Oracle中,这个程序就是存储过程. 存储过程是SQL, PL/SQL, Java 语句的组合,它使你能将执行商业规则的代码从你的应 ...

  4. Oracle 存储过程,Hibernate 调用存储过程,JDBC调用存储过程,Oracle 动态SQL

    Oracle 存储过程学习 目录 Oracle 存储过程........................................................................ ...

  5. oracle写转帐的存储过程,Oracle存储过程及块编程基础经典案例

    Oracle存储过程及块编程基础案例 pl/sql(procedure language/sql:过程语言)编程是oracle的精髓之所在.跑得慢: 提高应用程序的运行性能,提高效率. 1.作为存储过 ...

  6. Oracle存储过程基本语法和基础教程

    1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 (     参数1 IN NUMBER,     参数2 IN NUMBER ) IS 变量1 INTEGER := ...

  7. 【转】oracle PLSQL基础学习

    [转]oracle PLSQL基础学习 --oracle 练习: /**************************************************PL/SQL编程基础****** ...

  8. SSH:Oracle数据库基础

    2019独角兽企业重金招聘Python工程师标准>>> Oracle数据库基础 一:Oracle基础知识 Oracle数据库的主要特点 (1.)支持多用户,大事务量的事务处理 (2. ...

  9. Oracle存储过程以及游标

    一.存储过程 1.存储过程定义 所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过 编译后存储在数据库系统中.在使用时候,用户通过指定已 ...

  10. 如何编写oracle存储过程

    在我的上一个银行项目中,我接到编写ORACLE存储过程的任务,我是程序员,脑袋里只有一些如何使用CALLABLE接口调用存储过程的经验,一时不知如何下手,我查阅了一些资料,通过实践发现编写ORACLE ...

最新文章

  1. 为什么Java要把字符串设计成不可变的
  2. ROS Indigo下安装测试Xtion Pro
  3. python 爬取企业注册信息_python爬取企业名录
  4. [旧博客]Python 第一次
  5. C# Winform控件对透明图片重叠时导致图片不透明的解决方法
  6. springboot,hibernate,exception no session 问题解决
  7. Microsoft JDBC Driver 4.0 for SQL Server
  8. nginx利用try_files实现多个源
  9. MQTT 客户端工具
  10. CMOS图像传感器基本原理
  11. 《说医不二》-懒兔子 读书笔记
  12. 用Python实现简易超市售货系统
  13. SOLIDWORKS如何简单高效地自动生成模型视图和标注
  14. 阿里云学生成长计划续费资格考试
  15. 基于Gin开发的系统代码生成器
  16. Python学习:批量转换图片格式-PNG转JPG
  17. 在成长的路上,我们必须与自己坦诚相见
  18. 【微信小程序】消息推送服务器配置及服务器域名配置(记录坑)
  19. 删除u盘插拔记录linux,Linux清除U盘(USB)使用记录
  20. 招标代理服务收费标准(计价格〔2002〕1980号)

热门文章

  1. 天然气故障代码大全_美的、格力中央空调常见故障代码大全
  2. python打包不能在其他电脑打开_pyinstaller打包python+opencv 无法在别人电脑上正常运行 问题所在:opencv_ffmpeg341_64.dll...
  3. 【网络安全】PGP/GPG优质教程汇总
  4. 安装blocksci mac出错_你的Mac与Big Sur兼容吗?
  5. 财务报表分析-损益表,资产负债表,现金流,回报率
  6. cydia无法安装卸载插件_【初识太极】CAD卸载不干净无法重新安装怎么办?
  7. 计算机组成与人体类比,2020年安徽公务员考试真题模拟:类比推理(7.13)
  8. 2021-09-1031. 下一个排列 数组
  9. DSSM,Deep Structured Semantic Models
  10. 无线OSS-高精度整数加法