`
wen866595
  • 浏览: 268344 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle 存储过程 基础

    博客分类:
  • sql
阅读更多

差不多一年没写过存储过程,最近要写,发现基本忘了,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笔记

17
5
分享到:
评论
12 楼 wy75792 2015-07-14  
不错不错
11 楼 wy75792 2015-07-14  
谁谁谁DVD发v的
10 楼 harim 2015-06-22  
very good!
9 楼 wen866595 2014-08-24  
李涤尘 写道
写得这么好,怎么还有人踩

因为你不可能让所有人都满意哈。这里很少更新了,我的博客都迁到 http://coderbee.net 上去了。
8 楼 李涤尘 2014-08-20  
写得这么好,怎么还有人踩
7 楼 u012622330 2013-11-20  
  
6 楼 syl_ok 2012-11-28  
看来我是没白来啊
5 楼 tangduDream 2012-11-24  
不错了 ,收藏 了 ,,我也一年多没写了,,哈哈,

4 楼 gkhlvgwh 2012-11-24  

文章挺好的。
3 楼 1317510154 2012-11-23  
 
2 楼 wen866595 2012-11-23  
wpf523 写道
好,赞一个

thanks!
1 楼 wpf523 2012-11-23  
好,赞一个

相关推荐

    oracle存储过程学习经典入门

    Oracle 存储过程基础知识 Oracle 存储过程是 Oracle 数据库中的一种程序单元,能够完成复杂的业务逻辑和数据操作。Oracle 存储过程的基础知识包括了解 Oracle 存储过程的基本语法、数据类型、变量声明、控制语句、...

    Oracle存储过程基础培训

    Oracle存储过程基础培训 Oracle存储过程基础培训

    oracle存储过程基础

    oracle存储过程基础性资料,初学者的宝库

    oracle存储过程基础教程

    这个基础教程将带你深入理解Oracle存储过程的概念、创建、执行以及调用方法。 一、Oracle存储过程概述 Oracle存储过程是预编译的SQL和PL/SQL代码集合,它们在数据库中作为一个单元进行存储和管理。存储过程可以提高...

    Oracle存储过程基础及优化.pdf

    Oracle存储过程基础及优化,介绍Oracle存储过程的语法及事务处理、异常处理、性能优化等

    oracle存储过程学习经典

    #### Oracle存储过程基础知识与实践 Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储过程的一些关键知识点的深入解析...

    关于oracle存储过程的基本语法

    ### Oracle存储过程基础语法详解及注意事项 #### 一、Oracle存储过程概述 Oracle存储过程是一种在Oracle数据库中存储的一段可执行的SQL代码或PL/SQL代码,它可以帮助开发人员实现复杂的业务逻辑处理,提高应用程序...

    Oracle数据库存储过程技术文档.doc

    第二章 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数据库中的一组有序的PL/SQL语句,可以包含变量声明、条件判断、循环结构以及SQL操作...

    Oracle PlSql 存储过程

    Oracle 存储过程基础知识包括了解 Oracle 存储过程的基本语法和结构。Oracle 存储过程的基本语法包括 PROCEDURE、FUNCTION 和 PACKAGE 等。PROCEDURE 是最基本的存储过程单元,FUNCTION 是带返回值的存储过程,而 ...

    ORACLE存储过程学习源码

    这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,我们将深入探讨存储过程的基本概念、结构、类型,以及如何通过这些源码进行学习。 1. **存储过程的...

    oracle 存储过程 案例

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL和PL/SQL语句,形成一个可重复使用的程序单元。这个“Oracle存储过程案例”提供了丰富的学习材料,帮助用户从入门到精通掌握...

    Oracle+PlSql存储过程

    **Oracle存储过程基础知识** Oracle存储过程是由一系列SQL和PL/SQL语句组成的程序单元,它可以在数据库服务器端执行。存储过程可以接受输入参数,返回输出结果,甚至处理异常。它们被编译一次,然后存储在数据库中,...

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

    ### Oracle 存储过程基础知识 存储过程是由一系列SQL和PL/SQL语句组成的,它们在数据库服务器上执行。通过定义参数,存储过程可以接受输入值,处理这些值,然后返回结果。这使得存储过程成为实现商业逻辑的理想选择...

    oracle 存储过程学习经典

    #### 二、Oracle存储过程的基础知识 - **创建与执行**: - 创建存储过程需要`CREATE PROCEDURE`系统权限。 - 如果存储过程需要被其他用户模式下的程序使用,则需要`CREATE ANY PROCEDURE`权限。 - 执行存储过程...

    初学者Oracle存储过程的实现的Demo

    一、Oracle存储过程基础 1. 存储过程的概念:存储过程是一组预先编译的SQL语句,存储在数据库服务器中,当需要时可以被调用执行。它提高了数据库的性能,因为编译只需进行一次,后续调用无需重复编译。 2. PL/SQL:...

    oracle存储过程总结.doc

    创建存储过程是 Oracle 存储过程的基础,使用 create or replace procedure 语句可以创建一个新的存储过程。例如: ```sql create or replace procedure test(var_name_1 in type, var_name_2 out type) as begin -...

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

    1. **Oracle存储过程基础知识** - 存储过程是一组为了完成特定功能的SQL和PL/SQL语句集合,它们被预先编译并存储在数据库中。 - 存储过程可以接受参数,以便在执行时传递不同的输入值,同时也可以返回结果或影响...

    C#调用oracle方法(包括调用存储过程)

    本文将详细介绍如何使用C#语言连接Oracle数据库,并演示如何调用Oracle存储过程,特别是带有输出参数的情况。这些知识点对于初学者来说尤为重要。 #### 前置知识 1. **C#基础**:理解C#的基本语法和概念。 2. **...

Global site tag (gtag.js) - Google Analytics