博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE 存储函数
阅读量:6327 次
发布时间:2019-06-22

本文共 2391 字,大约阅读时间需要 7 分钟。

前奏:必要的概念:    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;

转载于:https://www.cnblogs.com/yutingliuyl/p/7400996.html

你可能感兴趣的文章
Spring3全注解配置
查看>>
ThreadLocal真会内存泄露?
查看>>
IntelliJ IDEA
查看>>
低版本mybatis不能用PageHeper插件的时候用这个分页
查看>>
javaweb使用自定义id,快速编码与生成ID
查看>>
[leetcode] Add Two Numbers
查看>>
elasticsearch suggest 的几种使用-completion 的基本 使用
查看>>
04-【MongoDB入门教程】mongo命令行
查看>>
Hadoop HA元数据备份
查看>>
字符串与整数之间的转换
查看>>
断点传输HTTP和URL协议
查看>>
redis 数据类型详解 以及 redis适用场景场合
查看>>
mysql服务器的主从配置
查看>>
巧用AJAX技术,通过updatePanel控件实现局部刷新
查看>>
20140420技术交流活动总结
查看>>
SaltStack配置salt-api
查看>>
各种情况下block的类型
查看>>
ThinkPHP 3.2.x 集成极光推送指北
查看>>
MYSQL 表情评论存储(emoji)
查看>>
js作用域链
查看>>