ORACLE 存储函数
前奏:
必要的概念:
ORACLE 提供能够把 PL/SQL 程序存储在数据库中。并能够在不论什么地方来运行它。这样就叫存储过
程或函数。
过程和函数统称为 PL/SQL 子程序。他们是被命名的 PL/SQL 块,均存储在数据库中,并
通过输入、输出參数或输入/输出參数与其调用者交换信息。过程和函数的唯一差别是函数总向调
用者返回数据。而过程则不返回数据。 1:创建函数
CREATE [OR REPLACE] FUNCTION function_name
[ (argment [ { IN | IN OUT }] Type,
argment [ { IN | OUT | IN OUT } ] Type ]
[ AUTHID DEFINER | CURRENT_USER ]
RETURN return_type
{ IS | AS }
<类型.变量的说明>
BEGIN
FUNCTION_body
EXCEPTION
其他语句
END; 2:说明:
1) OR REPLACE 为可选. 有了它, 能够或者创建一个新函数或者替换同样名字的函数, 而不会出现冲突
2) 函数名后面是一个可选的參数列表, 当中包括 IN, OUT 或 IN OUT 标记. 參数之间用逗号隔开. IN 參数标记表示传递给函数的值在该函数运行中不改变OUT 标记表示一个值在函数中进行计算并通过该參数传递给调用语句; IN OUT 标记表示传递给函数的值能够变化并传递给调用语句. 若省略标记, 则參数隐含为 IN。
3) 由于函数须要返回一个值, 所以 RETURN 包括返回结果的数据类型. 3:例题:
--存储函数结构
create function func_name(dept_id number , salary number)
return number
is
--函数使用过程中 须要声明的变量 记录类型 cursor
begin
--函数的运行体
exception
--处理函数运行过程中异常
end; --例题1 写一个返回hellow world的function
create or replace function hello_func(temp varchar2)
return varchar2
is
begin
return 'hello world'|| temp;
end; --调用函数:
begin
dbms_output.put_line(hello_func);
end;
select hello_func('cui') from dual; --例二 写一个返回系统时间的函数 假设函数没有形參 切勿加()
create function get_sysdate
return date
is
v_date date;
begin
v_date := sysdate;
return v_date;
end; select get_sysdate() from dual; --创建两个參数相加的 存储函数
create function add_func(temp_A number , temp_B number)
return number
is
temp_sum number(10);
begin
temp_sum := temp_A + temp_B;
return temp_sum;
end; select add_func(1,1) from dual; --定义一个函数:获取给定部门的工资总和。要求:部门号定义为參数,工资总额定义为返回值;
create function get_sal(dept_id number)
return number
is
v_sumsal number(10):=0;
cursor salary_cursor is select salary from employees where department_id = dept_id;
begin
for c in salary_cursor loop
v_sumsal := v_sumsal + c.salary;
end loop;
return v_sumsal;
end; select get_sal(60) from dual; --定义一个函数 获取指定部门的工资总和 和 该部门的员工总数(定义为out类型的參数)
--要求部门号定义为參数,工资总额定义为返回值
create function get_sall(dept_id number , total_count out number)
return number
is
v_sumsal number(10):=0;
cursor salary_cursor is select salary from employees where department_id = dept_id;
begin
total_count := 0;
for c in salary_cursor loop
v_sumsal := v_sumsal + c.salary;
total_count := total_count + 1;
end loop;
return v_sumsal;
end; 4:函数的调用 declare
v_num number(5):=0;
begin
dbms_output.put_line(get_sall(60,v_num));
dbms_output.put_line(v_num);
end;
ORACLE 存储函数的更多相关文章
- Oracle存储函数,存储过程
一.Oracle存储函数:存储的PL/SQL语法块,完成特定的功能.1.语法: 函数关键字: function (1)创建函数 CREATE [OR REPLACE] FUNCTION <fun ...
- Oracle存储函数jdbc调用
package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...
- oracle存储函数实例
CREATE OR REPLACE PROCEDURE "PROC_INS_DAY_DOCTOR_LL"(v_date in VARCHAR) is --PROC_INS_DAY_ ...
- oracle 存储函数,更新库存
create procedure PRO_update_Goods_group_stock is v_min_stock , ); v_gg_stock , ); v_goods_no number; ...
- Oracle的基本语法,存储函数及触发器
1.PL/SQL PL/SQL是Oracle对 ql语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句,使SQL语言具有过程处理能力.把 SQL 语言的数据操纵能 力与过程语言的数据 ...
- Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...
- oracle存储过程和存储函数&触发器
oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 ...
- oracle之存储过程和存储函数的使用和区别
#存储过程:封装在服务器上一段sql片段,已经编译好了的代码. 1.客户端调存储过程,执行效率就会非常高效. 语法: create [or replace] procedure 存储过程名称 (参数名 ...
- Java代码调用Oracle的存储过程,存储函数和包
Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名 月薪 职位 create or ...
随机推荐
- HDU 3488 Tour (最大权完美匹配)【KM算法】
<题目链接> 题目大意:给出n个点m条单向边边以及经过每条边的费用,让你求出走过一个哈密顿环(除起点外,每个点只能走一次)的最小费用.题目保证至少存在一个环满足条件. 解题分析: 因为要求 ...
- anaconda源配置
1. 生成配置文件 第一次运行 conda config命令时,将会在用户的home目录创建该文件..condarc配置文件,是一种可选的(optional)运行期配置文件,其默认情况下是不存在的. ...
- ECMAScript6 入门 Module
目的:将大程序拆分成互相依赖的小模块文件.CommonJS 和 AMD 两种,前者用于服务器,后者用于浏览器.他俩都是运行时才确定 :ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖 ...
- HashMap 源码阅读
前言 之前读过一些类的源码,近来发现都忘了,再读一遍整理记录一下.这次读的是 JDK 11 的代码,贴上来的源码会去掉大部分的注释, 也会加上一些自己的理解. Map 接口 这里提一下 Map 接口与 ...
- python核心语法
一.语句和语法 #:注释 \:转译回车,继续上一行,在一行语句较长的情况下可以使用其来切分成多行,因其可读性差所以不建议使用 ::将两个语句连接到一行,可读性差,不建议使用 ::将代码的头和体分开 语 ...
- 37_Reverse3_digit_Integer
描述 反转一个只有3位数的整数. 你可以假设输入一定是一个只有三位数的整数,这个整数大于等于100,小于1000. [ ] 您在真实的面试中是否遇到过这个题? 样例 123 反转之后是 321. 90 ...
- Apache Atlas
atlas英 [ˈætləs] 阿特拉斯. 美 [ˈætləs] n.地图集;〈比喻〉身负重担的人 == Apache Atlas Version: 1.1.0 Last Published: 201 ...
- Codeforces Round #517 (Div. 2)
A #include<queue> #include<cstdio> #include<cstring> #include<algorithm> #de ...
- AC自动机相关Fail树和Trie图相关基础知识
装载自55242字符串AC自动机专栏 fail树 定义 把所有fail指针逆向,这样就得到了一棵树 (因为每个节点的出度都为1,所以逆向后每个节点入度为1,所以得到的是一棵树) 还账- 有了这个东西, ...
- AVL树的理解及自写AVL树
AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下都是O(log n).增加和删除可能需要通过一次或多 ...