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

oracle存储过程笔记

    博客分类:
  • db
阅读更多
最近在写oracle的存储过程,在写得过程中遇到了很多的状况,在此写下笔记以备察看。
基础语法部分:
1.定义存储过程:
CREATE OR REPLACE PROCEDURE 存储过程名字
(
    参数1 IN NUMBER,
    参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE  DEFAULT null;
BEGIN

END 存储过程名字

2.SELECT INTO STATEMENT
  将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
  记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
  例子:
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
3.IF 判断
  IF V_TEST=1 THEN
    BEGIN
       do something
    END;
  END IF;
或者
   IF V_TEST =1 THEN
BEGIN
--DO SOMTHING
      END;
   ELSIF V_TEST = 2 THEN
BEGIN
--DO SOMTHING
END;
   ELSE
BEGIN
--DO SOMTHING
END;
   END IF;
4.while 循环
  WHILE V_TEST=1 LOOP
  BEGIN
XXXX
  END;
  END LOOP;

5.变量赋值
  V_TEST := 123;

6.游标定义及使用语法:
  CURSOR  cursor_name is SELECT * FROM TABLE_TEST;
  FOR var IN cursor_name LOOP
  BEGIN
--CONTENT;
  END;
    END LOOP;


高级主题部分:
7.ORACLE异常处理
BEGIN
  SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
  EXCEPTION   --若前面的代码块中出现异常,那么将进入此处进行异常处理。
  WHEN NO_DATA_FOUND THEN --某个类型的异常的名字
BEGIN
      --do somthing ;
END;
  WHEN OTHERS THEN       --所有其它名字的异常,都在此代码块中处理。
  BEGIN
--DO SOMTHING
  END;
END;

ORACLE的存储过程很多地方都用到 BEGIN  END;
代码块。相当于程序语言中的圆括号,标识此段代码是一个整体。
而存储过程的异常处理也与程序语言异常,一个异常若是没有得到处理,那么会被一层一层的往外面抛出。
7.带参数的cursor
  CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
  OPEN C_USER(变量值);
  LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
    do something
  END LOOP;
  CLOSE C_USER;

8.动态游标的定义及使用
TYPE mycursor_type IS REF CURSOR;--自定义一个动态游标类型
my_cursor mycursor_type;          --定义游标变量

OPEN my_cursor FOR 'SELECT * FROM TABLE_TEST';
LOOP
FETCH my_cursor INTO COL_A,COL_B...;
exit when cursor_data%NOTFOUND;
--CONTENT;
END LOOP;

动态游标对于需要根据动态SQL语句来取得结果集的场合比较有用。对于游标的遍历,相对来说效率较为低。
对游标的遍历方案可以用ORACLE提供的RECORD技术进行替代。

9.自定义RECORD类型。
TYPE recordname IS RECORD(
    col1     number,
    col2 varchar2(30));
TYPE recordtable IS TABLE OF recordname  INDEX BY BINARY_INTEGER;
v_ecord recordtable ;

open dyna_cursor for 'select * from table_test';
fetch dyna_cursor bulk collect
    into v_ovthreshod_values;
CLOSE v_ecord;
for i in 1 .. v_ecord.COUNT LOOP
--do somthing
end loop;
将取出来的数据从动态游标里取出放到自定义表结构中。
这种方法对某条数据特殊处理比较容易,比如你需要对最后一条数据作特殊处理,那就只需要判断  I = v_ecord.COUNT 就是最后一条数据了。而游标的话比较麻烦。

10. oracle中队日期类型的值作相互操作时会出现异常。
如:(date1 - date2)*24*3600 = 4110.999999
比较奇怪,所以就采用取出来的日期是字符串,在用TO_DATE函数进行类型转换进行操作。返回结果集正确
2
0
分享到:
评论

相关推荐

    oracle存储过程学习笔记

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

    oracle存储过程学习笔记(四)

    在本篇“Oracle存储过程学习笔记(四)”中,我们将深入探讨存储过程的概念、创建、执行以及在实际应用中的优势。 1. **存储过程的概念** 存储过程是一组预先编译的SQL和PL/SQL语句,存储在数据库服务器中。当需要...

    oracle存储过程 学习笔记

    oracle存储过程 基础知识大全 oracle存储过程分享 实用指数五颗星哈

    oracle笔记存储函数和存储过程

    oracle笔记存储函数和存储过程,有具体的代码案例!存储函数和存储过程的知识笔记!

    ORACLE DBA工作笔记 运维数据迁移与性能调优

    标题中提到的“ORACLE DBA工作笔记 运维数据迁移与性能调优”揭示了这本书籍主要围绕着Oracle数据库管理员(DBA)在日常工作中经常需要进行的两项关键任务:数据迁移和性能调优。作为一名Oracle DBA,不仅要负责...

    oracle笔记(存储过程函数触发器游标流程控制等)

    这份"oracle笔记(存储过程函数触发器游标流程控制等)"涵盖了Oracle数据库管理中的关键知识点,包括但不限于以下几个方面: 1. **存储过程与函数**:存储过程是预编译的SQL语句集合,用于执行特定任务。它们可以提高...

    oracle dba学习笔记

    Oracle 的 System Global Area(SGA)是 Oracle 实例的内存结构,用于存储数据库的各种信息。查看 SGA 信息可以帮助 DBA 了解数据库的当前状态,例如,查看 SGA 的大小、使用情况、共享池的大小等。 3. 查看命中率...

    韩顺平玩转oracle视频教程笔记

    Oracle数据库是世界上最流行的数据库管理系统之一,广泛应用于企业级的数据存储和管理。韩顺平的“玩转Oracle”视频教程旨在帮助学习者掌握Oracle的核心概念和技术。以下是对视频教程笔记的详细解析: 首先,Oracle...

    Oracle 数据库Storage存储迁移笔记

    文件“som_sto_b.pbl”和“som_sto_d.pbl”可能是某种工具的二进制文件,它们可能与Oracle存储管理或迁移过程中的特定步骤有关。在Oracle环境中,"pbl"扩展名并不常见,但它们可能属于某个定制的存储管理工具或脚本...

    李兴华Oracle全部笔记

    其次,笔记可能会深入到Oracle的高级特性,比如PL/SQL编程,这是一种专为Oracle设计的过程化编程语言,用于创建存储过程、函数、触发器等。此外,可能还会涵盖数据库事务处理、并发控制和锁机制,这些都是保证数据...

    Oracle数据库课堂笔记

    以下是对Oracle数据库课堂笔记的详细解析,涵盖了从基础到进阶的重要知识点。 第一讲:Oracle简介 Oracle数据库是由甲骨文公司开发的,提供了一整套数据存储、管理和检索解决方案。它支持多种操作系统和硬件平台,...

    plsql创建存储过程并创建job定时任务执行-详细笔记文档总结

    plsql创建存储过程并创建job定时任务执行详细笔记文档总结 在 Oracle 中,plsql 是一种强大的编程语言,可以用来创建存储过程和定时任务执行。在本文中,我们将详细介绍如何使用 plsql 创建存储过程并创建 job 定时...

    oracle_sql笔记

    PL/SQL是Oracle的存储过程语言,结合了SQL和过程式编程。它可以创建存储过程、函数、触发器等,实现复杂的业务逻辑和数据库控制。 九、事务处理 在Oracle中,事务是一组SQL语句,被视为一个工作单元。事务处理包括...

    oracle原厂培训笔记

    ### Oracle原厂培训笔记知识点概览 #### 一、Oracle认证体系介绍 - **OCA (Oracle Certified Associate)**: 入门级别的Oracle认证,适用于具备基本Oracle技能的专业人士。 - **OCP (Oracle Certified Professional)...

    韩顺平oracle课堂笔记

    存储过程是Oracle数据库中预编译的SQL语句集合,可以视为可重复使用的功能模块。通过创建存储过程,我们可以提高代码复用性,减少网络通信,提升系统性能。存储过程可以包含输入、输出参数,甚至可以有返回值。在...

    【源代码】《涂抹Oracle-三思笔记之一步步学Oracle》

    《涂抹Oracle - 三思笔记之一步步学Oracle》是一本旨在深入浅出地教授Oracle数据库技术的书籍。源代码部分提供了配合书本学习的实际操作示例,帮助读者更直观地理解Oracle数据库的工作原理和操作技巧。以下是根据...

    oracle存储过程

    oracle存储过程,学习笔记。

Global site tag (gtag.js) - Google Analytics