`

oracle 自定义函数入门

 
阅读更多
用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如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
分享到:
评论
1 楼 zhengyong7232 2012-10-29  
create or replace function area(f float)
return float
is
begin
return 3.14*(f*f);
end area;

相关推荐

    Oracle学习记录之使用自定义函数和触发器实现主键动态生成

    很早就想自己写写Oracle的函数和触发器,最近一个来自课本的小案例给了我这个机会。现在把我做的东西记录下来,作为一个备忘或者入门的朋友们的参考。  案例介绍:  招投标管理系统(数据库设计)。  数据表有...

    Oracle自学(学习)材料 (共18章 偏理论一点)

    2 Oracle 服务器入门 目标 2-2 数据库管理工具 2-3 Oracle 通用安装程序 2-4 交互式安装 2-5 使用反应文件的非交互式安装 2-6 Oracle 数据库配置助手 2-8 最优灵活体系结构(OFA) 2-9 Oracle 软件和文件位置 2-10 ...

    oracle biee 11g新功能介绍PPT 中文版本

    支持过程化计算脚本,满足根据复杂的业务逻辑自定义计算规则,可单独计算立方体的任何块区 计算脚本可分顺序计算(serial calc)和并行计算(parallel calc)两种 顺序计算:按计算脚本中的顺序执行 并行计算:一个...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据...

    java从入门到精通70个PPT

    12 javascript内置对象和内置函数 13 javascript的DOM编程 14-15项目案例:当当网上书店或者做一个计算器 16 Ajax 原理 17 Ajax框架 18 在线培训:JQuery 19 Jsp与动态网站初体验 20 状态管理 21 JSTL和EL 22 JSP...

    Toad 使用快速入门

    TOAD提供语法标识、错误标识和其他很多易于使用的功能,如在弹出窗口显示表名、列名和Oracle函数。和其他的 PL/SQL 编辑工具不同,TOAD 允许在一个文件中操作多个数据库对象,可以编译一个对象、编译多个对象、编译...

    vc++ 开发实例源码包

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

    mysql入门之1小时学会MySQL基础

    MySQL入门 mySQL (关系型数据库管理系统) MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 ...

    asp.net知识库

    Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步...

    SQL注入攻击与防御(安全技术经典译丛)

     3.2.2 危险的函数  3.2.3 跟踪数据  3.2.4 复查PL/SQL和T-SQL代码  3.3 自动复查源代码第1章 什么是SQL注入  3.3.1 YASCA  3.3.2 Pixy  3.3.3 AppCodeScan  3.3.4 LAPSE  3.3.5 SWAAT  3.3.6 ...

    PLSQLDeveloper下载

    本文主要介绍PL/SQL的编程基础,以使入门者对PL/SQL语言有一个总体认识和基本把握。 编辑本段主要特性  PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQL和PL/SQL帮助、对象描述、代码助手、编译器提示、PL/...

    SQL注入攻击与防御

    3.2.2 危险的函数 79 3.2.3 跟踪数据 82 3.2.4 复查PL/SQL和T-SQL代码 88 3.3 自动复查源代码第1章 什么是SQL注入 94 3.3.1 YASCA 96 3.3.2 Pixy 96 3.3.3 AppCodeScan 97 3.3.4 LAPSE 97 3.3.5 SWAAT 97 3.3.6 ...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    经历:台湾升阳教育训练技术顾问、专业讲师,oracle授权训练中心讲师 著作:《java jdk 5.0学习笔记》、《java se 6技术手册》、《spring技术手册》等 译作:《ajax实战手册》、《jquery实战手册(第2版)》 个人...

    风越.net代码生成器 v3.5

    内置的.net代码框架,能建立C#语言的.net解决方案,可在VS2005中直接编辑,既能帮助.net初学者快速入门,更可最大限度提高.net程序员的代码编写效率。 01、支持生成的ASPX/ASP/PHP/JSP等页面在本机自动发布、调试...

    风越asp代码生成器 V3.5

    内置的.net代码框架,能建立C#语言的.net解决方案,可在VS2005中直接编辑,既能帮助.net初学者快速入门,更可最大限度提高.net程序员的代码编写效率。 01、支持生成的ASPX/ASP/PHP/JSP等页面在本机自动发布、调试...

    风越.Net代码生成器 [FireCode Creator] V1.3 精简版

    内置的.net代码框架,能建立C#语言的.net解决方案,可在VS2005中直接编辑,既能帮助.net初学者快速入门,更可最大限度提高.net程序员的代码编写效率。 01、支持生成的ASPX/ASP/PHP/JSP等页面在本机自动发布、调试...

    风越.net代码生成器v2.9

    内置的.net代码框架,能建立C#语言的.net解决方案,可在VS2005中直接编辑,既能帮助.net初学者快速入门,更可最大限度提高.net程序员的代码编写效率。 01、支持生成的ASPX/ASP/PHP/JSP等页面在本机自动发布、调试...

    风越ASP代码生成器2.8

    内置的.net代码框架,能建立C#语言的.net解决方案,可在VS2005中直接编辑,既能帮助.net初学者快速入门,更可最大限度提高.net程序员的代码编写效率。 01、支持生成的ASPX/ASP/PHP/JSP等页面在本机自动发布、调试...

    精通qt4编程(源代码)

    \11.4.1 使用processEvents()函数 293 \11.4.2 使用定时器 294 \11.5 小结 296 \第12章 数据库 297 \12.1 连接数据库 297 \12.2 常用数据库操作 301 \12.2.1 使用SQL语句 302 \12.2.2 事务操作 304 \12.2.3 使用SQL...

    精通Qt4编程(第二版)源代码

    \11.4.1 使用processEvents()函数 293 \11.4.2 使用定时器 294 \11.5 小结 296 \第12章 数据库 297 \12.1 连接数据库 297 \12.2 常用数据库操作 301 \12.2.1 使用SQL语句 302 \12.2.2 事务操作 304 \12.2.3 ...

Global site tag (gtag.js) - Google Analytics