目录
1、建立函数,不带任何参数
2、建立函数:带有IN参数
4、建立IN OUT参数
首页 数据库 mysql教程 开发Oracle 函数

开发Oracle 函数

Jun 07, 2016 pm 03:21 PM
oracle 函数 开发 数据 返回

函数用于返回特定的数据。如果在应用程序中,经常需要执行SQL语句来返回特定数据,那么可以基于这些操作建立特定的函数。建立函数的语法如下: CREATE [OR REPLACE] FUNCTION function_name (argument1 [model] datatype1, argument2 [model] datatype2, ...

     函数用于返回特定的数据。如果在应用程序中,经常需要执行SQL语句来返回特定数据,那么可以基于这些操作建立特定的函数。建立函数的语法如下:

CREATE [OR REPLACE]  FUNCTION function_name
      (argument1 [model] datatype1,
        argument2 [model] datatype2,
        ....)
   RETURN datatype
 IS|AS
     PL/SQL  Block;     
登录后复制

如上所示,function_name用于指定函数的名称;argument1、argument2等则用于指定函数的参数,注意当指定参数的数据类型时,不能指定其长度;RETURN子句用于指定函数返回值的数据类型;IS|AS用于开始一个PLS/QL块。注意,当建立函数时,在函数头部必须要带有RETURN子句,在函数体内必须要包含一条RETURN语句。另外,当建立函数时,既可以指定输入参数(IN),也可以指定输出参数(OUT),以及输入输出参数(IN OUT)。下面通过实例说明建立函数,以及使用各种参数模式的方法。

1、建立函数,不带任何参数

   当建立函数时,既可以带有参数,也可以不带参数。下面以建立用于显示当前数据库用户名的函数为例,说面建立该种函数的方法。示例如下:   

CREATE OR REPLACE FUNCTION get_user
  RETURN VARCHAR2
IS
   v_user VARCHAR2(100);
BEGIN
	  SELECT username INTO v_user FROM user_users;
	  RETURN v_user;
END;	 
登录后复制

建立了函数get_user之后,就可以在应用程序中调用该函数了。因为函数有返回值,所以它只能作为表达式的一部分来调用。调用示例如下:

示例一:使用变量接收函数返回值

SQL> var v1 varchar2(100);
SQL> exec :v1:=get_user;
 
PL/SQL procedure successfully completed
v1
---------
SCOTT
 
SQL> print v1;
v1
---------
SCOTT
登录后复制

示例二:在SQL语句中直接调用函数

SQL> select get_user from dual;
 
GET_USER
--------------------------------------------------------------------------------
SCOTT
登录后复制

示例三:使用包DBMS_OUTPUT调用函数

SQL> set serveroutput on;
SQL> exec dbms_output.put_line('当前数据库用户:'||get_user);
 
当前数据库用户:SCOTT
 
PL/SQL procedure successfully completed
登录后复制

 

2、建立函数:带有IN参数

   当建立函数时,通过使用输入参数,可以将应用程序的数据传递到函数中,最终通过执行函数可以将结果返回到应用程序中。下面以建立返回雇员工资的函数为例,说明建立带有输入参数函数的方法。示例如下:

CREATE OR REPLACE FUNCTION  get_sal(name IN VARCHAR2)
RETURN NUMBER
AS
  v_sal emp.sal%TYPE;
BEGIN
    SELECT sal INTO v_sal  FROM emp
      WHERE upper(ename)=upper(name);
      RETURN v_sal;
  EXCEPTION
      WHEN NO_DATA_FOUND THEN
      raise_application_error(-20000,'该雇员不存在');       
END; 
登录后复制

 在建立了get_sal之后,就可以在应用程序中调用该函数了。调用该函数的示例如下:

示例一:输入存在的雇员

<strong>SQL> var sal NUMBER;
SQL> exec :sal:=get_sal('scott');
 
PL/SQL procedure successfully completed
sal
---------
1200
 
SQL> print sal;
sal
---------
1200</strong>
登录后复制

示例二:输入不存在的雇员

SQL> exec :sal:=get_sal('mary');
 
begin :sal:=get_sal('mary'); end;
 
ORA-20000: 该雇员不存在
ORA-06512: 在 "SCOTT.GET_SAL", line 11
ORA-06512: 在 line 2
登录后复制


3、建立函数:带有OUT参数

一般情况下,函数只需要返回单个数据。如果希望使用函数同同时返回多个数据,例如同时返回雇员名和工资那么就需要使用输出参数了。为了在函数中使用输出参数,必须要指定OUT参数模式。下面以建立用于返回雇员所在部门名和岗位的函数为例,说明建立带有OUT参数函数的方法。示例如下:

 CREATE OR REPLACE FUNCTION get_info
  (name VARCHAR2,title OUT VARCHAR2)
  RETURN VARCHAR2
AS
  deptname dept.dname%TYPE;
BEGIN 
   SELECT a.job,b.dname INTO title,deptname
     FROM emp a,dept b
     WHERE a.deptno=b.deptno
     AND upper(a.ename)=upper(name);     
    RETURN  deptname;
EXCEPTION
     WHEN NO_DATA_FOUND  THEN
      raise_application_error(-20000,'该雇员不存在');   
END;         
        
登录后复制

当建立了函数get_info 后,就可以在应用程序中调用该函数了。注意,因为该函数,带有OUT参数,所以不能在SQL语句中,调用该函数,而必须要定义变量接收OUT参数和函数的返回值。在SQL*PLUS中调用函数get_info的示例如下:

SQL> var job varchar2(20)
SQL> var dname varchar2(20)
SQL> exec :dname:=get_info('scott',:job);
PL/SQL procedure successfully completed
dname
---------
ANALYST
job
---------
ANALYST   
登录后复制

如上所示:除了输出函数自定义返回的值,也返回了OUT参数的返回值。
 

4、建立IN OUT参数

   建立函数时,不仅可以指定IN和OUT参数,也可以指定IN OUT参数。IN OUT 参数,也被成为输入输出参数。使用这种参数时,在调用函数之前需要通过变量给该种参数传递数据,在调用结束之后Oracle会将函数的部分结果通过该变量传递给应用程序。下面以计算两个数值相除的结果的函数Result为例,说明在函数中使用IN OUT参数的方法。示例如下:

CREATE OR REPLACE FUNCTION result_num
(num1 NUMBER,num2 IN OUT NUMBER)
RETURN NUMBER
IS
  v_result NUMBER(6);
  v_remainder NUMBER;
BEGIN 
    v_result:=num1/num2;
    v_remainder:=MOD(num1,num2);  
    num2:=v_remainder;
    RETURN v_result;
 EXCEPTION 
      WHEN 
         ZERO_DIVIDE  THEN
          raise_application_error(-20000,'不能除0');
 END;            
登录后复制

 注意,因为该函数带有IN OUT 参数,所以不能再SQL语句中调用该函数,而必须使用变量为IN OUT参数传递数值并接收数据。另外,还需要定义变量接收函数返回值。调用该函数的示例如下:

SQL> var result2 number;
SQL> var result1 number;
SQL> var result2 number;
SQL> exec :result2:=30;
 
PL/SQL procedure successfully completed
result2
---------
30
 
SQL> exec :result1:=result_num(100,:result2);
 
PL/SQL procedure successfully completed
result1
---------
3
result2
---------
10
登录后复制


 

 

 

 

 

 

 

 


 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
oracle打不开怎么办 oracle打不开怎么办 Apr 11, 2025 pm 10:06 PM

Oracle 打不开的解决办法包括:1. 启动数据库服务;2. 启动监听器;3. 检查端口冲突;4. 正确设置环境变量;5. 确保防火墙或防病毒软件未阻止连接;6. 检查服务器是否已关闭;7. 使用 RMAN 恢复损坏的文件;8. 检查 TNS 服务名称是否正确;9. 检查网络连接;10. 重新安装 Oracle 软件。

oracle游标关闭怎么解决 oracle游标关闭怎么解决 Apr 11, 2025 pm 10:18 PM

解决 Oracle 游标关闭问题的方法包括:使用 CLOSE 语句显式关闭游标。在 FOR UPDATE 子句中声明游标,使其在作用域结束后自动关闭。在 USING 子句中声明游标,使其在关联的 PL/SQL 变量关闭时自动关闭。使用异常处理确保在任何异常情况下关闭游标。使用连接池自动关闭游标。禁用自动提交,延迟游标关闭。

oracle怎么循环创建游标 oracle怎么循环创建游标 Apr 12, 2025 am 06:18 AM

Oracle 中,FOR LOOP 循环可动态创建游标, 步骤为:1. 定义游标类型;2. 创建循环;3. 动态创建游标;4. 执行游标;5. 关闭游标。示例:可循环创建游标,显示前 10 名员工姓名和工资。

oracle视图怎么导出 oracle视图怎么导出 Apr 12, 2025 am 06:15 AM

可以通过 EXP 实用程序导出 Oracle 视图:登录 Oracle 数据库。启动 EXP 实用程序,指定视图名称和导出目录。输入导出参数,包括目标模式、文件格式和表空间。开始导出。使用 impdp 实用程序验证导出。

oracle日志写满怎么办 oracle日志写满怎么办 Apr 12, 2025 am 06:09 AM

Oracle 日志文件写满时,可采用以下解决方案:1)清理旧日志文件;2)增加日志文件大小;3)增加日志文件组;4)设置自动日志管理;5)重新初始化数据库。在实施任何解决方案前,建议备份数据库以防数据丢失。

