`

Oracle学习之存储过程(转)

阅读更多

子程序

子程序分类

过程:又叫存储过程,Stored Procedure,简称:sp。

函数:function

触发器:trigger

存储过程:strore procedure,所以用 sp_

函数:function,所以用 fun_

触发器:trigger,所以用 tr_

包:package,所以用pkg

参数:parameter,所以用 p_

变量:value,所以用 v_

说明:

每个公司都有一些自定义开发规范。

子程序优点

模块化:一个过程完成一个模块

可重用性:一次编写,反复调用

易维护:谁出错,修改谁

易调试:可以单步调试,而匿名块不能(实用功能)

存储过程

与块的关系

存储过程头定义+块 = 存储过程

调用存储过程

call 存储过程(变量):JDBC中调用sp标准方式

exec 存储过程(变量):PL/SQL中调用,支持控制台输出         

 

案例一:删除指定名称表格

特点:无参数存储过程

CREATE OR REPLACE PROCEDURE sp_del_table
AS 
str_sql VARCHAR2(1000);
str_table_name VARCHAR2(100);
BEGIN
  str_table_name := 't1';
  str_sql := 'drop table '||str_table_name; 
  EXECUTE IMMEDIATE str_sql;
END;

案例二:添加员工和部门(给出部门名,工号,姓名,工作日期)

特点:输入参数

CREATE OR REPLACE PROCEDURE sp_add_info
(
p_dept_name IN dept.dname%TYPE,
p_empno emp.empno%TYPE,
p_ename emp.ename%TYPE,
p_hiredate emp.hiredate%TYPE
)
AS
v_max_deptno dept.deptno%TYPE;
BEGIN
SELECT nvl(MAX(dept.deptno),0) INTO v_max_deptno FROM dept;
INSERT INTO dept(deptno,dname) VALUES(v_max_deptno+1,p_dept_name);
INSERT INTO emp(empno,ename,hiredate,deptno) VALUES(p_empno,p_ename,p_hiredate,v_max_deptno+1);
COMMIT;
END;

SQL> exec sp_add_info('new1',2000,'javaboy',to_date('2008-4-5','yyyy.mm.dd'));

案例三:添加指定员工,并返回员工总数

特点:输入参数,输出参数

CREATE OR REPLACE PROCEDURE sp_add_emp
(
p_emp_no emp.empno%TYPE,
p_emp_name emp.ename%TYPE,
p_emp_count OUT NUMBER
)
AS
BEGIN
INSERT INTO emp(empno,ename) VALUES(p_emp_no,p_emp_name);
COMMIT;
SELECT COUNT(*) INTO p_emp_count FROM emp;
END;

调用命令:
SQL> set serveroutput on
SQL> var emp_count number;
SQL> exec sp_add_emp('kk',2002,:emp_count);
SQL> begin
  2   dbms_output.put_line(:emp_count);
  3  end;
  4  /

案例四:根据员工号更新员工姓名(最大10位),并返回新姓名

特点:输入输出参数

CREATE OR REPLACE PROCEDURE update_emp_info
(
  p_emp_no emp.empno%TYPE,
  p_emp_name IN OUT emp.ename%TYPE
)
AS
  len_name NUMBER(2);
BEGIN
  len_name := length(p_emp_name);
  IF(len_name>10)THEN
     p_emp_name := substr(p_emp_name,1,10);
  END IF;
  INSERT INTO emp(empno,ename) VALUES(p_emp_no,p_emp_name);
  COMMIT;
END;

调用:

SQL> var emp_name varchar2(20);

SQL> exec :emp_name :='01234567890123456789';

 

PL/SQL procedure successfully completed

emp_name

---------

01234567890123456789

 

SQL> exec update_emp_info(3001,:emp_name);

 

PL/SQL procedure successfully completed

emp_name

---------

0123456789

 

SQL> begin

  2    dbms_output.put_line(:emp_name);

  3  end;

  4  /

传递参数

根据位置传递(根据参数定义的顺序调用)

根据名称传递(根据参数的名称调用,顺序可与定义时不同)

混合传递(同时使用位置和名称传递)。

案例:添加部门信息,部门名称重复时要给出提示,然后通过三种方式调用。

CREATE OR REPLACE PROCEDURE add_dept
( p_dept_no dept.deptno%TYPE,
  p_dept_name dept.dname%TYPE
)
AS
  dept_count NUMBER(1);
BEGIN
  SELECT COUNT(*) INTO dept_count FROM dept
  WHERE dept.dname=p_dept_name;
  IF(dept_count>=2)THEN
     raise_application_error(-20005,'部门名称不能重复!');
  END IF;
 
  INSERT INTO dept(deptno,dname)
  VALUES(p_dept_no,p_dept_name);
  COMMIT;
END;

 

分享到:
评论

相关推荐

    oracle存储过程学习经典入门

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

    ORACLE存储过程学习源码

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

    oracle存储过程学习经典

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

    oracle的存储过程学习资料

    这组学习资料涵盖了存储过程的基础操作和进阶知识,对于想要深入理解Oracle数据库管理和开发的人员来说非常有价值。 1. **存储过程的定义与类型** - 存储过程可以分为三种类型:简单存储过程(仅包含SQL语句)、带...

    oracle 存储过程学习经典

    ### Oracle存储过程学习经典知识点详解 #### 一、Oracle存储过程概述 - **定义**: 存储过程是在数据库中预编译并存储的一段SQL或PL/SQL代码块,它可以包含复杂的逻辑处理,用于实现特定的功能。存储过程提高了代码...

    oracle存储过程学习资料

    在本学习资料中,你将深入理解Oracle存储过程的创建、调用、调试以及优化等多个方面。 1. **存储过程的创建**: Oracle存储过程通过`CREATE PROCEDURE`语句来定义。你可以指定输入参数、输出参数、输入输出参数,...

    Oracle 存储过程学习文档

    ### Oracle存储过程学习文档知识点详解 #### 一、Oracle存储过程概述 **1.1 存储过程定义:** Oracle存储过程是一种存储在数据库中的PL/SQL代码块,它可以接收输入参数并返回输出参数。存储过程能够执行复杂的业务...

    Oracle触发器与存储过程高级编程-第3版itpub.rar

    《Oracle触发器与存储过程...通过对这本书的深入学习,读者不仅能掌握Oracle触发器和存储过程的基本概念,还能提升在实际项目中运用这些技术解决复杂问题的能力。无论是数据库管理员还是开发人员,都将从中受益匪浅。

    Oracle学习开发常用的SQL和存储过程学习(内含SQL面试题目和存储过程,函数面试题目).zip

    本资源“Oracle学习开发常用的SQL和存储过程学习(内含SQL面试题目和存储过程,函数面试题目).zip”提供了全面的学习材料,旨在帮助初学者和求职者提升在Oracle数据库中的SQL查询和存储过程编写技能。 SQL...

    oracle存储过程学习经典(实例)

    这个"Oracle存储过程学习经典(实例)"资源显然是为初学者设计的,旨在帮助他们掌握如何创建、执行和管理存储过程。 存储过程在数据库管理中扮演着关键角色,它可以提升系统的性能,通过减少网络流量和提供预编译的...

    oracle存储过程-帮助文档

    `oracle procedure.chm`是一个帮助文件,通常包含详细的参考信息、示例和教程,供用户学习和查询Oracle存储过程的用法。CHM(Compiled HTML Help)格式是一种微软提供的离线帮助文档格式,用户可以通过搜索和导航来...

    oracle通过存储过程POST方式访问接口

    总的来说,"Oracle通过存储过程POST方式访问接口"涉及到数据库编程、网络通信和安全性等多个方面,需要综合运用PL/SQL和Oracle的网络工具。通过学习和实践,你可以构建出高效、安全的接口交互方案。

    oracle存储过程常用技巧

    Oracle存储过程常用技巧 Oracle存储过程是一种强大的数据库对象,它可以帮助开发者简化复杂的业务逻辑,并提高数据库的安全...通过学习这些技巧,开发者可以更好地使用 Oracle 存储过程,提高开发效率和数据库性能。

    ORACLE存储过程最全教程

    通过学习本教程,你将能够熟练地创建、调用和管理Oracle存储过程,解决复杂的业务问题,提升数据库应用的效率和安全性。教程中的20篇文档将覆盖这些知识点的详细解释和示例,帮助你逐步成为Oracle存储过程的专家。

    oracle 存储过程 案例

    这个“Oracle存储过程案例”提供了丰富的学习材料,帮助用户从入门到精通掌握存储过程和游标的使用。下面我们将深入探讨这两个核心概念。 一、Oracle存储过程 存储过程是预编译的SQL语句集合,可以包含数据查询、...

    oracle 存储过程学习总结

    Oracle存储过程学习总结涵盖了Oracle中存储过程的编写与应用,涉及到字符串处理、游标使用、PL/SQL编程等方面的知识点。 首先,字符串处理是存储过程中常见的操作。文章中提到了多个内置函数,如CONCAT用于连接字符...

    oracle触发器与存储过程高级编程

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和灵活性使得开发者可以利用各种特性来实现复杂的业务逻辑。在Oracle中,触发器和存储过程是两个关键的数据库编程元素,它们在数据管理和业务流程自动...

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

    ### C#调用Oracle方法(包括调用存储过程) 在.NET框架中,使用C#语言进行数据库操作是一项常见的任务。本文将详细介绍如何使用C#语言连接Oracle数据库,并演示如何调用Oracle存储过程,特别是带有输出参数的情况。...

Global site tag (gtag.js) - Google Analytics