函数用于返回特定数据。执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] datatype1, argu2 [mode2] datatype2, ........ ) return datatype is begin
end; 执行 var v1 varchar2(100) exec :v1:=function_name =============================================================================== 不带任何参数 =============================================================================== create or replace function get_user return varchar2 is Result varchar2(50); begin select username into Result from user_users; return(Result); end get_user; 执行: =============================================================================== 带in 参数的 =============================================================================== create or replace function get_sal(empname in varchar2) return number is Result number; begin select sal into Result from emp where ename=empname; return(Result); end get_sal; 执行: SQL> var sal number SQL> exec :sal:=get_sal('scott');
=============================================================================== 带out 参数的函数 =============================================================================== create or replace function get_info(e_name varchar2,job out varchar2) return number is Result number; begin select sal,job into Result,job from emp where ename=e_name; return(Result); end get_info;
执行: SQL> var job varchar2(20) SQL> var dname varchar2(20) SQL> exec :dname:=get_info('SCOTT',:job) =============================================================================== 带in out 参数的函数 =============================================================================== create or replace function result(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 result; 执行: var result1 number; var result2 number; exec :result2:=30 exec :result1:=result(100,:result2)
eg:
1 、一个最简单的自定义函数Fun_test1 的定义。 create or replace function Fun_test1(p_1 number)--Fun_test1 是函数名,有一个输入参数p_1 ,是number 型的。返回值也是number 型的 return number IS begin if p_1>0 then return 1; elsif p_1=0 then return 0; else return -1; end if; end; -- 这个函数只是可以知道自定义函数的定义和格式。其实没什么用途。
2 、Fun_test1 自定义函数的调用的存储过程Pro_Fun_test1_1 示例: create or replace procedure Pro_Fun_test1_1( p1_in in number, p2_out out number ) AS begin p2_out:=Fun_test1(p1_in); end Pro_Fun_test1_1; -- 一个输入参数,一个输出参数
3 、Fun_test1 自定义函数的调用的存储过程Pro_Fun_test1_2 示例: create or replace procedure Pro_Fun_test1_2( p1_in in number, p2_out out number ) AS t_1 number; begin
select Fun_test1(p1_in)+100 INTO p2_out from bill_org where org_ID=1; end Pro_Fun_test1_2; -- 自定义函数的调用方法和Oracle 的其它内部函数是一样的。
二、包的定义和使用入门 包一般是过程和函数的集合, 对过程和函数进行更好的封装, 一般不针对字段。 包的构成包括包头和包体。 1 、包头的定义: 包头仅仅只是对包中的方法进行说明, 而没有实现 语法: create or replace package myPackage_1 is procedure syaHello(vname varchar2);-- 申明了该包中的一个过程 end;
2 、包体的定义: 包体是对包头中定义的过程、函数的具体实现。 create or replace package body myPackage_1 is procedure syaHello(vname varchar2)-- 对包中定义的过程的实现 is begin dbms_output.put_line('Hello '||vname); end; end; 要注意的是: create or replace package 后面的名称必须和create or replace package body 后面的名称一致, 如果将create or replace package body 后面的名称改为,'MYPACKAGE' 否则将会出现诸如下面的错误: 必须说明标识符 'MYPACKAGE'
3 、调用包用的自定义方法: create or replace procedure Pro_test_package( p1_in string ) AS begin myPackage_1.syaHello(p1_in); end Pro_test_package;
eg2:
-- 没有参数的函数 create or replace function get_user return varchar2 is v_user varchar2(50); begin select username into v_user from user_users; return v_user; return v_user;
-- 测试 方法一 select get_user from dual;
方法二 SQL> var v_name varchar2(50) SQL> exec :v_name:=get_user;
-- 带有IN 参数的函数 create or replace function get_empname(v_id in number) return varchar2 as v_name varchar2(50); begin select name into v_name from employee where id = v_id; return v_name; exception when no_data_found then raise_application_error(-20001, ' 你输入的ID 无效!'); end get_empname;
附:
函数调用限制 1 、SQL 语句中只能调用存储函数( 服务器端), 而不能调用客户端的函数 2 、SQL 只能调用带有输入参数, 不能带有输出, 输入输出函数 3 、SQL 不能使用PL/SQL 的特有数据类型(boolean,table,record 等) 4 、SQL 语句中调用的函数不能包含INSERT,UPDATE 和DELETE 语句
查看函数院源代码 oracle 会将函数名及其源代码信息存放到数据字典中user_source select text from user_source where name='GET_EMPNAME';
|
相关推荐
### Oracle Functions:介绍与示例 Oracle 数据库提供了丰富的内置函数,这些函数可以帮助开发者和数据库管理员执行各种数据处理任务,从而提高工作效率并简化查询过程。本文将详细介绍几个常用的 Oracle 函数,并...
在Oracle数据库系统中,过程(Procedures)和函数(Functions)是PL/SQL编程的重要组成部分,它们用于实现复杂的业务逻辑和数据操作。本压缩包包含了多个Oracle过程的例子,旨在帮助理解如何创建、调用和使用这些...
Oracle PL/SQL 语法详细手册是一份全面介绍Oracle数据库中SQL和PL/SQL语言的参考资料。这份手册旨在帮助用户理解和掌握在Oracle环境中进行数据管理和编程的基础知识。 在SQL语法部分,手册涵盖了创建数据库对象的...
2. 示例VI:展示了LabSQL ADO Functions的各种实际应用,通过这些例子,开发者可以快速了解如何在LabVIEW中执行数据库操作。 3. API参考:列出了所有可用的LabSQL函数及其参数,帮助开发者查找和理解特定功能。 4. ...
在Oracle数据库系统中,PL/SQL(Procedural Language/Structured Query Language)是一种...通过阅读和实践"PL.txt"中的例子,初学者可以逐步理解PL/SQL的基本概念和语法,为更深入的Oracle数据库开发打下坚实基础。
9. 其他特定数据库系统的扩展函数:不同的数据库系统,如MySQL、SQL Server、Oracle等,都有自己的特色函数,本书可能也涉及这些系统的特定函数。 通过阅读这本书,读者可以深入了解如何有效地利用SQL函数提高查询...
在Oracle数据库中,`OVER (PARTITION BY ...)` 是一种非常强大的功能,它允许用户在数据集上进行窗口操作。这在数据分析、报表制作以及复杂查询中极为常见。 #### 二、开窗函数简介 开窗函数(Window Functions)...
这里提供一个简单的示例,展示如何使用Java调用Oracle数据库中的一个PL/SQL存储过程: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.CallableStatement; public class ...
Oracle报表经典语句主要涉及了SQL查询技巧,特别是在数据分析和报表生成方面。以下是对这些语句的详细解析: ...理解并熟练运用这些技巧,对于软件开发者在处理Oracle数据库的报表开发和数据分析任务时将非常有帮助。
在Oracle数据库中,Model子句是一种强大的SQL工具,用于处理复杂的建模和计算任务,尤其在数据建模、预测分析以及复杂的数据转换方面表现出色。本章“《Pro Oracle SQL》CHAPTER 9 The Model Clause”重点讲解了...
- **函数**:书中介绍了函数的定义、参数传递、返回值等,并通过具体例子展示了如何在应用程序中调用函数。 - **包**:通过包的概念学习,使读者了解如何组织存储过程和函数,以便于管理和重用。 **7. 事务处理与...
例如,在给定的例子中,正确的顺序是1,4,3,2(Mount数据库、恢复数据文件、恢复数据、打开数据库)。 ### 3. Managing Database Performance & Tuning #### 3.1 性能管理与调优 - **性能监控**:了解数据库性能...
【描述】"FOLDERTEST文件夹功能实现的小例子"是针对开发者的一个实践教程,旨在帮助他们理解和应用Oracle Forms中的文件夹逻辑。在Oracle Forms中,文件夹功能通常用于模拟操作系统中的文件系统,允许用户以目录树的...
在Oracle数据库环境中,创建自定义函数是扩展数据库功能和优化数据处理的重要手段。PL/SQL(Procedural Language/Structured Query Language)是Oracle提供的一种过程化编程语言,它结合了SQL的强大查询能力与过程...
- **Oracle数据库中**: - 存储过程 - 函数 - 包 - 触发器 - **Oracle工具中**: - SQL*Plus - Oracle GoldenGate - Oracle Application Express (APEX) #### 三、PL/SQL的优势 - **SQL的支持**: PL/SQL直接...
实验二的PL/SQL编程实验主要涵盖了数据库编程的基础知识,特别是Oracle数据库的PL/SQL语言。以下是相关的知识点和详细说明: 1. **PL/SQL基础知识**:PL/SQL是Oracle数据库支持的一种过程化编程语言,它结合了SQL...
下面是一个简单的例子: ```php try { $error = 'Always throw this error'; throw new Exception($error); // 以下代码不会被执行 echo 'Never executed'; } catch (Exception $e) { echo 'Caught exception:...
在Oracle数据库中,`ROWNUM`是一个非常重要的概念,它是一个虚拟列,每次查询时根据行的输出顺序自增1,常用于限制查询结果的数量,比如实现分页或生成序列值。然而,PostgreSQL并不直接支持`ROWNUM`这样的机制。当...