Oracle————存储过程与函数

存储过程
存储过程参数模式包括IN、OUT、 IN OUT。

IN(默认参数模式):表示当存储过程别调用时,实参值被传递给形参;形参起变量作用,只能读该参数,而不能修改该参数。IN模式参数可以是变量或表达式。
OUT:表示当存储过程被调用时,实参值被忽略;形参起未初始化的PL/SQL变量的作用,形参的初始值为NULL,可以进行读/写操作,在存储过程调用结束后,形参值被给实参。OUT模式参数只能是变量,不能是常量或表达式。
IN OUT表示当存储过程被调用时,形参值被传递给形参。形参起已初始化的PL/SQL变量的作用,可读可写。IN OUT 模式参数只能是变量,不能是常量或表达式。
使用OUT、IN OUT模式参数时只有当程序正常结束时形参值才会传递给实参。
举例:

create or replace procedure proc_divide
(num1 in out number,num2 in out number) is
r1 number;
r2 number;
begin
r1:=trunc(num1/num2);
r2:=mod(num1,num2);
num1 := r1;
num2 := r2;

exception
when zero_divide then
dbms_output.put_line(‘除法中分母不能为零‘);
when others then
dbms_output.put_line(‘程序运行错误!请使用游标‘);
end proc_divide;

set serveroutput on
declare
n1 number:=&n1;
n2 number:=&n2;
begin
proc_divide(n1,n2);
dbms_output.put_line(‘两个数字相除的结果是:‘||n1);
dbms_output.put_line(‘取余的结果是:‘||n2);
end;
函数
(1)函数的创建与存储过程的创建相似,不同之处在于,函数有一个显示的返回值。

(2)在函数的创建过程中没有declare关键字,而是使用is或者as关键字来代替。

(3)函数必须有返回值:return datatype。

(4)一般不在函数中执行 DML(数据操纵语言-插入、删除、更新)操作。

举例:存储过程调用函数

--函数 increaseSalary()
create or replace function increaseSalary(theIncome in number) return varchar2
as
theMessage varchar2(50);
begin
if theIncome <=4000 then
theMessage := ‘收入太低,工资增加10%‘;
elsif theIncome <=8000 then
theMessage := ‘收入偏低,工资增加5%‘;
elsif theIncome <=20000 then
theMessage := ‘收入一般,工资增加2%‘;
else
theMessage := ‘收入很高,工资增加1%‘;
end if;
return theMessage;
end;
--存储过程
create or replace procedure getEmpInfo
(theId in out employees.employee_id%type,
theName out employees.first_name%type,
theSalary out employees.salary%type,
theMessage out varchar2)
is
begin
select employee_id,first_name,salary,increaseSalary(salary)
into theId,theName,theSalary,theMessage
from employees
where employee_id = theId;

exception
when NO_DATA_FOUND then
dbms_output.put_line(‘没有该员工信息‘);
end;

set serveroutput on ;
declare
theId employees.employee_id%type:=&theId;
theName employees.first_name%type;
theSalary employees.salary%type;
theMessage varchar2(http://www.my516.com);
begin
getEmpInfo(&theId,theName,theSalary,theMessage);--输入员工id
dbms_output.put_line(‘ID为:‘||theId||‘的员工,名字为‘||theName
||‘, 收入为‘||theSalary||‘,‘||theMessage);
end;

---------------------

原文地址:https://www.cnblogs.com/ly570/p/10977631.html

时间: 2024-10-10 22:10:54

Oracle————存储过程与函数的相关文章

oracle 存储过程,存储函数,包,

http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比,存储过程有很多优点,具体归纳如下: * 存储过程和函数以命名的数据库对象形式存储于数据库当中.存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上

oracle 存储过程,函数和包

创建存储过程: 语法:create [or replace] PROCEDURE 过程名(参数列表) AS PLSQL子程序体: 调用 存储过程的方式 两种1.execute(exec)     ------exec  函数名()2.begin          函数名()   end           -------begin  函数名()end 函数(Function)为一命名的存储程序,可带参数,并返回一计算值.函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值.函数说明

Oracle存储过程及函数

1.在Oracle中,存储过程包括三部分组成:定义部分.执行部分.和异常处理部分(即例外) eg1:输入员工编号,查询员工的姓名和薪资 create or repalce  procedure mypro2 is declare --定义部分,定义变量和常量等,变量定义一般以V_开头,常量定义一般以C_开头 v_ename varchar2(20); v_sal number(7,2); begin--执行部分 select ename,sal into v_ename,v_sal from e

Oracle存储过程和函数

创建一个存储过程: CREATE OR REPLACE procedure proc_trade(    v_tradeid in tt_b.number%TYPE,                        --交易id    v_third_ip in tt_b.varchar2%TYPE,                     --第三方ip    v_third_time in tt_b.date%TYPE ,                      --第三方完成时间     

oracle 存储过程、函数和包的权限

GRANT CREATE ANY PROCEDURE TO MONKEY --创建.查看.替换权限 GRANT EXECUTE ANY PROCEDURE TO MONKEY --执行和查看的权限 GRANT ALTER ANY PROCEDURE TO MONKEY --编译的权限 GRANT DEBUG ANY PROCEDURE TO MONKEY --查看和调试的权限 原文地址:https://www.cnblogs.com/zhm1985/p/12306909.html

项目中oracle存储过程记录——常用语法备忘

项目中oracle存储过程记录--常用语法备忘 项目中需要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.其中原表之一的日期字段是timestamp类型,目标表的字段是varchar2类型: 其中一些内容很常用,所以做下记录,供查找. 1.存储过程的格式 oracle存储过程和函数都可以实现,一般没有返回值,则采用存储过程,函数比sqlserver的功能强大.oracle变量定义最好加上前缀如V_,查询条件中变量名称和字段名称不能重复

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

Oracle 存储过程定义和优点及与函数区别

定义: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可.在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包. 优 点: 1.(预编译)存储过程只在创造

Oracle学习(十二):存储过程/存储函数

1.知识点 --第一个存储过程 /* 打印Hello World create [or replace] PROCEDURE 过程名(參数列表) AS PLSQL子程序体: 调用存储过程: 1. exec sayHelloWorld(); 2. begin sayHelloWorld(); sayHelloWorld(); end; / */ create or replace procedure sayHelloWorld<span style="white-space:pre"