项目中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调试比較方便。右键选择须要调试的存储过程。在測试窗体就可以单步调试。

项目中oracle存储过程记录——经常使用语法备忘的更多相关文章

  1. 转:ORACLE存储过程笔记1----基本语法(以及与informix的比较)

    一.基本语法(以及与informix的比较)   create [or replace] procedure procedure_name (varible {IN|OUT|IN OUT} type) ...

  2. 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结

    将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...

  3. SASS语法备忘

    sass语法 关于sass 3.3.0更新说明——3.3.0 sublime相关插件为:scss语法高亮,sass语法高亮,编译,保存即编译,格式化 文件后缀名 sass有两种后缀名文件:一种后缀名为 ...

  4. 项目中Orcale存储过程优化记录

    今天对之前写的Orcale存储过程做了一些优化,使其变得更加灵活,之前写的存储过程是使用游标存储SQL执行结果,但是使用游标带来的弊端是,在声明时,它所执行的SQL就已经被写死,无法修改.若想更加灵活 ...

  5. Oracle存储过程记录异常日志

    一般我们会将一些涉及到数据库的定时任务直接用存储过程搞定,省去了后端代码的开发.部署,简单.快速,但这种方式存在一个弊端——当存储过程执行出错了,我们无法感知.解决办法也简单,学代码那样去捕获异常.打 ...

  6. Oracle存储过程记录异常

    --建立错误日志表 create table PUB_PROC_ERR_LOG ( LOG_ID NUMBER, MODULE_NAME ), PROC_NAME ), ERR_TIME DATE, ...

  7. 项目中经常用到的sass语法汇总

    1.定义变量 使用:$(符号定义变量) 注意:使用时要带有'$'符号,定义变量的方式与PHP相同 $变量:数值; $color_r : red; div{ color:$color_r; } 2.if ...

  8. java项目中oracle配置说明

    配置信息: #oracle database settings jdbc.url::orcl jdbc.username=cognos_data jdbc.password=cognos_data j ...

  9. sqlserver -- 学习笔记(五)查询一天、一周、一个月记录(DateDiff 函数)(备忘)

    Learn From : http://bjtdeyx.iteye.com/blog/1447300 最常见的sql日期查询的语句 --查询当天日期在一周年的数据 ) --查询当天的所有数据 ) -- ...

随机推荐

  1. 如何清除win7开机密码

    一.电脑已经登录到系统,但是忘记了密1对于这种情况是最简单的,其实只需要将密码取消就可以了右键单击桌面上我的电脑,选择管理即可进入计算机管理界面2依次展开系统工具--本地用户和组--用户,在右侧选择要 ...

  2. Another Crisis

    题意: 给出一个树,当孩子节点为1的数量占孩子总数的T%时父节点变成1,求使根节点变成1需要叶子节点为1的最小数量. 分析: 简单的树状dp,dp[i]以i为根的子树所需的最小数量,取它所有子树中最小 ...

  3. LoadRunner检查点实战

    码农博客 即将到期,现将博客中部分文章转载到博客园.转载时略有删减. 一.为什么要使用检查点 为什么要使用检查点,那就要说明一下LR如何判断脚本是否执行成功. LR判断脚本是否执行成功是根据服务器返回 ...

  4. SQL对字符串进行排序

    假设字符串中只由'A'.'B'.'C'.'D'组成,且长度为7.并设函数REPLICATE(<字符串>,<n>)可以创建一个<字符串>的n个副本的字符串,另外还有R ...

  5. SQL中以count及sum为条件的查询

    在开发时,我们经常会遇到以“累计(count)”或是“累加(sum)”为条件的查询.比如user_num表: id user num 1 a 3 2 a 4 3 b 5 4 b 7   例1:查询出现 ...

  6. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇07:全屏炸弹》

    7.全屏炸弹 全屏炸弹概述: 为了增设游戏的趣味性,我们制作一个游戏的基本框架以外.还会增设一些其他的额外的功能.比如5秒无敌状态.冰冻效果等.下面咱们以消灭屏幕中所有炸弹为例,看除了碰撞可以触发事件 ...

  7. 关于C++ vector的拷贝

    定义了vector变量,在使用时直接用了等号赋值,后来发现有问题,就查了一下vector怎么赋值? 说明:vector是一个构造对象,不能直接使用=符号进行复制,必须迭代每个元素来复制.或者重载=操作 ...

  8. Codeforces Educational Codeforces Round 15 A. Maximum Increase

    A. Maximum Increase time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. 查看解决Oracle对象锁住的问题

    在编译的一个存储过程的时候,对象可能由于被锁住而处于假的卡死状态,这个时候有的是因为,这个过程正在运行中,所以无法编译: 上次我遇到一次,我很清楚的确定这个过程没有运行,可以我就是无法编译,对象一直被 ...

  10. Spring MVC MultiActionController example

    In Spring MVC application, MultiActionController is used to group related actions into a single cont ...