一. 存储过程

  1. 语法

  1. create or replace procedure procedureName(seqName varchar2)
  2. is
  3. /*声明变量*/
  4. n number(10);
  5. cursor cur is select * from tableName;
  6. /*用来放置游标中的一行*/
  7. cRow cur%rowtype;
  8.  
  9. begin
  10. /*变量赋值*/
  11. n := 5;
  12.  
  13. /*循环方式一*/
  14. for i in 1..n loop
  15. /*做点什么*/
  16. end loop;
  17.  
  18. /*循环方式二*/
  19. loop
  20. exit when n = 0;
  21. n := n - 1;
  22. end loop;
  23.  
  24. /*循环方式三*/
  25. while i < n loop
  26. exit;
  27. end loop;
  28.  
  29. /*游标用法一:隐式打开和关闭*/
  30. for c in cur loop
  31. /*做点什么*/
  32. end loop;
  33.  
  34. /*游标用法一:显式打开和关闭*/
  35. open cur;
  36. loop
  37. fetch cur into cRow;
  38. exit when cur%notfound;
  39. end loop;
  40. close cur;
  41.  
  42. /*修改游标的所在行*/
  43. update tableName set columnName=columnValue where current of cur;
  44.  
  45. /*判断*/
  46. if (n = 0) then
  47. /*动态执行sql语句*/
  48. execute immediate 'select '||seqName||'.nextval from dual' into n;
  49. else
  50. /*控制台输出*/
  51. dbms_output.put_line(n);
  52. end if;
  53.  
  54. commit;
  55. end procedureName;

二. 函数

  1. 常用函数

  1. to_char(timestamp, ''yyyy-mm-dd hh:mm:ss''):把 timestamp 转换成字符串
  2. length(字符串):计算字符串所占的字符长度,返回字符串长度
  3. instr(源字符串, 目标字符串, 开始位置, 第几次出现):在一个字符串中查找指定的字符,返回被查找到的指定的字符的位置。
  4. substr(字符串, 截取开始位置, 截取长度):返回截取的字
  5. decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值):它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。
  6. power(x,y):计算x^y次方
  7. to_number(字符串):将字符串转化为数字
  8. floor(数字):对给定的数字取整数位

  2. c2b函数:clob转blob 

  1. create or replace function c2b (b in clob default empty_clob())
  2. return blob
  3. is
  4. res blob;
  5. bLen number := dbms_lob.getlength(b);
  6. destOffset1 number := 1;
  7. srcOffset1 number := 1;
  8. amountC integer := dbms_lob.lobmaxsize;
  9. blobCsid number := dbms_lob.default_csid;
  10. langCtx integer := dbms_lob.default_lang_ctx;
  11. warning integer;
  12. begin
  13. if bLen > 0 then
  14. dbms_lob.createtemporary(res, true);
  15. dbms_lob.open(res, dbms_lob.lob_readwrite);
  16. dbms_lob.convertToBlob(res, b, amountC, destOffset1, srcOffset1, blobCsid, langCtx, warning );
  17. else
  18. select empty_blob() into res from dual;
  19. end if;
  20.  
  21. return res;
  22. end c2b;

  3. hexToDec函数:十六进制字符串转数值型字符串

  1. create or replace function hexToDec(icHex in varchar2)
  2. return varchar2
  3. is
  4. iDecimal integer;
  5. cNewHex varchar2(1);
  6. iHexLen integer;
  7. result integer;
  8. begin
  9. result :=0;
  10. iHexLen := length(icHex);
  11. for i in 1..iHexLen loop
  12. cNewHex :=substr(icHex,iHexLen - i + 1,1);
  13. select decode(cNewHex,'A',10,'B',11,'C',12,'D',13,'E',14,'F',15,to_number(cNewHex))
  14. into iDecimal from dual;
  15. result := result + iDecimal * power(16,(i-1));
  16. end loop;
  17. return(to_char(result));
  18. end hexToDec;

  4. decToHex函数:数值型字符串转十六进制字符串

  1. create or replace function decToHex(iDecimal in varchar2)
  2. return varchar2
  3. is
  4. nDecimal integer;
  5. quotient integer;
  6. residue integer;
  7. result varchar2(50);
  8. begin
  9. nDecimal := to_number(iDecimal);
  10. loop
  11. quotient := floor(nDecimal/16);
  12. residue := nDecimal mod 16;
  13. select decode(residue,10,'A',11,'B',12,'C',13,'D',14,'E',15,'F',to_char(residue)) || result
  14. into result from dual;
  15. exit when quotient = 0;
  16. nDecimal := quotient;
  17. end loop;
  18. return(result);
  19. end decToHex;

  

  5. splitCount函数:查找字符串中包含指定字符的个数

  1. create or replace function splitCount (vSource in varchar2, vDelimiter in varchar2)
  2. return integer
  3. is
  4. j integer;
  5. i integer;
  6. len integer;
  7. delimLen integer;
  8. cnt integer;
  9. begin
  10. j := 0;
  11. i := 1;
  12. len := 0;
  13. delimLen := 0;
  14. cnt := 0;
  15. len := length(vSource);
  16. delimLen := length(vDelimiter);
  17.  
  18. while j < len loop
  19. j := instr(vSource, vDelimiter, i);
  20. if j = 0 then
  21. j := len;
  22. if i >= len then
  23. exit;
  24. end if;
  25. else
  26. i := j + delimLen;
  27. cnt := cnt+1;
  28. end if;
  29. end loop;
  30.  
  31. return cnt;
  32. end splitArrayLength;

  6. TRUNC():类似截取函数,按指定的格式截取输入的数据

  1. 1. 处理日期
  2. select trunc(sysdate) from dual;--2017/2/13,返回当前时间
  3. select trunc(sysdate,'yy') from dual;--2017/1/1,返回当年第一天
  4. select trunc(sysdate,'mm') from dual;--2017/2/1,返回当月的第一天
  5. select trunc(sysdate,'d') from dual;--2017/2/12,返回当前星期的第一天,即星期天
  6. select trunc(sysdate,'dd') from dual;--2017/2/13,返回当前日期,今天是2017/2/13
  7. select trunc(sysdate ,'HH24') from dual;--2017/2/13 15:00:00,返回本小时的开始时间
  8. select trunc(sysdate ,'MI') from dual;--2017/2/13 15:13:00,返回本分钟的开始时间
  9. select trunc(sysdate-5) from dual;--2017/2/8,返回前五天的时间
  10. select trunc(sysdate-interval'5'month,'mm') from dual;--2016/9/1,返回前5个月的第一天
  11. select trunc(sysdate-interval'5'year,'yy') from dual;--2012/1/1,返回前5年的第一天
  12. select trunc(sysdate)+1-1/86400 from dual;--2017/2/13 23:59:59,返回当天的最后一秒
  13.  
  14. 2. 处理number型数字,截取时并不对数据进行四舍五入
  15. select trunc(123.567,2) from dual;--123.56,将小数点右边指定位数后面的截去;
  16. select trunc(123.567,-2) from dual;--100,第二个参数可以为负数,表示将小数点左边指定位数后面的部分截去,即均以0记;
  17. select trunc(123.567) from dual;--123,默认截去小数点后面的部分;

