用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如max(value)函数,其中,value被称为参数。函数参数有3种类型。
IN 参数类型:表示输入给函数的参数。
OUT 参数类型:表示参数在函数中被赋值,可以传给函数调用程序。
IN OUT参数类型:表示参数既可以传值也可以被赋值。
1、语法格式:
SQL语法方式创建的语法格式为:

CREATE OR REPLACE FUNCTION function_name /**//*函数名称*/
(

Parameter_name1,mode1 datatype1, /**//*参数定义部分*/
Parameter_name2,mode2 datatype2,
Parameter_name3,mode3 datatype3
…
)

RETURN return_datatype /**//*定义返回值类型*/
IS/AS
BEGIN

Function_body /**//*函数体部分*/

RETURN scalar_expression /**//*返回语句*/
END function_name;
说明:
function_name::用户定义的函数名。函数名必须符合标示符的定义规则,对其所有者来说,该名在数据库中是唯一的。
parameter:用户定义的参数。用户可以定义一个或多个参数。
mode:参数类型。
datatype:用户定义参数的数据类型。
return_type::用户返回值的数据类型。
函数返回scalar_expression表达式的值,function_body函数体由pl/sql语句构成。
2、示例
函数代码:
create or replace function T01001_count
return number
is
count_T01001 number;
begin
select count(*) into count_T01001 from T01001;
return(count_T01001);
end T01001_count; --记得一定要打分号

