精华内容
下载资源
问答
  • 场景:Oracle——十用户自定义函数Oracle——10用户自定义函数用户自定义函数是存储在数据库中的代码块,可以把值返回到调用程序。函数的参数有3种类型:(1)in参数类型:表示输入给函数的参数,该参数只能用于传值,...

    场景:Oracle——十用户自定义函数

    Oracle——10用户自定义函数

    用户自定义函数是存储在数据库中的代码块,可以把值返回到调用程序。函数的参数有3种类型:

    (1)in参数类型:表示输入给函数的参数,该参数只能用于传值,不能被赋值。

    (2)out参数类型:表示参数在函数中被赋值,可以传给函数调用程序,该参数只能用于赋值,不能用于传值。

    (3)in out参数类型:表示参数既可以传值,也可以被赋值。

    1.函数的创建

    语法格式:

    create [or replace] function functionName

    (

    parameterName1, mode1 dataType1,

    parameterName2, mode2 dataType2,

    ...

    )

    return returnDataType

    is/as

    begin

    function_body

    return expression

    end functionName; -- 结束函数的声明,也可以直接写end不加函数名。

    --其中mode1、mode2表示参数类型,dataType表示参数的数据类型。returnDataType表示返回值类型。

    示例1:

    create or replace function explainParameter -- 定义一个名为explainParameter的函数

    (

    inParam in char,--定义该参数类型为in参数类型,只能用于赋值

    outParam out char,--out参数类型,只能用于传值

    inAndOutParam in out char--in out参数类型,既能赋值,又能传值

    )

    return char--表示函数的返回类型为char类型

    as-- 表示函数体部分

    returnChar char;--声明零时变量,这是可有可无的,这里声明返回变量为char类型的returnChar变量。

    begin

    inParam := 'Hello World';-- 这是错误的,in类型的参数只能用来传值,不能赋值

    outParam := 'Hello World'; -- 这是正确的,out类型的参数可以用来被赋值

    inAndOutParam := 'Hello World'; -- 这是正确的,in out参数既可以用来传值,又可以被赋值

    inAndOutParam := outParam; -- 这是错误的,out参数不能用来传值

    return(returnChar);-- 返回returnChar,也可以不要括号,直接写return returnChar。

    end explainParameter; -- 结束explainParameter函数,表示explainParameter函数声明结束,也可以直接写end,不加函数名。

    示例2:

    CREATE OR REPLACE

    FUNCTION testFunc (num1 IN NUMBER, num2 IN NUMBER)

    RETURN NUMBER

    AS

    num3 number;

    num4 number;

    num5 number;

    BEGIN

    num3 := num1 + num2;

    num4 := num1 * num2;

    num5 := num3 * num4;

    RETURN num5;

    END;

    2.函数的调用

    自定义函数的调用方法跟系统内置函数的调用方法相同,可以直接在select语句中调用,也可以在函数中调用,如下:

    select testFunc(1,2) from tableName;

    num := testFunc(1,2);

    3.函数的删除

    自定义函数的删除方法类似于表的删除,语法格式如下:

    drop function [schema.]functionName;

    1 楼

    yanglover

    2012-06-14

    icon_cool.gif 

    icon_biggrin.gif 

    icon_smile.gif 

    icon_sad.gif 

    icon_surprised.gif 

    icon_eek.gif 

    icon_confused.gif 

    icon_cool.gif 

    icon_lol.gif 

    icon_mad.gif 

    icon_razz.gif 

    icon_redface.gif 

    icon_cry.gif 

    icon_evil.gif 

    icon_twisted.gif 

    icon_rolleyes.gif 

    icon_wink.gif 

    icon_exclaim.gif 

    icon_question.gif 

    icon_idea.gif 

    icon_arrow.gif

    展开全文
  • 1 oracle自定义函数 函数与存储过程相似,也是数据库中存储的已命名PL-SQL程序块。函数的主要特征是它必须有一个返回值。通过return来指定函数的返回类型。在函数的任何地方可以通过return expression语句从函数返回...

    oracle 自定义函数及java调用

    1 oracle自定义函数

    函数与存储过程相似,也是数据库中存储的已命名PL-SQL程序块。函数的主要特征是它必须有一个返回值。通过return来指定函数的返回类型。在函数的任何地方可以通过return expression语句从函数返回,返回类型必须和声明的返回类型一致。语法如下:

    CREATE OR REPLACE FUNCTION function_name
    (argment1 mode1  type1,
     argment2 mode2  type2)
    RETURN return_type  
    { IS | AS }
    <类型.变量的说明> 
    BEGIN
    FUNCTION_body 
    EXCEPTION
    异常处理语句
    END;
    
    • mode可以为[IN, OUT, IN OUT]

      • IN:输入参数,向存储过程传递值,默认类型,可以不写。
      • OUT:输出参数,用于返回结果。
      • IN OUT:作为IN参数向存储过程传递值,同时作为OUT参数返回值。
    • type 表示接受的数据类型。

    • return_type 表示返回的数据类型,RETURN只能返回单个值,不能返回多个值。

    • REPLACE:指明若已有同名的存储过程存在,那么将被替换成当前创建的版本。

    • 可以使用DEFAULT关键字为输入参数指定默认值。

    • as/is二选一,在这里没有区别。

    • 可以没有异常(exception)处理代码段。

    无参样例:

    CREATE OR REPLACE 
    function get_user return varchar2 is
      v_user varchar2(50);
    begin
      select name into v_user from SYS_USER;
      return v_user;
    end get_user;
    
    -- 测试
    select get_user from dual;
    

    有参样例:

    --带有IN参数的函数
    CREATE OR REPLACE 
    function get_empname(v_id in varchar2) return varchar2 as
      v_name varchar2(50);
    begin
      select name into v_name from SYS_USER where id = v_id;
       return v_name;
    exception
      when no_data_found then
        raise_application_error(-20001, '你输入的ID无效!');
    end get_empname;
    

    注意:

    1、函数参数和返回类型只声明参数,不指定大小。

    2、可执行部分至少有一条return语句。

    3、调用函数时,不能将函数作为单独的语句存在,可以作为表达式的一部分。

    适用场合:

    1、如果需要返回多个值和不返回值,就使用存储过程;如果只需要返回一个值,就使用函数。

    2、存储过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值。

    3、可以再SQL内部调用函数来完成复杂的计算问题,但不能调用存储过程。

    2 java程序调用

    serverce层:

    public String getUser(String id){
    		Map<String, String> map = new HashMap<String, Object>();
    		map.put("v_id", id);	// 输入参数
    		dao.getUser(map);	// 返回结果将存放在map里面
    		return result.get("Return");	// 获取结果
    	}
    

    xml:

    	<select id="getUser" parameterType="java.util.Map" statementType="CALLABLE" resultType="java.util.Map">
    		 {#{Return,mode=OUT,jdbcType=VARCHAR} = call get_empname(#{v_id,mode=IN,jdbcType=VARCHAR})}
    	</select>
    <!-- statementType="CALLABLE" 调用自定义函数-->
    
    展开全文
  • Oracle自定义函数及应用举例(不同输入输出参数情况)
    Oracle自定义函数
    函数的定义:
    create/replace function 函数名 (参数名 输入输出类型 字段类型) return 字段类型 is
    变量名 字段类型; --函数的内部变量,需要包含字段类型的长度
    begin
    主体;
    return(变量名);
    end 函数名;
    观察到:
    定义函数的参数和输出类型的时候不需要考虑字段类型的长度;
    函数的内部变量需包含字段类型的长度;
    函数可以没有输入输出参数,但一定要有返回(return)的数据类型,因此必须有内部变量存储return的数据;
    函数的输入输出参数可以在主体中直接使用。
    函数的执行:
    --sqlplus
    var 变量名 字段类型(包含长度);
    exec :变量名:=函数名(参数的值,接收输出变量的变量名)
    --developer
    select 函数名(参数) from dual;


    以下为例子:
    --没有输入输出参数的函数
    create function fun_emp01 return nvarchar2 is
    myresult nvarchar2(50);
    begin
    select max(first_name) into myresult from employees;
    return(myresult);
    end fun_emp01;
    --执行
    select fun_emp01() from dual;
    
    --只带输入参数
    create function fun_emp03(myvar1 in nvarchar2) return number is
    myresult number;
    begin
    select count(1) into myresult from employees where job_id=myvar1;
    return(myresult);
    end fun_emp03;
    --执行
    select fun_emp03('AD_VP') from dual;
    
    --带输入和输出
    create or replace function fun_emp04(chlvar0 nvarchar2,  chlvar out number) return nvarchar2 is
    myresult nvarchar2(50);
    begin
    select max(first_name),count(1) into myresult,chlvar from employees where job_id=chlvar0;
    return(myresult);
    end fun_emp04;
    --执行
    declare 
    var2 nvarchar2(50);
    var3 number;
    begin
    var2:=fun_emp04('IT_PROG',var3);
    dbms_output.put_line(var3);
    dbms_output.put_line(var2);
    end;
    

    博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。
    展开全文
  • oracle自定义函数

    2018-02-24 17:07:32
    这种函数类型是带有输入参数,然后又输出结果的例子  CREATE OR REPLACE FUNCTION "FN_GET_PKJZ_ORGDEGREE_CN" (v_orgcode in varchar2)  RETURN VARCHAR2  IS  t_result VARCHAR2 (40) :='';  BEGIN  select...

         用户自定义的函数,可以直接在sql语句中直接调用,并且任何一个funciton都必须有返回值,而且该函数声明后,是保存在数据端的,我们随时可以使用;注意:函数只能有一个返回值,如果想返回多个数据,可通过out类型参数将数据传到函数外部;


    这种函数类型是带有输入参数,然后输出一个参数的例子。

      CREATE OR REPLACE FUNCTION "FN_GET_PKJZ_ORGDEGREE_CN" (v_orgcode in varchar2)
       RETURN VARCHAR2
      IS
       t_result VARCHAR2 (40) :='';
      BEGIN
         select case
             when t.orgdegree = '5' then
              '省级'
             when t.orgdegree = '4' then
              '市级'
             when t.orgdegree = '3' then
              '县级'
             when t.orgdegree = '2' then
              '乡级'
             when t.orgdegree = '1' then
              '村级'
             else
              '其他'
           end into t_result from base_org_info t where t.orgcode = v_orgcode;
          return t_result;
    END FN_GET_PKJZ_ORGDEGREE_CN;

    函数写好以后,在此数据库中的其他sql都可以访问此函数,例如






    展开全文
  • Oracle自定义函数

    千次阅读 2018-07-23 16:34:07
    --1、无入参自定义函数   create or replace function fun_demo return varchar2 is demo_name varchar2(10); begin demo_name := '模拟数据'; return(demo_name); end fun_demo; 调用方式:select fun_...
  • DBMS_OUTPUT.PUT_LINE('日期格式输入有错,应该是YYYY-MM-DD'); END; 最后,这是我被迫这样写的。 CREATE OR REPLACE FUNCTION F_EMPLEVER(HIRE_DATE VARCHAR2) RETURN NUMBER IS V_LEVER NUMBER(1); V_...
  • Oracle 自定义函数

    2018-10-21 23:30:52
    一、函数 函数与存储过程相似,也是数据库中存储的已命名PL-SQL程序块。函数的主要特征是它必须有一个返回值。通过return来指定函数的返回类型。在函数的任何地方可以通过return expression语句从函数返回,返回...
  • ORACLE自定义函数

    2015-04-02 10:00:50
    用户定义函数是存储在数据库中的...参数类型:表示输入函数的参数。 OUT 参数类型:表示参数在函数中被赋值,可以传给函数调用程序。 IN OUT参数类型:表示参数既可以传值也可以被赋值。  1.语法格式:  SQL语法
  • mybatis中调用oracle自定义函数

    千次阅读 2018-06-19 13:55:50
    前几天在工作中遇到要在mybatis中调用oracle自定义函数的情景。其实很简单:1.先在pl/sql中编写测试好自定义函数,待用。2.在mybatis的mapper映射文件中调用函数&lt;select id="getUerids" ...
  • Oracle 自定义函数Function

    千次阅读 2014-12-31 20:56:52
    转换大写金额,相信有不少人用过,网上例子也有不少,这次在项目运用到,做下记录,方便查找,以备不时之需。首先在Oracle自定义一个function。
  • Oracle自定义函数&加密

    2019-10-05 05:23:13
    在sql中频繁使用的功能(逻辑、加密等)可以写成自定义函数进行封装,之后再调用即可。 CREATE OR REPLACE FUNCTION "函数名" (参数名 参数类型 参数数据类型) RETURN 返回值类型 AS --定义变量 BEGIN --PL-...
  • 1、数值型常用函数  函数 返回值 样例 显示 ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数 select ceil(10.6) from dual; 10 mod(m,n) m除以n的...
  • oracle 自定义函数 方法 基本例子

    千次阅读 2016-11-21 10:48:11
    oracle 自定义函数 方法 基本例子  http://blog.itpub.net/20784402/viewspace-1116719/ 核心提示:函数用于返回特定数据。执行时得找一个变量接收函数的返回值; 语法如下: create orreplace ...
  • oracle数据库,使用自定义函数,实现了金额的大写转换。sql语句中,直接调用此函数即可得到金额大写。
  • [oracle自定义函数]查询表格的行数

    千次阅读 2018-01-06 23:12:37
    假如要查的为emp(员工),在scott用户下默认有这张表。当前有14条记录。 只需要执行 ...在写这个之前,我们先来写一个根据员工id(empno)查询员工姓名(ename)的自定义函数(getEmpName) creat
  • mybatis调用oracle自定义函数

    千次阅读 2017-08-23 13:22:05
    我的电脑操作系统版本为Win7旗舰版(ServicePack1),Oracle版本为...本例中使用的配置文件mybatis-config.xml、PersonInfo类以及Oracle数据库的结构,可以参见我的另一篇Blog《一个简单的MyBatis连接Oracle数据库的
  • 自定义函数语法: CREATE OR REPLACE FUNCTION 函数名 RETURN 返回值类型 IS 声明部分; BEGIN 函数体; RETURN 变量; END; 下面是我写的一个关于生成带特殊前缀的自增ID的函数 create or replace ...
  • [oracle自定义函数]生成复杂序列

    千次阅读 2018-04-14 15:50:34
    一、问题描述现在需要生成如下图所示的序列函数的具体要求:(1)传入一个终值endNumber,使用number类型存放(2)序列中的每个数需要以何种方式重复出现(如:时间、金额或者只是单次重复出现) 重复模式titleArr,...
  • Oracle自定义函数(function)

    千次阅读 2017-09-19 09:17:53
    Oracle Function 一、概述 1、函数与存储过程的不同点 (1)、函数就是一个有返回值的过程,且是必须。 (2)、存储过程只能作为一个plsql语句调用,而函数不但可以作为plsql语句调用,符合约束的函数还可以...
  • 加密函数:create or replace function encrypt_des(p_text varchar2) return varchar2 isbegin return sys.encrypt_function(p_text);end;CREATE OR REPLACE FUNCTION SYS.ENCRYPT_FUNCTION( V_STR VARCHAR2...
  • Oracle自定义函数实例

    2008-10-22 16:35:58
    --没有参数的函数 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 ...
  • 一、自定义函数的定义和调用入门 1 、一个最简单的自定义函数Fun_test1的定义。create or replace function Fun_test1(p_1 number)--Fun_test1是函数名,有一个输入参数p_1,是number型的。返回值也是number型的 ...
  • 需要些一个自定义函数,要求: 输入两个日期(比如开始日期2020/01/15,结束日期2021/02/03),还有一个周期(此周期为月,半年,年,季度)用周期作条件,开始日期作为第一个日期,截止结束日期,日期递增,递增...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,815
精华内容 11,926
关键字:

oracle自定义函数输入表