1. 前奏:
  2. 必要的概念:
  3. ORACLE 提供能够把 PL/SQL 程序存储在数据库中。并能够在不论什么地方来运行它。这样就叫存储过
  4. 程或函数。
  5. 过程和函数统称为 PL/SQL 子程序。他们是被命名的 PL/SQL 块,均存储在数据库中,并
  6. 通过输入、输出參数或输入/输出參数与其调用者交换信息。过程和函数的唯一差别是函数总向调
  7. 用者返回数据。而过程则不返回数据。
  8.  
  9. 1:创建函数
  10. CREATE [OR REPLACE] FUNCTION function_name
  11. [ (argment [ { IN | IN OUT }] Type,
  12. argment [ { IN | OUT | IN OUT } ] Type ]
  13. [ AUTHID DEFINER | CURRENT_USER ]
  14. RETURN return_type
  15. { IS | AS }
  16. <类型.变量的说明>
  17. BEGIN
  18. FUNCTION_body
  19. EXCEPTION
  20. 其他语句
  21. END;
  22.  
  23. 2:说明:
  24. 1) OR REPLACE 为可选. 有了它, 能够或者创建一个新函数或者替换同样名字的函数, 而不会出现冲突
  25. 2) 函数名后面是一个可选的參数列表, 当中包括 IN, OUT IN OUT 标记. 參数之间用逗号隔开. IN 參数标记表示传递给函数的值在该函数运行中不改变OUT 标记表示一个值在函数中进行计算并通过该參数传递给调用语句; IN OUT 标记表示传递给函数的值能够变化并传递给调用语句. 若省略标记, 则參数隐含为 IN
  26. 3) 由于函数须要返回一个值, 所以 RETURN 包括返回结果的数据类型.
  27.  
  28. 3:例题:
  29. --存储函数结构
  30. create function func_name(dept_id number , salary number)
  31. return number
  32. is
  33. --函数使用过程中 须要声明的变量 记录类型 cursor
  34. begin
  35. --函数的运行体
  36. exception
  37. --处理函数运行过程中异常
  38. end;
  39.  
  40. --例题1 写一个返回hellow worldfunction
  41. create or replace function hello_func(temp varchar2)
  42. return varchar2
  43. is
  44. begin
  45. return 'hello world'|| temp;
  46. end;
  47.  
  48. --调用函数:
  49. begin
  50. dbms_output.put_line(hello_func);
  51. end;
  52. select hello_func('cui') from dual;
  53.  
  54. --例二 写一个返回系统时间的函数 假设函数没有形參 切勿加()
  55. create function get_sysdate
  56. return date
  57. is
  58. v_date date;
  59. begin
  60. v_date := sysdate;
  61. return v_date;
  62. end;
  63.  
  64. select get_sysdate() from dual;
  65.  
  66. --创建两个參数相加的 存储函数
  67. create function add_func(temp_A number , temp_B number)
  68. return number
  69. is
  70. temp_sum number(10);
  71. begin
  72. temp_sum := temp_A + temp_B;
  73. return temp_sum;
  74. end;
  75.  
  76. select add_func(1,1) from dual;
  77.  
  78. --定义一个函数:获取给定部门的工资总和。要求:部门号定义为參数,工资总额定义为返回值;
  79. create function get_sal(dept_id number)
  80. return number
  81. is
  82. v_sumsal number(10):=0;
  83. cursor salary_cursor is select salary from employees where department_id = dept_id;
  84. begin
  85. for c in salary_cursor loop
  86. v_sumsal := v_sumsal + c.salary;
  87. end loop;
  88. return v_sumsal;
  89. end;
  90.  
  91. select get_sal(60) from dual;
  92.  
  93. --定义一个函数 获取指定部门的工资总和 该部门的员工总数(定义为out类型的參数)
  94. --要求部门号定义为參数,工资总额定义为返回值
  95. create function get_sall(dept_id number , total_count out number)
  96. return number
  97. is
  98. v_sumsal number(10):=0;
  99. cursor salary_cursor is select salary from employees where department_id = dept_id;
  100. begin
  101. total_count := 0;
  102. for c in salary_cursor loop
  103. v_sumsal := v_sumsal + c.salary;
  104. total_count := total_count + 1;
  105. end loop;
  106. return v_sumsal;
  107. end;
  108.  
  109. 4:函数的调用
  110.  
  111. declare
  112. v_num number(5):=0;
  113. begin
  114. dbms_output.put_line(get_sall(60,v_num));
  115. dbms_output.put_line(v_num);
  116. end;