三. 序列

  1. 创建序列

  1. create sequence seqEmp
  2. minvalue 0
  3. maxvalue 99999999
  4. start with 1
  5. increment by 1
  6. nocache;

  

  2. seqReset存储过程:重置序列

  1. create or replace procedure seqReset(vSeqName varchar2)
  2. is
  3. n number(10);
  4. tSql varchar2(100);
  5. begin
  6. execute immediate 'select '||vSeqName||'.nextval from dual' into n;
  7. n:=-n;
  8. tSql:='alter sequence '||vSeqName||' increment by '||n;
  9. execute immediate tSql;
  10. execute immediate 'select '||vSeqName||'.nextval from dual' into n;
  11. tSql:='alter sequence '||vSeqName||' increment by 1';
  12. execute immediate tSql;
  13. end seqReset;

四. 包

  1. base_convert:常用类型转换函数包

    a. 包头

  1. CREATE OR REPLACE PACKAGE base_convert AS
  2.  
  3. FUNCTION hex_to_dec (hexin IN VARCHAR2) RETURN NUMBER;
  4. PRAGMA restrict_references (HEX_TO_DEC,WNDS,RNDS,WNPS,WNPS);
  5.  
  6. FUNCTION dec_to_hex (decin IN NUMBER) RETURN VARCHAR2;
  7. PRAGMA restrict_references (DEC_TO_HEX,WNDS,RNDS,WNPS,WNPS);
  8.  
  9. FUNCTION oct_to_dec (octin IN NUMBER) RETURN NUMBER;
  10. PRAGMA restrict_references (OCT_TO_DEC,WNDS,RNDS,WNPS,WNPS);
  11.  
  12. FUNCTION dec_to_oct (decin IN NUMBER) RETURN VARCHAR2;
  13. PRAGMA restrict_references (DEC_TO_OCT,WNDS,RNDS,WNPS,WNPS);
  14.  
  15. FUNCTION bin_to_dec (binin IN NUMBER) RETURN NUMBER;
  16. PRAGMA restrict_references (BIN_TO_DEC,WNDS,RNDS,WNPS,WNPS);
  17.  
  18. FUNCTION dec_to_bin (decin IN NUMBER) RETURN VARCHAR2;
  19. PRAGMA restrict_references (DEC_TO_BIN,WNDS,RNDS,WNPS,WNPS);
  20.  
  21. FUNCTION hex_to_bin (hexin IN VARCHAR2) RETURN NUMBER;
  22. PRAGMA restrict_references (HEX_TO_BIN,WNDS,RNDS,WNPS,WNPS);
  23.  
  24. FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR2;
  25. PRAGMA restrict_references (BIN_TO_HEX,WNDS,RNDS,WNPS,WNPS);
  26.  
  27. FUNCTION oct_to_bin (octin IN NUMBER) RETURN NUMBER;
  28. PRAGMA restrict_references (OCT_TO_BIN,WNDS,RNDS,WNPS,WNPS);
  29.  
  30. FUNCTION bin_to_oct (binin IN NUMBER) RETURN NUMBER;
  31. PRAGMA restrict_references (BIN_TO_OCT,WNDS,RNDS,WNPS,WNPS);
  32.  
  33. FUNCTION oct_to_hex (octin IN NUMBER) RETURN VARCHAR2;
  34. PRAGMA restrict_references (OCT_TO_HEX,WNDS,RNDS,WNPS,WNPS);
  35.  
  36. FUNCTION hex_to_oct (hexin IN VARCHAR2) RETURN NUMBER;
  37. PRAGMA restrict_references (HEX_TO_OCT,WNDS,RNDS,WNPS,WNPS);
  38.  
  39. END base_convert;

    b. 包体

  1. CREATE OR REPLACE PACKAGE BODY base_convert AS
  2.  
  3. FUNCTION hex_to_dec (hexin IN VARCHAR2) RETURN NUMBER IS
  4. v_charpos NUMBER;
  5. v_charval CHAR(1);
  6. v_return NUMBER DEFAULT 0;
  7. v_power NUMBER DEFAULT 0;
  8. v_string VARCHAR2(2000);
  9. BEGIN
  10. v_string := UPPER(hexin);
  11. v_charpos := LENGTH(v_string);
  12. WHILE v_charpos > 0 LOOP
  13. v_charval := SUBSTR(v_string,v_charpos,1);
  14. IF v_charval BETWEEN '' AND '' THEN
  15. v_return := v_return + TO_NUMBER(v_charval) * POWER(16,v_power);
  16. ELSE
  17. IF v_charval = 'A' THEN
  18. v_return := v_return + 10 * POWER(16,v_power);
  19. ELSIF v_charval = 'B' THEN
  20. v_return := v_return + 11 * POWER(16,v_power);
  21. ELSIF v_charval = 'C' THEN
  22. v_return := v_return + 12 * POWER(16,v_power);
  23. ELSIF v_charval = 'D' THEN
  24. v_return := v_return + 13 * POWER(16,v_power);
  25. ELSIF v_charval = 'E' THEN
  26. v_return := v_return + 14 * POWER(16,v_power);
  27. ELSIF v_charval = 'F' THEN
  28. v_return := v_return + 15 * POWER(16,v_power);
  29. ELSE
  30. raise_application_error(-20621,'Invalid input');
  31. END IF;
  32. END IF;
  33. v_charpos := v_charpos - 1;
  34. v_power := v_power + 1;
  35. END LOOP;
  36. RETURN v_return;
  37. END hex_to_dec;
  38.  
  39. FUNCTION dec_to_hex (decin IN NUMBER) RETURN VARCHAR2 IS
  40. v_decin NUMBER;
  41. v_next_digit NUMBER;
  42. v_result varchar(2000);
  43. BEGIN
  44. v_decin := decin;
  45. WHILE v_decin > 0 LOOP
  46. v_next_digit := mod(v_decin,16);
  47. IF v_next_digit > 9 THEN
  48. IF v_next_digit = 10 THEN v_result := 'A' || v_result;
  49. ELSIF v_next_digit = 11 THEN v_result := 'B' || v_result;
  50. ELSIF v_next_digit = 12 THEN v_result := 'C' || v_result;
  51. ELSIF v_next_digit = 13 THEN v_result := 'D' || v_result;
  52. ELSIF v_next_digit = 14 THEN v_result := 'E' || v_result;
  53. ELSIF v_next_digit = 15 THEN v_result := 'F' || v_result;
  54. ELSE raise_application_error(-20600,'Untrapped exception');
  55. END IF;
  56. ELSE
  57. v_result := to_char(v_next_digit) || v_result;
  58. END IF;
  59. v_decin := floor(v_decin / 16);
  60. END LOOP;
  61. RETURN v_result;
  62. END dec_to_hex;
  63.  
  64. FUNCTION oct_to_dec (octin IN NUMBER) RETURN NUMBER IS
  65. v_charpos NUMBER;
  66. v_charval CHAR(1);
  67. v_return NUMBER DEFAULT 0;
  68. v_power NUMBER DEFAULT 0;
  69. v_string VARCHAR2(2000);
  70. BEGIN
  71. v_string := TO_CHAR(octin);
  72. v_charpos := LENGTH(v_string);
  73. WHILE v_charpos > 0 LOOP
  74. v_charval := SUBSTR(v_string,v_charpos,1);
  75. IF v_charval BETWEEN '' AND '' THEN
  76. v_return := v_return + TO_NUMBER(v_charval) * POWER(8,v_power);
  77. ELSE
  78. raise_application_error(-20621,'Invalid input');
  79. END IF;
  80. v_charpos := v_charpos - 1;
  81. v_power := v_power + 1;
  82. END LOOP;
  83. RETURN v_return;
  84. END oct_to_dec;
  85.  
  86. FUNCTION dec_to_oct (decin IN NUMBER) RETURN VARCHAR2 IS
  87. v_decin NUMBER;
  88. v_next_digit NUMBER;
  89. v_result varchar(2000);
  90. BEGIN
  91. v_decin := decin;
  92. WHILE v_decin > 0 LOOP
  93. v_next_digit := mod(v_decin,8);
  94. v_result := to_char(v_next_digit) || v_result;
  95. v_decin := floor(v_decin / 8);
  96. END LOOP;
  97. RETURN v_result;
  98. END dec_to_oct;
  99.  
  100. FUNCTION bin_to_dec (binin IN NUMBER) RETURN NUMBER IS
  101. v_charpos NUMBER;
  102. v_charval CHAR(1);
  103. v_return NUMBER DEFAULT 0;
  104. v_power NUMBER DEFAULT 0;
  105. v_string VARCHAR2(2000);
  106. BEGIN
  107. v_string := TO_CHAR(binin);
  108. v_charpos := LENGTH(v_string);
  109. WHILE v_charpos > 0 LOOP
  110. v_charval := SUBSTR(v_string,v_charpos,1);
  111. IF v_charval BETWEEN '' AND '' THEN
  112. v_return := v_return + TO_NUMBER(v_charval) * POWER(2,v_power);
  113. ELSE
  114. raise_application_error(-20621,'Invalid input');
  115. END IF;
  116. v_charpos := v_charpos - 1;
  117. v_power := v_power + 1;
  118. END LOOP;
  119. RETURN v_return;
  120. END bin_to_dec;
  121.  
  122. FUNCTION dec_to_bin (decin IN NUMBER) RETURN VARCHAR2 IS
  123. v_decin NUMBER;
  124. v_next_digit NUMBER;
  125. v_result varchar(2000);
  126. BEGIN
  127. v_decin := decin;
  128. WHILE v_decin > 0 LOOP
  129. v_next_digit := mod(v_decin,2);
  130. v_result := to_char(v_next_digit) || v_result;
  131. v_decin := floor(v_decin / 2);
  132. END LOOP;
  133. RETURN v_result;
  134. END dec_to_bin;
  135.  
  136. FUNCTION hex_to_bin (hexin IN VARCHAR2) RETURN NUMBER IS
  137. BEGIN
  138. RETURN dec_to_bin(hex_to_dec(hexin));
  139. END hex_to_bin;
  140.  
  141. FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR2 IS
  142. BEGIN
  143. RETURN dec_to_hex(bin_to_dec(binin));
  144. END bin_to_hex;
  145.  
  146. FUNCTION oct_to_bin (octin IN NUMBER) RETURN NUMBER IS
  147. BEGIN
  148. RETURN dec_to_bin(oct_to_dec(octin));
  149. END oct_to_bin;
  150.  
  151. FUNCTION bin_to_oct (binin IN NUMBER) RETURN NUMBER IS
  152. BEGIN
  153. RETURN dec_to_oct(bin_to_dec(binin));
  154. END bin_to_oct;
  155.  
  156. FUNCTION oct_to_hex (octin IN NUMBER) RETURN VARCHAR2 IS
  157. BEGIN
  158. RETURN dec_to_hex(oct_to_dec(octin));
  159. END oct_to_hex;
  160.  
  161. FUNCTION hex_to_oct (hexin IN VARCHAR2) RETURN NUMBER IS
  162. BEGIN
  163. RETURN dec_to_oct(hex_to_dec(hexin));
  164. END hex_to_oct;
  165.  
  166. END base_convert;

    c. 包中函数的调用,如:base_convert.hex_to_dec(hexString)

