写在前面

这段时间工作最长接触到的就是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包

包是有包头和包体组成的一组具有共性的函数或者过程。

  1. 声明包
CREATE OR REPLACE PACKAGE PKGTEST isTYPE refcursor IS REF CURSOR;procedure add();procedure update();procedure get();
end pkgTEST;
  1. 定义包体
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常用存储过程写法相关推荐

  1. oracle的存储过程写法Oracle中如何写存储过程

    ​​Oracle的存储过程基本写法​​ Oracle存储过程简介: 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务 ...

  2. JDBC常用连接写法(包括MySQL、Oracle、Sybase、SQLServer、DB2)

    本文引用自CKJ-CLARK<JDBC常用连接写法(包括MySQL.Oracle.Sybase.SQLServer.DB2)> http://apps.hi.baidu.com/share ...

  3. Oracle常用傻瓜问题1000问

    1. Oracle安装完成后的初始口令? internal/oracle sys/change_on_install system/manager scott/tiger sysman/oem_tem ...

  4. oracle 常用知识点整理

    转 :  oracle 常用知识点 原文链接:http://blog.csdn.net/weijiaxiaobao/article/details/51323573 Oracle 是一个庞大的系统,里 ...

  5. oracle存储过程和视图不存在,Oracle 创建存储过程 提示权限不足或者提示表和视图不存在问题...

    grant create view to hospital; --授予查询权限 grant select any table to hospital; --授予权限 grant select any ...

  6. oracle常用语句大全 来自csdn

    1. Oracle安装完成后的初始口令?  internal/oracle  sys/change_on_install  system/manager  scott/tiger  sysman/oe ...

  7. Oracle常用语句大全

    1. Oracle安装完成后的初始口令? internal/oracle sys/change_on_install system/manager scott/tiger sysman/oem_tem ...

  8. oracle常用sql语句

    – 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba –然后,解除对scott用户的锁 alter user scott account unlock; ...

  9. oracle常用口令

    1. Oracle安装完成后的初始口令?  internal/oracle  sys/change_on_install  system/manager  scott/tiger  sysman/oe ...

最新文章

  1. 2.sort 排序命令讲解
  2. 七、FFmpeg使用---X264静态库编入FFmpeg
  3. 【前端】前端笔试题 [1]
  4. mysql privileges
  5. 相机中影响成像质量的参数
  6. 业务运维:站在企业转型风口上的云智慧
  7. leetcode 28 实现strStr()
  8. android10LTE,Jelly 2:全球最小的Android 10 4G智能手机
  9. SQLService2012下载和安装
  10. java8steam流 filler_做有机硅,不懂英文哪能行?——赶紧收藏,说不定哪天就用到了!...
  11. 基于Springboot外卖系统01:技术构成+功能模块介绍
  12. php 方差函数,PHP应用:PHP基于方差和标准差计算学生成绩的稳定性示例
  13. android虚拟机运行app出现错误Unfortunately
  14. opc服务器变量为空,OPC客户机上浏览不到OPC服务器上的变量
  15. PHP 两个多维数组根据某个键的值进行组合排序的几种思路
  16. picpick尺子像素大小精度不够准确_picpick尺子像素大小精度不够准确_如何准确的按比例打印图纸...
  17. media在HTML中作用,web前端:关于css中@media的一些基本使用
  18. HG30-3a型数字式多功能校准仪
  19. ppt如何变成pdf
  20. springboot websocket 传递 头信息 协议头 token 的前后端解决方案

热门文章

  1. opencv 高反差保留算法
  2. sscanf一小用法
  3. cmd命令大全/cmd命令提示符大全
  4. 复数幂用java程序怎么求_蓝桥杯——复数幂 (2018JavaAB组第3题)
  5. 【clickhouse】ClickHouseException code: 225 ZooKeeper session has been expired
  6. 【Flink】 Flink 应用资源分配问题排查思路
  7. 【ElasticSearch】Es 源码之 CcrRestoreSourceService 源码解读
  8. 【nginx】nginx 简介 基本概念 介绍
  9. 【kafka】利用 InfoSphere Data Replication CDC for Kafka 实现高效数据复制
  10. notepad: 怎么在notepad里面,将字符串替换成换行