甲骨文在商业世界中的作用 甲骨文在商业世界中的作用 Apr 23, 2025 am 12:01 AM

Oracle不仅是数据库公司,还是云计算和ERP系统的领导者。1.Oracle提供从数据库到云服务和ERP系统的全面解决方案。2.OracleCloud挑战AWS和Azure,提供IaaS、PaaS和SaaS服务。3.Oracle的ERP系统如E-BusinessSuite和FusionApplications帮助企业优化运营。

HDFS配置CentOS需要哪些步骤 HDFS配置CentOS需要哪些步骤 Apr 14, 2025 pm 06:42 PM

在CentOS系统上搭建Hadoop分布式文件系统(HDFS)需要多个步骤,本文提供一个简要的配置指南。一、前期准备安装JDK:在所有节点上安装JavaDevelopmentKit(JDK),版本需与Hadoop兼容。可从Oracle官网下载安装包。环境变量配置:编辑/etc/profile文件,设置Java和Hadoop的环境变量,使系统能够找到JDK和Hadoop的安装路径。二、安全配置:SSH免密登录生成SSH密钥:在每个节点上使用ssh-keygen命令

oracle数据库怎么停止 oracle数据库怎么停止 Apr 12, 2025 am 06:12 AM

要停止 Oracle 数据库,请执行以下步骤:1. 连接到数据库;2. 优雅关机数据库(shutdown immediate);3. 完全关机数据库(shutdown abort)。

See all articles