oracle存储过程、函数、序列、包的更多相关文章

  1. Oracle存储过程和程序包

    一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...

  2. oracle 过程函数,包的区别和联系

    一.过程与函数区别 1.过程可以有0~N个返回参数,通过OUT or IN OUT参数返回:函数有且仅有1个返回值,通过return语句返回. 2.调用过程时,可做为单独的语句执行:调用函数时,函数必 ...

  3. oracle存储过程函数

    1.函数 create or replace function get_Destroy_no return varchar2 is Result varchar2(50);begin SELECT m ...

  4. Oracle存储过程 函数 计算使用资源

    目录 存储过程与函数 存储过程的优势 存储过程 打印语句 选择语句 函数 计算使用资源 存储过程与函数 存储过程的优势 存储过程 /* 多行注释 */ -- 单行注释 //展示错误信息 show er ...

  5. hibernate调用oracle存储过程||函数

    pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().cre ...

  6. Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?

    Oracle中如何导出存储过程.函数.包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? QQ群里有人问:如何导出一个用户下的存储过程?   麦苗答:方法有多种,可以使用DBMS_MET ...

  7. oracle 存储过程,存储函数,包,

    http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过 ...

  8. oracle存储过程和存储函数&触发器

    oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 ...

  9. oracle中函数和存储过程的区别和联系【转载竹沥半夏】

    oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...

  10. oracle 存储过程 包 【转】

    一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...

