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

来源:互联网 发布:网络助手 编辑:程序博客网 时间:2024/06/07 17:25

项目中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调试比较方便。右键选择需要调试的存储过程,在测试窗口即可单步调试。


3 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子口算老出错怎么办 孩子考试总粗心怎么办 孩子作业错误率高怎么办 数学计算总出错怎么办 16岁不认字怎么办 数学细节丢分怎么办 感觉自己老了怎么办 小学拼音不过关怎么办 小学面试不过关怎么办 小学阅读不过关怎么办 孩子计算老出错怎么办 工作中总是马虎怎么办 孩子总是计算错误怎么办 做设计老是犯错怎么办 小学生阅读总出错怎么办 写作文没思路怎么办 孩子不爱写作文怎么办 写作文没有素材怎么办 写作文没有灵感怎么办 做事工作马虎粗心大意怎么办 小孩作业马虎粗心大意怎么办 孩子写字一直错怎么办 孩子写字老错怎么办 写错字涂黑了怎么办 写错字不能涂改怎么办 孩子爱写错别字怎么办 孩子读题马虎怎么办 孩子知错不该怎么办 小孩胆小反应慢怎么办 孩孑经常流鼻血怎么办 中考考号写错了怎么办 头后仰就头晕怎么办 感觉自己要晕倒怎么办 孩子不愿动手写字怎么办 老年人恶心想吐怎么办 小学生老写错别字怎么办 突然头晕站不稳 怎么办 早上起床突然天旋地转怎么办 躺着突然感觉天旋地转怎么办 眩晕症发作时怎么办 低血糖恶心想吐怎么办