差不多一年没写过存储过程,最近要写,发现基本忘了,google一番之后,觉得很有必要把基础的东西写下来备忘。

  • 语句块定义:
  • decalre
    -- 变量声明
    var1 number(2); -- 仅声明
    var2 char(2) := ''; -- 在声明的同时初始化 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) := ''; 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) := ''; 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;

    本文转自:http://wen866595.iteye.com/blog/1733887

oracle 存储过程 基础的更多相关文章

  1. oracle 存储过程基础

    create or replace procedure update_CarryoverArchivers(bizsysname in varchar, year       in number de ...

  2. Oracle存储过程基础

    http://blog.sina.com.cn/s/blog_67e424340100iyg1.html

  3. Oracle 存储过程学习笔记

    1.存储过程简单实例 CREATE OR REPLACE PROCEDURE 存储过程名称 (参数in,参数out) AS -- 变量声明,每个声明用分号结束.可以在声明的同时初始化 name ); ...

  4. Oracle存储过程基本语法及基础教程

    存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...

  5. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  6. oracle存储过程实例

    oracle存储过程实例 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的P ...

  7. [转]使用ADO.NET访问Oracle存储过程

    本文转自:http://www.cnblogs.com/datasky/archive/2007/11/07/952141.html 本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程( ...

  8. oracle存储过程的例子

    oracle存储过程的例子 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的 ...

  9. Crontab定时执行Oracle存储过程

    Crontab定时执行Oracle存储过程 需求描述 我们有一个Oracle的存储过程,里面是每个月需要执行一下,生成报表,然后发送给业务部门,这一个功能我们有实现在系统的前台界面(如图1-1),但是 ...

随机推荐

  1. 做网站用UTF-8还是GB2312 & 各国语言对应字符集

    经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...

  2. iOS7中都Bar的透明问题

    /* New behavior on iOS 7. Default is YES. You may force an opaque background by setting the property ...

  3. mysql in 查询优化

    2014年11月29日21:01:01 场景:有的时候查询数据库的select in 语句中会有非常多不连续的数值,会很影响查询效率 方法:将select in 查询转换成多个select betwe ...

  4. codeigniter 视图

    2014年7月7日 15:23:05 ci的视图功能很棒, 比如一个网页有四个部分组成,对应4个文件:header.php, sider.php, maincontent.php, footer .p ...

  5. Java for LeetCode 072 Edit Distance【HARD】

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...

  6. 12.python笔记之mysqldb模块

    一.使用python调用模块操作MYsql 2.x版本使用mysqldb模块 3.x版本使用pymysql模块 1.数据库常用操作: 使用Navicat for MySql软件来操作 show dat ...

  7. 11.python之线程,协程,进程,

    一,进程与线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行 ...

  8. javascript 中string 型数据转换成int类型

    var str1 = "1234";var str2 = "1234";number = parseInt(str1); number就是int型 str1+s ...

  9. July 20th, Week 30th Wednesday, 2016

    Learn from yesterday, live for today, and hope for tomorrow. 借鉴昨天,活着当下,憧憬未来. Yesterday is the past, ...

  10. static_cast, dynamic_cast, const_cast

    http://www.cnblogs.com/chio/archive/2007/07/18/822389.html 首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1 ...