随机推荐

  1. IOS 集成第三方登录

    我使用的是友盟上集成的第三方登录功能,一共使用了三个应用的登录授权,QQ.微信.新浪微博.由于第三方登录授权成功后,需要跳转到一个新的界面,所以这里需要在项目里设置第三方登录的SSO授权.就是必须安装 ...

  2. php中的常用数组函数(五)(数组中获取键名集合)

    array_keys($arr, $search_value, $strict); --数组中获取键名的集合. //参数1 要检索的数组:参数2 要检索的键值 默认NULL: 参数3 是否严格比较(= ...

  3. linux下安装redis的详细过程

    先安装一些组件: yum -y install gcc gcc-c++ libstdc++-devel 下载并安装: # wget http://download.redis.io/releases/ ...

  4. Java一步一步构建web系统 在IDEA下用Maven搭建多模块项目

    1.需求 做一个项目会有很多模块,主要是方便复用,通过各个模块之间聚合.模块也可以独立出来,如公用类库,也可以在做其它项目中使用.该文的实例会有两个模块:分别为dallin-web模块,dallin- ...

  5. vsftp "上传 553 Could not create file"

    我在LINUX下VSftp建立一个FTP服务器,但从WINDOWS使用FTP时,无法上传也无法下载!出错如下 ftp>; ls 200 PORT command successful. Cons ...

  6. Ionic 开发环境搭建

    android sdk环境搭建并非易事,本人经过无数失败,才使用以下方式成功 配置Ionic 开发环境 1.下载JDK并配置Java运行环境 http://www.oracle.com/technet ...

  7. MP4和HR-HDTV压制教程

    写在前 几年前还没工作的时候,长期混迹于百度“恐怖片吧”和“电锯惊魂吧”.因喜欢看电影,也自学了RMVB内嵌字幕的压制. 偶然机会加入@谢耳朵字幕组,因RMVB过于陈旧,人人影视所有美剧也全面抛弃了R ...

  8. sizzle源码分析 (1)sizzle架构

    sizzle是jquery的核心,它用来选择匹配的元素,其代码包含在一个匿名函数中,并以window作为其上下文环境: (function( window, undefined ) { //此处为si ...

  9. javascript对象继承详解

    问题 比如我们有一个"动物"对象的构造函数. function animal() { this.type = '动物'; } 还有一个"猫"对象的构造函数. f ...

  10. SharePoint 2013 通过HttpModule 管理视图权限

    HttpModule工作原理 HttpModule负责监听HttpRequest,当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任 ...