调用:
declare
i number;
begin
i:=T01001_count();
dbms_output.put_line(to_char(i));
end; --记得一定要打分号
注意:
(1) 如果函数没有参数,那么函数名后不应该要括号;
(2) 创建函数的时候end后面一定要记得写函数名
--没有参数的函数
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;
end get_user;
--测试
方法一
select get_user from dual;
方法二
SQL> var v_name varchar2(50)
SQL> exec :v_name:=get_user;
PL/SQL 过程已成功完成。
SQL> print v_name
V_NAME
------------------------------
TEST
方法三
SQL> exec dbms_output.put_line('当前数据库用户是:'||get_user);
当前数据库用户是:TEST
PL/SQL 过程已成功完成。
--没有参数的函数
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;
end get_user;
--测试
方法一
select get_user from dual;
方法二
SQL> var v_name varchar2(50)
SQL> exec :v_name:=get_user;
PL/SQL 过程已成功完成。
SQL> print v_name
V_NAME
------------------------------
TEST
方法三
SQL> exec dbms_output.put_line('当前数据库用户是:'||get_user);
当前数据库用户是:TEST
PL/SQL 过程已成功完成。
Sql代码
--带有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;
--带有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';
删除函数
drop function get_empname
分享到:
相关推荐
Oracle函数分为内置函数和自定义函数,内置函数如TO_DATE、TO_CHAR、SUBSTR、UPPER、LOWER等用于数据转换和字符串操作;数学函数如ABS、SQRT、MOD等用于数值计算;日期函数如SYSDATE、ADD_MONTHS、EXTRACT等用于处理...
很早就想自己写写Oracle的函数和触发器,最近一个来自课本的小案例给了我这个机会。现在把我做的东西记录下来,作为一个备忘或者入门的朋友们的参考。 案例介绍: 招投标管理系统(数据库设计)。 数据表有...
- **自定义函数**:创建可重用的代码片段,返回特定值。 - **存储过程**:一组完成特定任务的PL/SQL语句,可以无返回值或有返回值。 4. **异常处理**: - **预定义异常**:如NO_DATA_FOUND、TOO_MANY_ROWS等。 ...
本套学习材料以“Oracle从入门到精通”为主题,通过精心编排的PPT形式,旨在帮助初学者逐步掌握Oracle的核心概念和技术。下面将详细介绍其中可能涉及的重要知识点。 1. **Oracle基础**: - 数据库概念:了解数据库...
### Oracle EBS 入门与提高 —— 请求组、数据组、自定义并发程序 #### 在请求组中管理程序 **定义一个请求组** 当定义一个请求组时,可以包括以下内容: - 属于一个应用的所有报表和并发程序 - 独立的报表和...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了帮助读者通过实践来深入理解和掌握Oracle数据库的编程技术。 首先,让我们探讨Oracle PL/SQL的基础知识。PL/SQL是Oracle数据库的内置编程语言,由块构成...
分析函数的简述涵盖了基本概念和用法,是初学者入门的良好起点。随着经验的积累,开发者会逐渐发现分析函数在解决实际问题时的强大能力。 通过深入理解和实践,Oracle分析函数可以成为数据分析师和开发者的强大...
本教程“Oracle 11g 从入门到精通”旨在帮助初学者掌握Oracle 11g的核心概念和技术,逐步提升为熟练的数据库管理员(DBA)或开发者。 1. **Oracle基础知识**: - 数据库概念:了解数据库是什么,以及它们如何存储...
3. 存储过程与函数:创建自定义的业务逻辑,提高效率和代码复用。 4. 触发器:自动执行的程序,基于对数据库表的操作(如INSERT、UPDATE、DELETE)。 六、数据库安全管理 1. 用户管理:CREATE USER命令创建用户,...
3. **PL/SQL编程**:Oracle特有的PL/SQL语言结合了SQL和过程式编程,用于编写存储过程、函数、触发器等。书中代码将展示如何编写和执行PL/SQL块,理解变量、条件语句、循环结构以及异常处理。 4. **表和索引**:...
总的来说,Oracle9i入门基础涵盖了数据库安装、管理、安全、编程和性能优化等多个方面。通过深入学习这些知识点,初学者可以逐步建立起对Oracle数据库系统全面的理解,并为将来进一步的数据库管理和开发工作打下坚实...
本书“Oracle9i PLSQL 入门到精通”旨在帮助读者从基础开始,逐步掌握这一强大的工具。 1. **PLSQL基本概念** - PLSQL由三部分组成:声明部分、执行部分和异常处理部分。 - 声明部分用于定义变量、常量、游标、...
4. 函数与过程:自定义函数用于返回值,过程用于执行一系列操作,二者都可通过CREATE PROCEDURE或FUNCTION创建。 5. 游标:用于逐行处理查询结果,常用于循环操作数据。 6. 异常处理:通过EXCEPTION关键字捕获并处理...
9. **PL/SQL过程和函数**:PL/SQL是Oracle特有的编程语言,可以创建自定义的过程和函数,实现更复杂的业务逻辑。 10. **游标和循环**:在PL/SQL中,游标用于遍历查询结果,配合`FETCH`和`LOOP`语句进行迭代处理。 ...
PL/SQL是Oracle特有的过程化语言,它扩展了SQL的功能,允许编写存储过程、函数、触发器等。学习PL/SQL能够帮助你更好地管理和控制数据库,提高代码复用性,优化性能。通过学习PL/SQL,你可以创建自定义的业务逻辑,...
《Oracle 10g入门与提高》第6章主要涵盖了PL/SQL程序设计的基础和核心概念,这包括了变量声明、数据类型、表达式、程序块结构、控制结构、游标、过程与函数、触发器以及异常处理。下面将详细阐述这些知识点。 6.1 ...
全书首先介绍了PL/SQL的基本概念与基础知识,这包括了PL/SQL简介、PL/SQL基础语法、控制结构、SQL基本命令、Oracle数据库内置函数以及自定义的过程和函数、包和异常处理等。这部分内容为没有数据库编程经验的读者...
此外,用户还可以自定义函数以满足特定需求。熟悉和掌握这些函数可以极大地增强你在SQL查询中的灵活性和效率。 在Oracle 10g教程中,你将学习如何创建和管理数据库对象,如表、视图、序列、存储过程和触发器。你还...