`
zcz123
  • 浏览: 158830 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类

oracle 存储过程的基本用法

阅读更多

基本结构

CREATE OR REPLACE PROCEDURE 名称

(

参数1 IN NUMBER,

参数2 OUT NUMBER,

参数3 IN OUT NUMBER

.....

) IS (AS)

变量1 VARCHAR2(50);

变量2 INTEGER :=0;

.....

BEGIN

dosomething...

END 名称;

一些用法

1.SELECT INTO STATEMENT (返回一条记录赋值给一个或多个变量)

select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)

例子:

BEGIN
SELECT col1,col2 into
变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN 
dosomething... 

END;

2.IF 判断

例子:

IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;

3.WHILE 循环

例子:

WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;

4.FOR 循环

例子:

FOR I IN 1..100 LOOP

do something.

END LOOP;

5.变量赋值

V_TEST :=0;

6.使用游标(返回多条记录的结果集)

例子1(使用fetch...into...)

BEGIN

OPEN cur FOR SELECT * FROM EMP;

LOOP

FETCH cur INTO cur_result ;

do something;

END LOOP;

CLOSE cur;

END;

例子2(使用for...in...)

....

IS

Cursor cur is select * from emp;

v_emp EMP%ROWTYPE;

BEGIN

 FOR v_emp IN cur loop

 do someting;

end loop;

END;

7.有无返回值,看看传入的参数是否有IN,OUT,无OUT无返回值,反之,亦然.

8.IS 后面定义的不能加入IN,OUT 关键字

9.游标属性,cur%found,cur%notFound,cur%rowcount=>下一行结果集存在,下一行结果集不存在,行数

10.类型属性,table.field%type,table%rowType

11.异常(内部异常和用户异常)

常见的异常:

no_data_found(select into 语句没有符合条件的记录返回)
too_many_rows(select into 语句符合条件的记录有多条返回)
dup_val_on_index(对于数据库表中的某一列,该列已经被限制为唯一索引,程序试图存储两个重复的值)
value_error(在转换字符类型,截取或长度受限时,会发生该异常,如一个字符分配给一个变量,而该变量声明的长度比该字符短,就会引发该异常)
storage_error(内存溢出)
zero_divide(除数为零)
case_not_found(对于选择case语句,没有与之相匹配的条件,同时,也没有else语句捕获其他的条件)
cursor_already_open( 程序试图打开一个已经打开的游标 )
timeout_on_resource( 系统在等待某一资源,时间超时 )

others (其他未命名的异常)

例子:

BEGIN

do something

EXCEPTION

when not_data_found then null;

when others then exit;

END;

12.抛出异常

通过PL/SQL运行时引擎   
使用RAISE语句
调用RAISE_APPLICATION_ERROR存储过程

例子:(使用RAISE语句)

BEGIN
IF order_rec.qty>inventory_rec.qty THEN
RAISE inventory_too_low;
END IF ;
EXCEPTION
WHEN inventory_too_low THEN
order_rec.staus:='backordered';
END;

 一些对应的例子

  -- 存储过程测试1(赋值变量)
  create or replace procedure mytest1(t  in varchar2,
                                      t2 out varchar2,
                                      t3 out varchar2) is
begin
  select ename, job into t2, t3 from emp p where p.empno = t;
  dbms_output.put_line('ok');
exception
  when others then
    rollback;
end mytest1;

  -- 存储过程测试2(判断条件)
  create or replace procedure mytest2(x in number, y out number) is
begin
  if (x > 0) then
begin
  y := 10;
end;
end if; if x = 0 then
begin
  y := 5
end;
end if;
end mytest2;

  -- 存储过程测试3(while 循环条件)
  create or replace procedure mytest3(i in number, j out number) is
begin
  while i < 10 loop
begin
  i := i + 1; j := i;
end;
end loop;
end mytest3;

  -- 存储过程测试4(for 循环条件)
  create or replace procedure mytest4() as
  cur Cursor is
  select ename from emp; myname varchar2(100);
begin
  for myname in cur loop
begin
  dbms_output.put_line(myname);
end;
end loop;
end mytest4;

  -- 游标的使用(Cursor型游标,SYS_REFCURSOR型游标)
  create or replace procedure mytest5() is
  cur1 Cursor is
  select ename from emp where empno = ''; --Cursor的使用方式1
  cur2 Cursor;
begin
  select xxxx into cur2 from tablename where xx = ''; --Cursor的使用方式2
end mytest5;

  create or replace procedure mytest52(rsCursor out sys_refcursor) as
  cur sys_refcursor; myname varchar(20);
begin
  open cur for select ename from emp where ''; --SYS_REFCURSOR只能通过OPEN方法来打开和赋值
  loop fetch cur into myname
--SYS_REFCURSOR只能通过fetch into来打开和遍历 exit when cursor%NOTFOUND; --SYS_REFCURSOR中可使用三个状态属性:
  ---%NOTFOUND(未找到记录信息) %FOUND(找到记录信息) ---%ROWCOUNT(然后当前游标所指向的行位置)
  dbms_output.put_line(myname);
end loop; rsCursor := cur;
end mytest52;

分享到:
评论

相关推荐

    oracle存储过程学习经典入门

    Oracle 存储过程学习目录是 Oracle 存储过程学习的基础知识,了解 Oracle 存储过程的基本语法、基础知识和一些常见问题的解决方法是非常重要的。本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储...

    oracle存储过程的基本用法

    结合实例,介绍了oracle存储过程的用法,包括定义,变量类型,游标,流程分支语句的使用

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

    oracle存储过程解锁

    ### 描述:“如果存储过程被锁住,可以使用这个存储过程解锁方法” #### 解析: 当遇到存储过程被锁定的情况时,通常可以通过查询`dba_ddl_locks`视图来查找锁定的详细信息。例如,要检查名为`prc_exec_day`的存储...

    oracle存储过程unwrap解密工具.zip

    Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...

    帆软报表Oracle存储过程解决storeParameter1参数试用插件

    此外,对于Oracle存储过程,理解其基本概念和使用方法也是必要的。存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑,提高数据处理效率,并通过参数传递数据。在与帆软报表集成时,正确理解和调用存储过程能...

    Oracle存储过程的基本语法

    Oracle存储过程是数据库管理系统...以上就是Oracle存储过程的基本语法,包括如何定义、使用参数、控制流结构以及与游标交互的方法。掌握这些基础,开发者可以构建复杂的应用逻辑,并在数据库层面上高效地处理数据。

    oracle 存储过程 函数 dblink

    本文主要介绍了Oracle存储过程的概念、创建和调用方法,以及如何使用DBLink实现跨库操作。存储过程提供了强大的数据库处理能力,而DBLink则使得不同数据库实例之间的交互变得更加方便和高效。掌握这些技术对于提高...

    oracle存储过程-帮助文档

    Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL语句和PL/SQL块,形成可重复使用的代码单元。这篇博客“oracle存储过程-帮助文档”可能提供了关于如何创建、调用和管理Oracle存储过程...

    Oracle存储过程返回结果集

    本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...

    Oracle存储过程基本语法及示例

    ### Oracle存储过程基本语法及示例 在Oracle数据库中,存储过程是一种强大的工具,用于封装一组SQL语句或PL/SQL代码块,以便在数据库服务器上执行特定的任务。存储过程可以提高应用程序性能、确保数据完整性并简化...

    oracle 存储过程的基本语法

    ### Oracle存储过程的基本语法知识点详解 #### 一、Oracle存储过程概述 Oracle存储过程是一种预编译的SQL脚本集合,它可以包含复杂的控制流逻辑、数据处理操作等,并且能够被其他应用程序或用户通过简单的调用来...

    C# 传入自定义列表List 到Oracle存储过程

    本文将详细讲解如何在C#中使用自定义列表(List)作为参数调用Oracle存储过程,以及实现这一功能的关键技术和注意事项。 首先,我们需要了解Oracle数据库中的PL/SQL类型,例如VARCAR2、NUMBER等,它们对应于C#中的...

    hibernate query调用oracle存储过程

    以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    本示例展示了如何使用 CallabledStatement 来调用 Oracle 存储过程,并实现 IN OUT 参数和游标类型参数的使用。这种方法可以提高应用程序的性能和安全性。同时,游标类型参数的使用可以实现数据的批量处理,提高应用...

    oracle存储过程学习经典

    #### Oracle存储过程基本语法 存储过程在Oracle中的创建遵循以下基本结构: ```sql CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN 类型, 参数2 OUT 类型, 参数3 INOUT 类型 ) AS 变量声明区; BEGIN ...

    Oracle存储过程详细使用手册

    本手册将详细介绍 Oracle 存储过程的使用方法和相关知识点。 1. 创建存储过程 创建存储过程的基本语法为:`CREATE OR REPLACE PROCEDURE procedure_name (parameter1, parameter2, ...) AS ... BEGIN ... END;`...

    Oracle存储过程和函数(最详细包含emp 表实例操作,边看边操作)

    **一、Oracle存储过程** 存储过程是一组预编译的SQL语句和PL/SQL代码,存储在数据库服务器上,可以按需调用。存储过程的优点包括提高性能、减少网络流量、增强安全性以及实现模块化编程。 1. **创建存储过程**:...

    Oracle存储过程调用bat批处理脚本程序

    本话题将详细探讨如何在Oracle存储过程中调用外部的批处理脚本,如Windows系统的BAT文件,以实现数据库操作与系统命令的集成。 首先,`Oracle存储过程`是一种预编译的SQL和PL/SQL代码集合,可以被多次调用以执行...

    访问ORACLE存储过程

    在.NET环境中,访问Oracle存储过程是一项常见的任务,用于执行数据库中的复杂操作,如数据处理、事务管理和业务逻辑。本文将详细介绍如何使用OracleClient数据提供者在C#中调用存储过程,包括带输入、输出参数的存储...

Global site tag (gtag.js) - Google Analytics