`
lancijk
  • 浏览: 388384 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle 函数的写法,以及简单的调用

阅读更多

1:首先看创建一个函数

  给定一个日期,判断是否是休息日.

create or replace function test(date_in in date)
    return int
is
    num int;
    workflag varchar2(1);
begin
    select count(*) into num from Sys_Holiday
        where to_char(TODAY,'yyyy-MM-dd')=to_char(date_in,'yyyy-MM-dd');

    if (num>0) then
        select WORKFLAG into workflag from Sys_Holiday
            where to_char(TODAY,'yyyy-MM-dd')=to_char(date_in,'yyyy-MM-dd');
        if (workflag='W') then
            return 0;
        else
            return 1;
        end if;
    else
        select to_char(date_in,'D') into num from dual;
        if (num=7 or num=1) then
            return 1;
        else
            return 0;
        end if;
    end if;
end;

 

2:另外一个函数调用这个函数,一个日期增加或减少多少天对应的日期(工作日) (有点罗嗦)

 

CREATE OR REPLACE FUNCTION getWorkDayADD( datetime in date,workday in int) return date
is
    dayflag int; --初始值,写循环
    sumflag int; --判断值
    datetime1 date;
    workday1  int;
    sysdateadd date;
    daynum    int;
    sysdatelast date; --返回值
begin
    datetime1 :=datetime;
    workday1 := workday;
    dayflag :=0;
    sumflag :=1;
    if(workday1>0) --加减多少来决定
        then
            while (sumflag=workday1) loop
                 dayflag := dayflag+1;
                 select datetime1+dayflag into sysdateadd from dual;
                 daynum :=test(sysdateadd);
                       if(daynum=1)then
                         sumflag :=sumflag;
                       else
                         sumflag :=sumflag+1;
                       end if;
            end loop;    
         else
             while (sumflag=workday1) loop
                   dayflag := dayflag+1;
                 select datetime1-dayflag into sysdateadd from dual;
                 daynum :=test(sysdateadd);
                       if(daynum=1)then
                         sumflag :=sumflag;
                       else
                         sumflag :=sumflag+1;
                       end if;
              end loop;
           
      end if;
  if(workday1>0) then
        select datetime1+dayflag into sysdatelast  from dual;
       else
        select datetime1-dayflag into sysdatelast  from dual;
    end if;       
  
  return (sysdatelast);
end getWorkDayADD;

 

3:写一个简单存储过程测试一下

create or replace procedure x is
  c date;
  datetime date;
  begin
	select sysdate into datetime from dual;	
	dbms_output.put_line(datetime);
	dbms_output.put_line('1231');
   c := getWorkDayADD(datetime,3);
   dbms_output.put_line(c);
   end;

 

4: 执行这个存储过程

SQL> exec x

 

 

0
2
分享到:
评论

相关推荐

    Oracle函数_JDBC常用写法

    在这个“Oracle函数_JDBC常用写法”的主题中,我们将探讨Oracle的一些关键函数和JDBC的常见使用方法。 首先,让我们来看看`ORACLE函数大全.txt`中可能涵盖的内容。Oracle函数包括数学函数、字符串函数、日期时间...

    Sql语法转换为Oracle语法

    9. 函数和内置操作:例如,SQL Server的 `CONVERT()` 函数在Oracle中可能是 `TO_CHAR()` 或 `TO_DATE()`。 10. 日期格式:SQL Server和Oracle默认的日期格式不同,转换时需要考虑日期字符串的格式化问题。 在...

    oracle存储过程学习经典[语法+实例+调用]

    以上就是从给定文件中提取出来的Oracle存储过程学习的经典知识点,涵盖了基本语法、常见问题、调用方法以及与函数的区别等内容。希望这些内容能帮助读者更好地理解和掌握Oracle存储过程的相关知识。

    MoneyToChinese.sql

    在Oracle数据库中将数字金额转换为中文写法,运行后直接调用函数即可

    Informix迁移至Oracle数据库的研究.pdf

    在Oracle中,释放游标可以通过预编译参数来控制,无需显式调用释放语句。 - Oracle的DML(数据操纵语言)和DDL(数据定义语言)语法与Informix不同,部分Informix的关键字和内嵌函数在Oracle中可能不被支持。例如,...

    Oracle中触发器示例详解

    触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。...

    oracle 老方块免费试听课程教学聊天记录,供大家学习

    Oracle数据库在SQL优化方面有很多策略和技术,其中包括对函数的使用、索引的创建以及性能测试。在提供的聊天记录中,提到了几个关键知识点,我们将详细展开讨论。 1. **NVL与DECODE函数的性能差异**: NVL函数用于...

    GETDATADICT(ORACLE).sql

    针对eos的业务字典表设置转换函数,将代码直接通过调用函数获取汉字说明。以上写法适用于oracle数据库,如需用于mysql需要稍作改造

    提升数据库Oracle开发性能探究.pdf

    当SQL语句内部调用函数,进而再调用SQL语句时,就会产生递归调用。这种做法可能会导致大量的性能开销,因此要尽量避免或减少调用次数。文档还提到了使用绑定变量,它是OLTP系统性能优化的关键因素。绑定变量能够使...

    Oracle考试题.docx

    选项C提供了正确的调用方式,即通过定义一个变量并将其赋值为函数调用的结果。 综上所述,这些知识点覆盖了Oracle数据库的基本概念、SQL查询、存储过程和函数的使用等多个方面,对于理解和掌握Oracle数据库的核心...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    Oracle分页查询(很不错的介绍)

    同时,避免在分页查询中使用聚集函数或在子查询中使用`GROUP BY`,因为这可能导致Oracle无法有效地利用索引。 总的来说,Oracle的分页查询通过嵌套查询和`ROWNUM`伪列来实现。正确地使用分页查询可以显著提高用户...

    ORACLE常识.txt

    这里调用了 `SQRT` 函数计算2的平方根,并将其输出到标准输出流中。需要注意的是,在使用 `DBMS_OUTPUT` 之前,通常需要先设置服务器输出为开启状态,即通过 SQL*Plus 命令 `SET SERVEROUTPUT ON` 来实现。 ### 2. ...

    oracle数据库的毫秒级优化技巧

    2. **优化函数调用**:在查询条件中直接使用函数会降低索引的有效性。例如,将 `SELECT * FROM c WHERE to_char(c1, 'YYYYMMDDHH24:MI:SS') = '20020314:01:01';` 改为 `SELECT * FROM c WHERE c1 = to_date('...

    oracle常见面试题及答案.pdf

    Oracle面试题及答案总结 Oracle是一种关系数据库管理系统,广泛应用于企业级应用中。在面试过程中,了解Oracle的基本概念、存储过程、触发器、索引、约束等知识点是非常重要的。下面是一些常见的Oracle面试题及...

    收获不知Oracle

    2.3.2.5 集合写法,飞机速度 77 2.3.2.6 直接路径,火箭速度 78 2.3.2.7 并行设置,飞船速度 79 2.3.3 精彩的总结与课程展望 80 2.3.3.1 最大的收获应该是思想80 2.3.3.2 老师的课程展望与规划81 第3章神奇,走进...

    数据库访问异步检测

    它提供了一组函数调用来创建、操纵和查询Oracle数据库,是Oracle数据库编程的基础。 5. **异步操作**:在数据库访问中,异步操作意味着当发起一个数据库请求时,主应用程序不会等待其完成,而是立即返回并继续执行...

    oracle_sql优化讲义.doc

    ### Oracle SQL优化讲义知识点详解 #### 一、SQL优化的重要性及原理 ##### 1.1 SQL优化的意义 - **数据库整体性能的关键因素**:在数据库应用系统中,通过优化数据库参数所能获得的性能提升大约仅占40%,而剩余60...

    plsqldeveloper使用技巧

    Debugging 功能可以帮助你调试存储过程和函数,Profiling 功能可以帮助你分析 SQL 语句的执行时间,Object Browser 功能可以帮助你浏览 Oracle 数据库中的对象。 总结 通过学习和掌握这些使用技巧,你可以更好地...

Global site tag (gtag.js) - Google Analytics