Oracle常用存储过程写法
写在前面
这段时间工作最长接触到的就是Oracle数据库,不论查数据,还是统计、运行job,都离不开PL/SQL 存储过程,下面就整理下经常用到的知识。
一、Function函数
函数是执行非查询语句的方法。
- 创建返回list的function
CREATE OR REPLACE FUNCTION FNTOPWEEKESLIST (ininttype IN INTEGER,outcurlist OUT pkgrefcursor.refcursor
)RETURN INTEGER
IS
BeginOPEN outcurlist FORSELECT t.all, a.booknameFROM tbbookestimatestats t, tbbook aWHERE t.intype = ininttypeand t.bookid = a.bookidand a.freetype = 0;RETURN 0;
END;
- 创建带分页的返回list的function
CREATE OR REPLACE FUNCTION fn_source_pay_getlist(indtbegin DATE,indtend DATE,invarsourcename VARCHAR2,inintpagesize IN INTEGER,inintpageindex IN INTEGER,outintRowCount out integer,outcurlist OUT pkg_refcursor.ref_cursor)RETURN INTEGER as
beginselect count(1)into outintRowCountfrom tbcl_resu_payuserwhere source = casewhen length(invarsourcename) > 0 theninvarsourcenameelsesourceendand trunc(datetime) >= indtbeginand trunc(datetime) < indtend;open outcurlist forselect *from (select a.*, row_number() over(order by a.datetime) rnfrom (select source,datetime,payusercnt1,payusercnt2,payusercnt3,payusercnt4from tbcl_resu_payuserwhere source = casewhen length(invarsourcename) > 0 theninvarsourcenameelsesourceendand trunc(datetime) >= indtbeginand trunc(datetime) < indtendorder by datetime) a)where rn between inintpagesize * (inintpageindex - 1) + 1 andinintpagesize * inintpageindex;return 0;
end;
- 返回普通值的function
CREATE OR REPLACE FUNCTION FNACTIVEDAYSUSECNTGET (inintactivetype INTEGER,inintuserid integer,outintgetcnt out integer,--总抽奖次数 outintusercnt out integer)--用户抽奖次数RETURN INTEGER
IS获取活动当天领取次数vcnt INTEGER;
BEGINSELECT NVL (MAX (cnt), 0)INTO outintgetcntFROM tbactivestatsWHERE logtime = TRUNC (SYSDATE) AND activetype = inintactivetype; SELECT count(1)INTO outintusercntFROM tbuseractivegiftlogWHERE userid = inintuserid AND activetype = inintactivetype; RETURN 0;
END;
或者这样:
CREATE OR REPLACE FUNCTION FNUSERCOSTGET(invarptid IN varchar2,inintbookid in integer)RETURN integer ISvamount integer;
BEGINselect nvl(max(amount), 0)into vamountfrom tbuserbookcostwhere ptid = lower(invarptid)and bookid = inintbookid;return(vamount);
EXCEPTIONWHEN others THENreturn(0);
END;
二、Procedure过程
- 更新update
CREATE OR REPLACE PROCEDURE "ADDUPDATEBOOKLOG" (inintbookid IN INTEGER,inintfreetype IN INTEGER,outintresult OUT INTEGER) AS
/*功能:插入一条记录传入参数:bookid,freetype输出参数:是否插入成功
*/
BEGIN如果存在就更新记录UPDATE tbupdatebooklogSET createtime = SYSDATE, freetype = inintfreetypeWHERE bookid = inintbookid;--如果不存在就插入记录IF SQL%ROWCOUNT = 0 THENINSERT INTO tbupdatebooklog(bookid, createtime, freetype)VALUES(inintbookid, SYSDATE, inintfreetype);END IF;COMMIT;outintresult := 0;
EXCEPTIONWHEN OTHERS THENoutintresult := 1;ROLLBACK;
END AddUPdateBookLog;
或者:
CREATE OR REPLACE PROCEDURE PRBOOKSIGNSTATUSSET(inintBookId integer,invarSignStatus varchar2,outintresult out integer) isbeginupdate tbbook tset t\.signstatus = invarSignStatuswhere bookId = inintBookId;commit;outintresult := 0;
end prbookSignStatusset;
- 插入insert
CREATE OR REPLACE PROCEDURE "PRBOOKTYPEUPDLOGINS" (inintbookid IN INTEGER,ininttypeid IN INTEGER,invatypename IN varchar2,outintresult OUT INTEGER
)
ISvcnt INTEGER;
BEGINinsert into tbbooktypeupdlog(bookid,updatetime,typeid,typename)values (inintbookid,sysdate,ininttypeid,invartypename);commit;outintresult:=0;
END;
三、Package包
包是有包头和包体组成的一组具有共性的函数或者过程。
- 声明包
CREATE OR REPLACE PACKAGE PKGTEST isTYPE refcursor IS REF CURSOR;procedure add();procedure update();procedure get();
end pkgTEST;
- 定义包体
CREATE OR REPLACE PACKAGE BODY PKGTEST isTYPE refcursor IS REF CURSOR;procedure add() IS BEGIN...END;procedure update() ISBEGIN...END;procedure get() ISBEGIN...END;
end pkgTEST;
转载于:https://www.cnblogs.com/fanyong/p/3645691.html
Oracle常用存储过程写法相关推荐
- oracle的存储过程写法Oracle中如何写存储过程
Oracle的存储过程基本写法 Oracle存储过程简介: 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务 ...
- JDBC常用连接写法(包括MySQL、Oracle、Sybase、SQLServer、DB2)
本文引用自CKJ-CLARK<JDBC常用连接写法(包括MySQL.Oracle.Sybase.SQLServer.DB2)> http://apps.hi.baidu.com/share ...
- Oracle常用傻瓜问题1000问
1. Oracle安装完成后的初始口令? internal/oracle sys/change_on_install system/manager scott/tiger sysman/oem_tem ...
- oracle 常用知识点整理
转 : oracle 常用知识点 原文链接:http://blog.csdn.net/weijiaxiaobao/article/details/51323573 Oracle 是一个庞大的系统,里 ...
- oracle存储过程和视图不存在,Oracle 创建存储过程 提示权限不足或者提示表和视图不存在问题...
grant create view to hospital; --授予查询权限 grant select any table to hospital; --授予权限 grant select any ...
- oracle常用语句大全 来自csdn
1. Oracle安装完成后的初始口令? internal/oracle sys/change_on_install system/manager scott/tiger sysman/oe ...
- Oracle常用语句大全
1. Oracle安装完成后的初始口令? internal/oracle sys/change_on_install system/manager scott/tiger sysman/oem_tem ...
- oracle常用sql语句
– 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba –然后,解除对scott用户的锁 alter user scott account unlock; ...
- oracle常用口令
1. Oracle安装完成后的初始口令? internal/oracle sys/change_on_install system/manager scott/tiger sysman/oe ...
最新文章
- 2.sort 排序命令讲解
- 七、FFmpeg使用---X264静态库编入FFmpeg
- 【前端】前端笔试题 [1]
- mysql privileges
- 相机中影响成像质量的参数
- 业务运维:站在企业转型风口上的云智慧
- leetcode 28 实现strStr()
- android10LTE,Jelly 2:全球最小的Android 10 4G智能手机
- SQLService2012下载和安装
- java8steam流 filler_做有机硅,不懂英文哪能行?——赶紧收藏,说不定哪天就用到了!...
- 基于Springboot外卖系统01:技术构成+功能模块介绍
- php 方差函数,PHP应用:PHP基于方差和标准差计算学生成绩的稳定性示例
- android虚拟机运行app出现错误Unfortunately
- opc服务器变量为空,OPC客户机上浏览不到OPC服务器上的变量
- PHP 两个多维数组根据某个键的值进行组合排序的几种思路
- picpick尺子像素大小精度不够准确_picpick尺子像素大小精度不够准确_如何准确的按比例打印图纸...
- media在HTML中作用,web前端:关于css中@media的一些基本使用
- HG30-3a型数字式多功能校准仪
- ppt如何变成pdf
- springboot websocket 传递 头信息 协议头 token 的前后端解决方案
热门文章
- opencv 高反差保留算法
- sscanf一小用法
- cmd命令大全/cmd命令提示符大全
- 复数幂用java程序怎么求_蓝桥杯——复数幂 (2018JavaAB组第3题)
- 【clickhouse】ClickHouseException code: 225 ZooKeeper session has been expired
- 【Flink】 Flink 应用资源分配问题排查思路
- 【ElasticSearch】Es 源码之 CcrRestoreSourceService 源码解读
- 【nginx】nginx 简介 基本概念 介绍
- 【kafka】利用 InfoSphere Data Replication CDC for Kafka 实现高效数据复制
- notepad: 怎么在notepad里面,将字符串替换成换行