函数用于返回特定数据。执行时得找一个变量接收函数的返回值; 语法如下: 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数据库 如需修改,在java源码/database.propertie中修改即可!Oracle数据库课程设计医院系统数据库源代码。包含Java代码和SQL语句。源码中默认使用的数据库为运行的Oracle...
ORACLE数据库ORACLE数据库ORACLE数据库ORACLE数据库ORACLE数据库ORACLE数据库ORACLE数据库ORACLE数据库
《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle...
3. 掌握oracle数据库体系机构,为oracle优化奠定基础。 三、适合人群: 1.有意从事oracle 数据库工作,担任dba角色的人员; 2. Oracle数据库设计、开发和备份等管理人员; 四、课程内容: 第一讲:Oracle体系结构 ...
java oracle 数据库 连接池 小例子 里面很详尽的使用C3p0,配置文件, 可以成功运行, 只需要修改一下配置文件里面的驱动就好了
本问由藏经阁http://www.zangjing.net提供. Oracle数据库性能分析,掌握Oracle数据库处理SQL语句原理和Oracle数据库性能分析基本方法。
oracle 数据库oracle 数据库oracle 数据库oracle 数据库oracle 数据库oracle 数据库oracle 数据库
如何备份还原oracle数据库
Oracle数据库体系结构( 中文详细版)
SQL SERVER连接oracle数据库几种方法 查询oracle数据库中的表 在master数据库中查看已经存在的链接服务器 要在企业管理器内指定登录帐号
Oracle数据库备份脚本 用于备份数据库里的所有数据
Oracle数据库安装基础教程
kepserver的数据写入oracle数据库中
Oracle数据库教程——nbu恢复oracle数据库案例
用于连接VisualStudio2008和Oracle数据库的代码脚本 OracleConnection类; 实现从数据库读出。
Oracle数据库开发和设计规范
搜集整理的Oracle数据库安装与配置方法以及C#连接操作Oracle数据库的典型代码,比较管用的说。主要包括10个方面内容:1、ORACLE817安装(服务器端/客户端)。2、ORACLE817配置(服务器端)。3、ORACLE817配置...
数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 ...
Oracle数据库课程设计Oracle数据库课程设计Oracle数据库课程设计Oracle数据库课程设计Oracle数据库课程设计Oracle数据库课程设计Oracle数据库课程设计Oracle数据库课程设计Oracle数据库课程设计