项目中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)

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。

7、调试存储过程

复杂的业务一般都需要调试,感觉PLSQLDeveloper调试比较方便。右键选择需要调试的存储过程,在测试窗口即可单步调试。

时间: 2024-08-03 23:27:39

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

oracle 存储过程的基本语法

原文:oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) IS变量1 INTEGER :=0;变量2 DATE;BEGIN END 存储过程名字 2.SELECT INTO STATEMENT  将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条  记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)  例子:  

linux下常用命令备忘

转自:Linux 命令集锦 linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl +M -i4 如果退格键变成了:"^h". 终端连接unix删除退格键,按住CTL键同时按delete Linux搜索 # find / -name "xxx.conf" 查看linux是32位还是64位的命令 #file /sbin/init #getconf LONG_BIT #getconf -a 在Linux和Windows下都可以用nslo

Notepad++ 常用快捷键 (备忘)

最近在学习Lua,用Notepad++ 作为编译器. 今早无意间按下 Ctrl+D ,结果就神奇般的复制并粘贴当行了,突然觉得Notepad++ 这东西很神奇. 网上查找了Notepad++的快捷键,尝试 Ctrl+Q 的时候,小有感慨,这丫太神奇了. 现将Notepad++快捷键做简单记录,备忘用. Ctrl+D    复制并粘贴当行 Ctrl+L     删除当前行 Ctrl+T    上下行交换 Ctrl+W   关闭当前文档 Ctrl+Q    注释/取消注释 Ctrl+Tab    

Postgresql,常用sql备忘

1.查看所有表的名称 Postgresql,greeplum,如果数据库在几千里以外,数据量巨大,网速不好,使用pgadmin客户端,那么你大部分时间都要浪费在等在中... 使用pgadmin的query是个不错的选择,但是,怎么才能知道表名呢,这丫真没mysql好用—— SELECT tablename FROM pg_tables where tablename not like 'gp%' and tablename not like 'gp%' and tablename not lik

metasploit 常用命令备忘

metasploit 常用命令备忘    MSFconsole Commands-------------------------------------24show exploits 查看所有exploitshow payloads 查看所有payloadshow auxiliary 查看所有auxiliarysearch name 搜索exploit 等info 查看加载模块的信息use name 加载模块LHOST 本机IPRHOST 目标IPset function 设置选项值setg

linux学习与实践(4)--常用命令备忘

1.查看程序对应进程号: ps –ef|grep 进程名 2.Linux下查看端口号所使用的进程号: 使用lsof命令: lsof –i:端口号 linux学习与实践(4)--常用命令备忘,布布扣,bubuko.com

show slave status常用参数备忘

mysql> show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host                                       主库ip Master_User                                       主库上用于主从

vb6中webbrowser控件树转换备忘

Dim doc As HTMLDocument Set doc = WebBrowser1.Document Dim inputs As IHTMLElementCollection Set inputs = doc.getElementsByTagName("input") vb6中webbrowser控件树转换备忘

Webstorm常用快捷键备忘(Webstorm入门指南)

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“Web前端开发神器”.“最强大的HTML5编辑器”.“最智能的JavaSscript IDE”等.与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能.百度百科 软件名称: JetBrains WebStorm(java.html5开发工具) v8.0.5 官方英文版 软件大小: 140.7MB 更新时间: 2014-10-01 现将最常用的快捷键挑出来备