六、存储函数和过程
ORACLE提供可以吧PL/SQL程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数。
过程和函数的唯一区别就是函数总向调用者返回数据,而过程则不返回数据。
例:获取某部门的工资总和
create or replace function get_salary(
dep_id employees.department_id%type,
emp_count out number)
return number
is
v_sum number;
begin
select sum(salary),count(*) into v_sum,emp_count
from employees
where department_id = dep_id;
return v_sum;
exception
when no_data_found then
dbms_output.put_line('您需要的数据不存在');
when others then
dbms_output.put_line(sqlcode||':'||sqlerrm);
end;
执行该函数:
declare
v_num number;
v_sum number;
begin
v_sum := get_salary(80,v_num);
dbms_output.put_line('80号部门的工资总和:'||v_sum||', 人数:'||v_num);
end;
函数声明时定义的参数成为形式参数,应用程序调用时为函数传递的参数为实际参数。
函数传递参数方法:位置表式法、名称表式法、混合表式法。
实际参数和形式参数之间的数据传递有两种方法:传址法和传值法。
传址法:指在调用函数时,将实际参数的地址指针传递给形式参数,使形式参数和实际参数指向内存中的同一区域,从而实现参数数据的传递。这种方法又称作参照法,即形式参数参照实际参数数据。输入参数均采用传址法传递参数。
传值法:指将实际参数的数据拷贝到形式参数,而不是传递实际参数的地址。默认时,输出参数和输入/输出参数均采用传值法。在函数调用时,ORACLE将实际参数数据拷贝到输入/输出参数,而当函数正常运行退出时,又将输出形式参数和输入/输出形式参数数据拷贝到实际参数变量中。
create or replace procedure query_emp(
v_empid employees.employee_id%type,
v_name out employees.last_name%type,
v_sal out employees.salary%type)
is
begin
select last_name,salary into v_name,v_sal
from employees
where employee_id = v_empid;
dbms_output.put_line('员工号为:'||v_empid||'的员工已经找到');
exception
when no_data_found then
dbms_output.put_line('您需要的数据不存在');
when others then
dbms_output.put_line(sqlcode||':'||sqlerrm);
end;
调用方法:
declare
v1 employee.last_name%type;
v2 employee.salary%typ;
begin
query_emp(200,v1,v2);
dbms_output.put_line('姓名:'||v1||',工资:'||v2);
query_emp(201,v1,v2);
dbms_output.put_line('姓名:'||v1||',工资:'||v2);
end;
在创建存储工程时,可使用authid current_user或authid definer选项,以表明在执行该过程时oracle使用的权限:
1)、如果使用authid current_user选项创建一个过程,则oracle用调用该过程的用户权限执行该过程。为了成功执行该过程,调用者必须具有访问该存储过程体中引用的所有数据库对象所必须得权限。
2)、如果用默认的authid definer选项创建过程,则oracle使用过程所有者的特权执行该过程。为了成功执行该过程,过程的所有者必须具有访问该存储过程体中引用的所有数据库对象所必须得权限。想要简化应用程序用户的特权管理,在创建存储工程时,一般选择authid definer选项---这样就不必授权给需要调用的此过程的所有用户了。
开发存储过程步骤:
1)、使用文字编辑处理软件编辑存储过程源码;
2)、在SQLPLUS或用调试工具将存储过程程序进行解释;如:SQL>START c:\stat1.sql
3)、调试源码直到正确;(使用show error命令来提示源码错误的位置;使用user_errors数据字典来查看各存储过程的错误位置)
4)、授权执行权给相关的用户或角色;(grant execute on dbms_job to public with grant option)
5)、与过程相关数据字典;(user_source,all_source,dba_source,user_errors)(describe procedure_name查看过程的名字及其参数)
6)、删除过程和函数;(drop procedure [user.]procedure_name; drop function [user].function_name)
分享到:
相关推荐
PL/SQL,全称是Procedural Language/Structured Query Language,是Oracle数据库提供的一种结合了SQL语言和过程式编程的编程环境。它扩展了SQL的功能,使得开发人员能够编写复杂的数据库应用程序,处理事务、实现...
以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...
此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型转换、程序设计指导原则、合并数据库中的数据行(MERGE)、约束、索引、子查询、分页技术等高级主题。 最后,还有关于字符串、数值、...
存储过程和函数是PL/SQL的高级特性,它们将一系列操作封装起来,可以被多次调用。存储过程不返回值,而函数则返回一个值。 **触发器** 触发器是一种特殊的存储过程,它在特定的数据库事件(如INSERT、UPDATE、...
### 精通Oracle 10g PL/SQL编程学习笔记 #### 一、PL/SQL综述 **1.1 PL/SQL的功能与作用** PL/SQL (Procedural Language for SQL) 是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据处理能力与过程化...
- 子程序:包括函数和过程,函数返回值,过程不返回。 - 游标:用于逐行处理查询结果,实现动态数据处理。 - 异常处理:通过EXCEPTION部分捕获和处理运行时错误。 - 包(Package):将相关的过程、函数和变量...
1.2 PL/SQL程序结构 一个基本的PL/SQL块通常包含以下部分: - DECLARE:声明部分,用于定义变量、常量和游标等。 - BEGIN:执行部分,放置执行的语句,如SQL语句和过程调用。 - EXCEPTION:异常处理部分,用于捕获...
此外,通过将业务逻辑封装在PL/SQL子程序中,可以实现模块化的程序设计,使得代码更易于维护和复用。例如,可以创建一个过程或函数来处理特定的业务规则,然后在多个地方调用这个子程序。 PL/SQL还提供了异常处理...
本文将深入探讨PL/SQL程序设计中的一些关键知识点,包括基本语法、记录类型、流程控制、游标使用、异常处理、存储函数与存储过程以及触发器。 1. PL/SQL基本语法: PL/SQL程序由声明、执行和异常处理三部分组成。...
- **PL/SQL** (Procedural Language for SQL) 是 Oracle 数据库的一种扩展,它允许用户在 SQL 的基础上进行更复杂的程序设计。 - **特性**: - **变量与常量定义**:支持变量和常量的定义,增强数据处理能力。 - *...
PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库系统中的一种编程语言,它结合了SQL的查询能力与程序设计语言的特性,使得开发者能够编写复杂的存储过程、函数、触发器等数据库对象。PL/SQL...
**PL/SQL程序设计简介** PL/SQL是Oracle数据库中的一种结构化查询语言,它将SQL与过程式编程语言相结合,提供了更强大的数据库操作能力。本笔记版详细介绍了PL/SQL的设计与应用,适合初学者及有一定基础的开发者...
Oracle SQL编程是数据库管理的重要组成部分,特别是在Oracle数据库系统中,SQL与PL/...学习和熟练掌握这些Oracle SQL和PL/SQL的基本概念和技术,将有助于你有效地管理Oracle数据库,编写高效、安全的数据库应用程序。
PL/SQL的主要组成部分包括过程、函数和触发器,这些都存储在Oracle数据库中。过程和函数是可重用的代码单元,可以执行特定任务,而触发器则是在特定数据库事件发生时自动执行的代码。通过PL/SQL,开发者可以实现模块...
在Oracle环境中,PL/SQL(Procedural Language for SQL)是一种过程化的编程语言,主要用于编写存储过程、函数、触发器等组件,以此来增强数据库的功能性和安全性。 1. **扩展Oracle数据库的编程性能**:通过将业务...
在PL/SQL程序设计中,SQL语句是其核心组成部分。SQL,即结构化查询语言,用于管理和处理关系数据库系统中的数据。PL/SQL扩展了SQL的功能,允许在单个块中执行多条SQL语句,并提供了控制结构(如循环、条件判断等),...
PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库提供的一个编程语言,它结合了SQL的查询功能和传统的程序设计语言(如Pascal或C)的控制结构。PL/SQL主要用于编写存储过程、函数、...