ORACLE 存储函数的更多相关文章

  1. Oracle存储函数,存储过程

    一.Oracle存储函数:存储的PL/SQL语法块,完成特定的功能.1.语法: 函数关键字: function (1)创建函数 CREATE [OR REPLACE] FUNCTION <fun ...

  2. Oracle存储函数jdbc调用

    package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...

  3. oracle存储函数实例

    CREATE OR REPLACE PROCEDURE "PROC_INS_DAY_DOCTOR_LL"(v_date in VARCHAR) is --PROC_INS_DAY_ ...

  4. oracle 存储函数,更新库存

    create procedure PRO_update_Goods_group_stock is v_min_stock , ); v_gg_stock , ); v_goods_no number; ...

  5. Oracle的基本语法,存储函数及触发器

    1.PL/SQL    PL/SQL是Oracle对 ql语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句,使SQL语言具有过程处理能力.把 SQL 语言的数据操纵能  力与过程语言的数据 ...

  6. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

  7. oracle存储过程和存储函数&触发器

    oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 ...

  8. oracle之存储过程和存储函数的使用和区别

    #存储过程:封装在服务器上一段sql片段,已经编译好了的代码. 1.客户端调存储过程,执行效率就会非常高效. 语法: create [or replace] procedure 存储过程名称 (参数名 ...

  9. Java代码调用Oracle的存储过程,存储函数和包

    Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名  月薪 职位 create or ...

随机推荐

  1. Get与Post方法的区别

    Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELE ...

  2. 大家的备忘录——xpage_在同一页面展开文档显示该文档详细信息(可显示处理过的Rich Text)

    Xpage大纲: 解析: 1.通过[link2]点击触发jQuery事件来展开[面板:thispanel] 2.[面板:thispanel]写了onClientLoad事件:让thispanel隐藏. ...

  3. POJ 1195 Mobile phones【二维树状数组】

    <题目链接> 题目大意: 一个由数字构成的大矩阵,开始是全0,能进行两种操作1) 对矩阵里的某个数加上一个整数(可正可负)2) 查询某个子矩阵里所有数字的和要求对每次查询,输出结果 解题分 ...

  4. sudo passwd root输入普通用户密码后显示用户不再sudoers文件中

    在写上一篇VirtualBox创建共享文件夹的时候,在运行下图授权时,root密码一直输入错误 然后我就在终端输入 su root,却发现需要密码,但我却不知道密码是什么 于是我就在终端输入如下命令, ...

  5. SpringBoot的第一个web项目

    这一节主要是讲springboot搭建简单的web项目. 首先pom文件新增spring-boot-starter-web依赖,pom文件如下所示 <?xml version="1.0 ...

  6. 如何调用wasm文件?

    如果用C/C++导出wasm模块,方法名会默认带_前缀:如果是asm.js转成了wasm模块,方法名就不带_前缀. 一.c到js 二.wasm和js 三.小尝试 这里主要汇集了自己初学webAssem ...

  7. jmeter时间格式化

    jmeter时间格式化 #17位时间取到毫秒 ${__time(yyyyMMdd-HHmmssSSS,)} #10位时间戳 ${__time(/1000,)} yyyyMMddHHmmss yyyy年 ...

  8. Redis自学笔记:4.2进阶-过期时间

    4.2过期时间 **4.2.1命令介绍* 在redis中使用 expire 命令设置一个键的过期时间后redis会自动删除它. expire key seconds (seconds单位是秒,必须是整 ...

  9. Android多线程的使用

    The speed and efficiency of a long-running, data-intensive operation often improves when you split i ...

  10. maven命令注册jar包到maven仓库

    首先需要具备maven环境 在cmd命令行执行以下命令注册jar包 mvn install:install-file -Dfile=E:\aliyun-java-sdk-dysmsapi-1.0.0. ...