项目中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调试比較方便。右键选择须要调试的存储过程。在測试窗体就可以单步调试。
项目中oracle存储过程记录——经常使用语法备忘的更多相关文章
- 转:ORACLE存储过程笔记1----基本语法(以及与informix的比较)
一.基本语法(以及与informix的比较) create [or replace] procedure procedure_name (varible {IN|OUT|IN OUT} type) ...
- 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结
将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...
- SASS语法备忘
sass语法 关于sass 3.3.0更新说明——3.3.0 sublime相关插件为:scss语法高亮,sass语法高亮,编译,保存即编译,格式化 文件后缀名 sass有两种后缀名文件:一种后缀名为 ...
- 项目中Orcale存储过程优化记录
今天对之前写的Orcale存储过程做了一些优化,使其变得更加灵活,之前写的存储过程是使用游标存储SQL执行结果,但是使用游标带来的弊端是,在声明时,它所执行的SQL就已经被写死,无法修改.若想更加灵活 ...
- Oracle存储过程记录异常日志
一般我们会将一些涉及到数据库的定时任务直接用存储过程搞定,省去了后端代码的开发.部署,简单.快速,但这种方式存在一个弊端——当存储过程执行出错了,我们无法感知.解决办法也简单,学代码那样去捕获异常.打 ...
- Oracle存储过程记录异常
--建立错误日志表 create table PUB_PROC_ERR_LOG ( LOG_ID NUMBER, MODULE_NAME ), PROC_NAME ), ERR_TIME DATE, ...
- 项目中经常用到的sass语法汇总
1.定义变量 使用:$(符号定义变量) 注意:使用时要带有'$'符号,定义变量的方式与PHP相同 $变量:数值; $color_r : red; div{ color:$color_r; } 2.if ...
- java项目中oracle配置说明
配置信息: #oracle database settings jdbc.url::orcl jdbc.username=cognos_data jdbc.password=cognos_data j ...
- sqlserver -- 学习笔记(五)查询一天、一周、一个月记录(DateDiff 函数)(备忘)
Learn From : http://bjtdeyx.iteye.com/blog/1447300 最常见的sql日期查询的语句 --查询当天日期在一周年的数据 ) --查询当天的所有数据 ) -- ...
随机推荐
- esd-ESD试题
ylbtech-doc:esd-ESD试题 ESD试题 1.A,ESD试题返回顶部 不定项选择题(下列选择题ABCD四项中至少有一项是正确的,共20小题): 1.{ESD题目}储备阶段的几个主要岗位是 ...
- 全栈工程师眼中的HTTP
HTTP,是Web工程师每天打交道最多的一个基本协议.很多工作流程.性能优化都围绕HTTP协议来进行,但是我们对HTTP的理解是否全面呢?如果前端工程师和后台工程师坐在一起玩捉鬼游戏,他们对HTTP的 ...
- SQL Server2005安装配置以及测试
SQL Server2005有2种版本,一种是集成版的, 一种是2个文件夹形式的.这里使用后者,安装文件夹名字为:SQL Server x86,该文件夹里面有Servers和Tools文件夹以及一些其 ...
- ASP.NET 日期 时间 年 月 日 时 分 秒 格式及转换
在平时编码中,经常要把日期转换成各种各样的形式输出或保持,今天专门做了个测试,发现DateTime的ToString()方法居然有这么多的表现形式,和大家一起分享. DateTime time=Dat ...
- C++实现网格水印之调试笔记(六)——补充
调用matlab生成的网格水印特征向量矩阵 从文件中读取的原始网格的特征向量矩阵 好吧,之前得出的结果不正确是因为代码写错了.因为实现论文中的提取方案时代码写错了,自己想了另外一个方法,结果方向两者在 ...
- BufferedReader和BufferedWriter读写文件(转载)
http://375940084.blog.51cto.com/2581965/751040 1.创建Student类存储每个学生信息,属性(学号,姓名,出生日期,得分)2.从c:/test/stud ...
- redo文件二
为什么要引入LGWR后台进程和redo log buffer 如果使用前台进程来将redo的信息写入到redo日志文件组中,那么会导致并发的前台进程对redo日志文件组的争用,从而使用后台进程LGWR ...
- bzoj 1778 [Usaco2010 Hol]Dotp 驱逐猪猡(高斯消元)
[题意] 炸弹从1开始运动,每次有P/Q的概率爆炸,否则等概率沿边移动,问在每个城市爆炸的概率. [思路] 设M表示移动一次后i->j的概率.Mk为移动k次后的概率,则有: Mk=M^k 设S= ...
- Tkinter教程之Button篇(1)
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811298 #Tkinter教程之Button篇(1)#Button功能触发事件'''1.一个 ...
- CSS框模型(框模型概述、内边距、边框、外边距、外边距合并)
CSS 框模型概述 CSS 框模型 (Box Model) 规定了元素框处理元素内容.内边距.边框 和 外边距 的方式. 元素框的最内部分是实际的内容,直接包围内容的是内边距.内边距呈现了元素的背景. ...