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(http://www.my516.com)
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(50);
begin
getEmpInfo(&theId,theName,theSalary,theMessage);--输入员工id
dbms_output.put_line('ID为:'||theId||'的员工,名字为'||theName
||', 收入为'||theSalary||','||theMessage);
end;
---------------------
Oracle————存储过程与函数的更多相关文章
- oracle 存储过程,函数和包
创建存储过程: 语法:create [or replace] PROCEDURE 过程名(参数列表) AS PLSQL子程序体: 调用 存储过程的方式 两种1.execute(exec) - ...
- JAVA调用Oracle存储过程和函数
连接数据库的工具类: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; imp ...
- oracle 存储过程,存储函数,包,
http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过 ...
- Oracle存储过程、函数、包加密wrap
wrap加密可以将PL/SQL的代码实现部分隐藏,提高代码的安全性,如存储过程.函数.包等都隐藏. wrap加密的方法有两种,下面以函数为例分别介绍一下: 方法一: 编写好函数后保存到 d:\test ...
- Oracle存储过程及函数的练习题
--存储过程.函数练习题 --(1)创建一个存储过程,以员工号为参数,输出该员工的工资create or replace procedure p_sxt1(v_empno in emp.empno%t ...
- Oracle存储过程及函数
1.在Oracle中,存储过程包括三部分组成:定义部分.执行部分.和异常处理部分(即例外) eg1:输入员工编号,查询员工的姓名和薪资 create or repalce procedure myp ...
- Oracle存储过程和函数使用方法
一.存储过程(PROCEDURE) 使用过程, 不仅可以简化客户端应用程序的开发和维护,而且可以提高应用程序的运行性能. CREATE [OR REPLACE] PROCUDURE procedur ...
- oracle存储过程、函数、序列、包
一. 存储过程 1. 语法 create or replace procedure procedureName(seqName varchar2) is /*声明变量*/ n ); cursor cu ...
- Oracle - 存储过程、函数、包的使用练习-雇员
--存储过程范例:得到雇员表 emp 的记录数 begin --说明:若过程中要向外抛异常,请使用 exception when others then raise; 这个抛出的异常在程序里是可以捕获 ...
随机推荐
- E20180424-hm
thumb n. 拇指; (手套的) 拇指部份; trigger vt. 引发,触发; 扣…的扳机; 发射或使爆炸(武器或爆炸性弹药); n. (枪) 扳机; 起动装置,扳柄; 引发其他事 ...
- STL - merge()
merge用来对两个有序容器进行合并.返回合并后存入容器中的元素的下一个位置的迭代器(可以认为是超尾). merge(v1.first(),v1.end(),v2.first(),v2.end(),r ...
- C# 中==和Equal的区别
http://new-fighter.iteye.com/blog/1634800 今天突然看到一种情况,颠覆了我对这比较使用方法的判断. 于是开始在网上找资料,但几乎都是Java的,好不容易找到一个 ...
- poj 3648 Wedding【2-SAT+tarjan+拓扑】
看错题*n,注意是输出新娘这边的-- 按2-SAT规则连互斥的边,然后注意连一条(1,1+n)表示新娘必选 然后输出color[belong[i]]==color[belong[1+n(新娘)]]的点 ...
- expect实现配置机器信任关系
利用expect的交互功能,自动配置信任机器之间的信任关系. 代码里会判断机器是否生成了秘钥,如果没有生成过,则自动帮助你执行 ssh-keygen #!/bin/sh expect_ssh_copy ...
- Swift typealias associatedType
使用typealias为常用数据类型起一个别名, 一方面更容易通过别名理解该类型的用途, 另一方面还可以减少日常开发的代码量. typealias使用实例: // 网络请求常用回调闭包 typeali ...
- django接受表单
from django.shortcuts import render from django.shortcuts import HttpResponse import os # Create you ...
- Codeforces Round #302 (Div. 1) 训练
链接: http://codeforces.com/contest/543 过程: 惨淡的只做出了A和C 题解: A 题解: 简单的一道题 我们用$dp[i][j]$表示当前考虑到前num个人(这个另 ...
- AtCoder Grand Contest 017 F - Zigzag
题目传送门:https://agc017.contest.atcoder.jp/tasks/agc017_f 题目大意: 找出\(m\)个长度为\(n\)的二进制数,定义两个二进制数的大小关系如下:若 ...
- LightOj 1170 - Counting Perfect BST (折半枚举 + 卡特兰树)
题目链接: http://www.lightoj.com/volume_showproblem.php?problem=1170 题目描述: 给出一些满足完美性质的一列数(x > 1 and y ...