• 项目中oracle存储过程记录——经常使用语法备忘


    项目中oracle存储过程记录——经常使用语法备忘

    项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中。当中原表之中的一个的日期字段是timestamp类型,目标表的字段是varchar2类型;

           当中一些内容非经常常使用,所以做下记录,供查找。

    1、存储过程的格式

           oracle存储过程和函数都能够实现,一般没有返回值。则採用存储过程,函数比sqlserver的功能强大。

    oracle变量定义最好加上前缀如V_。查询条件中变量名称和字段名称不能反复。

    CREATEOR REPLACE PROCEDURE PROC_NAME (

      v_interval IN NUMBER DEFAULT -3 –PARAM_NAME_LIST

    )AS

      v_cnt            number(4); -- 定义变量及游标

    BEGIN

    --业务逻辑语句

    ENDPROC_NAME

    2、游标定义和循环

    cursor  CURSOR_NAME is

                  SELECT * FROM DUAL – SELECT 语句;

    循环游标有多种方式。最简单的for方式,避免定义一些变量及打开、关闭游标,能够简化非常多代码。可是假设须要訪问游标记录条数,就须要loop或while循环。

    forloop 语法:

    FOR curRow   IN CURSOR_NAME  -- curRow是游标的行记录变量

    LOOP

    --直接通过curRow.游标字段取值(省略了变量的定义)

    ENDLOOP;

    3、日期的加减计算

    DATE类型是一个7字节的定宽日期/时间数据类型。

    它总是包括7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒;TIMESTAMP类型与DATE很类似,仅仅只是另外还支持小数秒和时区。

    以下的N值能够为负数。

    Ø  使用NUMTODSINTERVAL内置函数来添加小时、分钟和秒。

    比方:DATE+NUMTODSINTERVAL(n,'minute')

    Ø  加一个简单的数来添加天。

    比方:DATE+n

    Ø  使用ADD_MONTHS内置函数来添加月和年。

    比方:ADD_MONTHS(DATE,n)

    Ø  使用months_between内置函数来计算日期之间的月数。

    比方:select months_between(sysdate,to_date('2010-10-10','yyyy-mm-dd')) from dual;


    4、日期类型转成字符

           select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ssxff')time1 from dual;

           --年月日时分秒及6位毫秒;

           select to_char(systimestamp  ,'yyyy-mm-dd hh24:mi:ss.ff1') from dual;

           --年月日时分秒及毫秒(位数由ff后面的数字决定,1~9之间,ff3表示保留三位毫秒)

    5、if exist 替代语法

           oracel没有sqlserver的if exist 语法,仅仅能变形实现,建议使用以下的语法:

    v_cnt            number(4); -- 声明变量;

    selectcount(*) into v_cnt from dual where exists (SELECT 语句);

    演示样例:

    declare

      v_cnt number;

    begin

      select count(*)  into v_cnt from dual

            where exists (select * from table_namewhere col_name=1);

      if v_cnt = 0 then

    dbms_output.put_line('无记录, 在此写你的业务代码');

    endif;

    end;

    6、空值及字符串相关

           假设字段不同意为空,使用nvl函数。如:nvl(field_name,’ ’),须要说明的两个单引號直接是空格。假设没有不论什么字符,oracle也视为null。

           sys_guid()生成32为uuid;

     

           substr(字符串,截取開始位置,截取长度) //返回截取的字

           substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符開始截取长度为1的字符串

           substr('Hello World',1,1) //返回结果为 'H'  *0和1都是表示截取的開始位置为第一个字符

           substr('Hello World',2,4) //返回结果为 'ello'


    7、调试存储过程

           复杂的业务一般都须要调试,感觉PLSQLDeveloper调试比較方便。右键选择须要调试的存储过程。在測试窗体就可以单步调试。


  • 相关阅读:
    头条java 后台一面凉经
    JVM运行时数据区
    基础篇——Spring Cloud Hystrix
    bug篇——idea拉取代码认证失败重新登录
    基础篇——代理模式之SpringAOP
    基础篇——代码优化100条之(11—20)
    电商项目实战(架构八)——RabbitMQ实现延迟消息
    电商项目实战(架构七)——Mongodb实现文档操作
    基础篇——代码优化100条之(1—10)
    电商项目实战(架构六)——Elasticsearch实现商品搜索
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5060868.html
Copyright © 2020-2023  润新知