oracle存储过程、函数、序列、包
一. 存储过程
1. 语法
- create or replace procedure procedureName(seqName varchar2)
- is
- /*声明变量*/
- n number(10);
- cursor cur is select * from tableName;
- /*用来放置游标中的一行*/
- cRow cur%rowtype;
- begin
- /*变量赋值*/
- n := 5;
- /*循环方式一*/
- for i in 1..n loop
- /*做点什么*/
- end loop;
- /*循环方式二*/
- loop
- exit when n = 0;
- n := n - 1;
- end loop;
- /*循环方式三*/
- while i < n loop
- exit;
- end loop;
- /*游标用法一:隐式打开和关闭*/
- for c in cur loop
- /*做点什么*/
- end loop;
- /*游标用法一:显式打开和关闭*/
- open cur;
- loop
- fetch cur into cRow;
- exit when cur%notfound;
- end loop;
- close cur;
- /*修改游标的所在行*/
- update tableName set columnName=columnValue where current of cur;
- /*判断*/
- if (n = 0) then
- /*动态执行sql语句*/
- execute immediate 'select '||seqName||'.nextval from dual' into n;
- else
- /*控制台输出*/
- dbms_output.put_line(n);
- end if;
- commit;
- end procedureName;
二. 函数
1. 常用函数
- to_char(timestamp, ''yyyy-mm-dd hh:mm:ss''):把 timestamp 转换成字符串
- length(字符串):计算字符串所占的字符长度,返回字符串长度
- instr(源字符串, 目标字符串, 开始位置, 第几次出现):在一个字符串中查找指定的字符,返回被查找到的指定的字符的位置。
- substr(字符串, 截取开始位置, 截取长度):返回截取的字
- decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值):它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。
- power(x,y):计算x^y次方
- to_number(字符串):将字符串转化为数字
- floor(数字):对给定的数字取整数位
2. c2b函数:clob转blob
- create or replace function c2b (b in clob default empty_clob())
- return blob
- is
- res blob;
- bLen number := dbms_lob.getlength(b);
- destOffset1 number := 1;
- srcOffset1 number := 1;
- amountC integer := dbms_lob.lobmaxsize;
- blobCsid number := dbms_lob.default_csid;
- langCtx integer := dbms_lob.default_lang_ctx;
- warning integer;
- begin
- if bLen > 0 then
- dbms_lob.createtemporary(res, true);
- dbms_lob.open(res, dbms_lob.lob_readwrite);
- dbms_lob.convertToBlob(res, b, amountC, destOffset1, srcOffset1, blobCsid, langCtx, warning );
- else
- select empty_blob() into res from dual;
- end if;
- return res;
- end c2b;
3. hexToDec函数:十六进制字符串转数值型字符串
- create or replace function hexToDec(icHex in varchar2)
- return varchar2
- is
- iDecimal integer;
- cNewHex varchar2(1);
- iHexLen integer;
- result integer;
- begin
- result :=0;
- iHexLen := length(icHex);
- for i in 1..iHexLen loop
- cNewHex :=substr(icHex,iHexLen - i + 1,1);
- select decode(cNewHex,'A',10,'B',11,'C',12,'D',13,'E',14,'F',15,to_number(cNewHex))
- into iDecimal from dual;
- result := result + iDecimal * power(16,(i-1));
- end loop;
- return(to_char(result));
- end hexToDec;
4. decToHex函数:数值型字符串转十六进制字符串
- create or replace function decToHex(iDecimal in varchar2)
- return varchar2
- is
- nDecimal integer;
- quotient integer;
- residue integer;
- result varchar2(50);
- begin
- nDecimal := to_number(iDecimal);
- loop
- quotient := floor(nDecimal/16);
- residue := nDecimal mod 16;
- select decode(residue,10,'A',11,'B',12,'C',13,'D',14,'E',15,'F',to_char(residue)) || result
- into result from dual;
- exit when quotient = 0;
- nDecimal := quotient;
- end loop;
- return(result);
- end decToHex;
5. splitCount函数:查找字符串中包含指定字符的个数
- create or replace function splitCount (vSource in varchar2, vDelimiter in varchar2)
- return integer
- is
- j integer;
- i integer;
- len integer;
- delimLen integer;
- cnt integer;
- begin
- j := 0;
- i := 1;
- len := 0;
- delimLen := 0;
- cnt := 0;
- len := length(vSource);
- delimLen := length(vDelimiter);
- while j < len loop
- j := instr(vSource, vDelimiter, i);
- if j = 0 then
- j := len;
- if i >= len then
- exit;
- end if;
- else
- i := j + delimLen;
- cnt := cnt+1;
- end if;
- end loop;
- return cnt;
- end splitArrayLength;
6. TRUNC():类似截取函数,按指定的格式截取输入的数据
- 1. 处理日期
- select trunc(sysdate) from dual;--2017/2/13,返回当前时间
- select trunc(sysdate,'yy') from dual;--2017/1/1,返回当年第一天
- select trunc(sysdate,'mm') from dual;--2017/2/1,返回当月的第一天
- select trunc(sysdate,'d') from dual;--2017/2/12,返回当前星期的第一天,即星期天
- select trunc(sysdate,'dd') from dual;--2017/2/13,返回当前日期,今天是2017/2/13
- select trunc(sysdate ,'HH24') from dual;--2017/2/13 15:00:00,返回本小时的开始时间
- select trunc(sysdate ,'MI') from dual;--2017/2/13 15:13:00,返回本分钟的开始时间
- select trunc(sysdate-5) from dual;--2017/2/8,返回前五天的时间
- select trunc(sysdate-interval'5'month,'mm') from dual;--2016/9/1,返回前5个月的第一天
- select trunc(sysdate-interval'5'year,'yy') from dual;--2012/1/1,返回前5年的第一天
- select trunc(sysdate)+1-1/86400 from dual;--2017/2/13 23:59:59,返回当天的最后一秒
- 2. 处理number型数字,截取时并不对数据进行四舍五入
- select trunc(123.567,2) from dual;--123.56,将小数点右边指定位数后面的截去;
- select trunc(123.567,-2) from dual;--100,第二个参数可以为负数,表示将小数点左边指定位数后面的部分截去,即均以0记;
- select trunc(123.567) from dual;--123,默认截去小数点后面的部分;
三. 序列
1. 创建序列
- create sequence seqEmp
- minvalue 0
- maxvalue 99999999
- start with 1
- increment by 1
- nocache;
2. seqReset存储过程:重置序列
- create or replace procedure seqReset(vSeqName varchar2)
- is
- n number(10);
- tSql varchar2(100);
- begin
- execute immediate 'select '||vSeqName||'.nextval from dual' into n;
- n:=-n;
- tSql:='alter sequence '||vSeqName||' increment by '||n;
- execute immediate tSql;
- execute immediate 'select '||vSeqName||'.nextval from dual' into n;
- tSql:='alter sequence '||vSeqName||' increment by 1';
- execute immediate tSql;
- end seqReset;
四. 包
1. base_convert:常用类型转换函数包
a. 包头
- CREATE OR REPLACE PACKAGE base_convert AS
- FUNCTION hex_to_dec (hexin IN VARCHAR2) RETURN NUMBER;
- PRAGMA restrict_references (HEX_TO_DEC,WNDS,RNDS,WNPS,WNPS);
- FUNCTION dec_to_hex (decin IN NUMBER) RETURN VARCHAR2;
- PRAGMA restrict_references (DEC_TO_HEX,WNDS,RNDS,WNPS,WNPS);
- FUNCTION oct_to_dec (octin IN NUMBER) RETURN NUMBER;
- PRAGMA restrict_references (OCT_TO_DEC,WNDS,RNDS,WNPS,WNPS);
- FUNCTION dec_to_oct (decin IN NUMBER) RETURN VARCHAR2;
- PRAGMA restrict_references (DEC_TO_OCT,WNDS,RNDS,WNPS,WNPS);
- FUNCTION bin_to_dec (binin IN NUMBER) RETURN NUMBER;
- PRAGMA restrict_references (BIN_TO_DEC,WNDS,RNDS,WNPS,WNPS);
- FUNCTION dec_to_bin (decin IN NUMBER) RETURN VARCHAR2;
- PRAGMA restrict_references (DEC_TO_BIN,WNDS,RNDS,WNPS,WNPS);
- FUNCTION hex_to_bin (hexin IN VARCHAR2) RETURN NUMBER;
- PRAGMA restrict_references (HEX_TO_BIN,WNDS,RNDS,WNPS,WNPS);
- FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR2;
- PRAGMA restrict_references (BIN_TO_HEX,WNDS,RNDS,WNPS,WNPS);
- FUNCTION oct_to_bin (octin IN NUMBER) RETURN NUMBER;
- PRAGMA restrict_references (OCT_TO_BIN,WNDS,RNDS,WNPS,WNPS);
- FUNCTION bin_to_oct (binin IN NUMBER) RETURN NUMBER;
- PRAGMA restrict_references (BIN_TO_OCT,WNDS,RNDS,WNPS,WNPS);
- FUNCTION oct_to_hex (octin IN NUMBER) RETURN VARCHAR2;
- PRAGMA restrict_references (OCT_TO_HEX,WNDS,RNDS,WNPS,WNPS);
- FUNCTION hex_to_oct (hexin IN VARCHAR2) RETURN NUMBER;
- PRAGMA restrict_references (HEX_TO_OCT,WNDS,RNDS,WNPS,WNPS);
- END base_convert;
b. 包体
- CREATE OR REPLACE PACKAGE BODY base_convert AS
- FUNCTION hex_to_dec (hexin IN VARCHAR2) RETURN NUMBER IS
- v_charpos NUMBER;
- v_charval CHAR(1);
- v_return NUMBER DEFAULT 0;
- v_power NUMBER DEFAULT 0;
- v_string VARCHAR2(2000);
- BEGIN
- v_string := UPPER(hexin);
- v_charpos := LENGTH(v_string);
- WHILE v_charpos > 0 LOOP
- v_charval := SUBSTR(v_string,v_charpos,1);
- IF v_charval BETWEEN '' AND '' THEN
- v_return := v_return + TO_NUMBER(v_charval) * POWER(16,v_power);
- ELSE
- IF v_charval = 'A' THEN
- v_return := v_return + 10 * POWER(16,v_power);
- ELSIF v_charval = 'B' THEN
- v_return := v_return + 11 * POWER(16,v_power);
- ELSIF v_charval = 'C' THEN
- v_return := v_return + 12 * POWER(16,v_power);
- ELSIF v_charval = 'D' THEN
- v_return := v_return + 13 * POWER(16,v_power);
- ELSIF v_charval = 'E' THEN
- v_return := v_return + 14 * POWER(16,v_power);
- ELSIF v_charval = 'F' THEN
- v_return := v_return + 15 * POWER(16,v_power);
- ELSE
- raise_application_error(-20621,'Invalid input');
- END IF;
- END IF;
- v_charpos := v_charpos - 1;
- v_power := v_power + 1;
- END LOOP;
- RETURN v_return;
- END hex_to_dec;
- FUNCTION dec_to_hex (decin IN NUMBER) RETURN VARCHAR2 IS
- v_decin NUMBER;
- v_next_digit NUMBER;
- v_result varchar(2000);
- BEGIN
- v_decin := decin;
- WHILE v_decin > 0 LOOP
- v_next_digit := mod(v_decin,16);
- IF v_next_digit > 9 THEN
- IF v_next_digit = 10 THEN v_result := 'A' || v_result;
- ELSIF v_next_digit = 11 THEN v_result := 'B' || v_result;
- ELSIF v_next_digit = 12 THEN v_result := 'C' || v_result;
- ELSIF v_next_digit = 13 THEN v_result := 'D' || v_result;
- ELSIF v_next_digit = 14 THEN v_result := 'E' || v_result;
- ELSIF v_next_digit = 15 THEN v_result := 'F' || v_result;
- ELSE raise_application_error(-20600,'Untrapped exception');
- END IF;
- ELSE
- v_result := to_char(v_next_digit) || v_result;
- END IF;
- v_decin := floor(v_decin / 16);
- END LOOP;
- RETURN v_result;
- END dec_to_hex;
- FUNCTION oct_to_dec (octin IN NUMBER) RETURN NUMBER IS
- v_charpos NUMBER;
- v_charval CHAR(1);
- v_return NUMBER DEFAULT 0;
- v_power NUMBER DEFAULT 0;
- v_string VARCHAR2(2000);
- BEGIN
- v_string := TO_CHAR(octin);
- v_charpos := LENGTH(v_string);
- WHILE v_charpos > 0 LOOP
- v_charval := SUBSTR(v_string,v_charpos,1);
- IF v_charval BETWEEN '' AND '' THEN
- v_return := v_return + TO_NUMBER(v_charval) * POWER(8,v_power);
- ELSE
- raise_application_error(-20621,'Invalid input');
- END IF;
- v_charpos := v_charpos - 1;
- v_power := v_power + 1;
- END LOOP;
- RETURN v_return;
- END oct_to_dec;
- FUNCTION dec_to_oct (decin IN NUMBER) RETURN VARCHAR2 IS
- v_decin NUMBER;
- v_next_digit NUMBER;
- v_result varchar(2000);
- BEGIN
- v_decin := decin;
- WHILE v_decin > 0 LOOP
- v_next_digit := mod(v_decin,8);
- v_result := to_char(v_next_digit) || v_result;
- v_decin := floor(v_decin / 8);
- END LOOP;
- RETURN v_result;
- END dec_to_oct;
- FUNCTION bin_to_dec (binin IN NUMBER) RETURN NUMBER IS
- v_charpos NUMBER;
- v_charval CHAR(1);
- v_return NUMBER DEFAULT 0;
- v_power NUMBER DEFAULT 0;
- v_string VARCHAR2(2000);
- BEGIN
- v_string := TO_CHAR(binin);
- v_charpos := LENGTH(v_string);
- WHILE v_charpos > 0 LOOP
- v_charval := SUBSTR(v_string,v_charpos,1);
- IF v_charval BETWEEN '' AND '' THEN
- v_return := v_return + TO_NUMBER(v_charval) * POWER(2,v_power);
- ELSE
- raise_application_error(-20621,'Invalid input');
- END IF;
- v_charpos := v_charpos - 1;
- v_power := v_power + 1;
- END LOOP;
- RETURN v_return;
- END bin_to_dec;
- FUNCTION dec_to_bin (decin IN NUMBER) RETURN VARCHAR2 IS
- v_decin NUMBER;
- v_next_digit NUMBER;
- v_result varchar(2000);
- BEGIN
- v_decin := decin;
- WHILE v_decin > 0 LOOP
- v_next_digit := mod(v_decin,2);
- v_result := to_char(v_next_digit) || v_result;
- v_decin := floor(v_decin / 2);
- END LOOP;
- RETURN v_result;
- END dec_to_bin;
- FUNCTION hex_to_bin (hexin IN VARCHAR2) RETURN NUMBER IS
- BEGIN
- RETURN dec_to_bin(hex_to_dec(hexin));
- END hex_to_bin;
- FUNCTION bin_to_hex (binin IN NUMBER) RETURN VARCHAR2 IS
- BEGIN
- RETURN dec_to_hex(bin_to_dec(binin));
- END bin_to_hex;
- FUNCTION oct_to_bin (octin IN NUMBER) RETURN NUMBER IS
- BEGIN
- RETURN dec_to_bin(oct_to_dec(octin));
- END oct_to_bin;
- FUNCTION bin_to_oct (binin IN NUMBER) RETURN NUMBER IS
- BEGIN
- RETURN dec_to_oct(bin_to_dec(binin));
- END bin_to_oct;
- FUNCTION oct_to_hex (octin IN NUMBER) RETURN VARCHAR2 IS
- BEGIN
- RETURN dec_to_hex(oct_to_dec(octin));
- END oct_to_hex;
- FUNCTION hex_to_oct (hexin IN VARCHAR2) RETURN NUMBER IS
- BEGIN
- RETURN dec_to_oct(hex_to_dec(hexin));
- END hex_to_oct;
- END base_convert;
c. 包中函数的调用,如:base_convert.hex_to_dec(hexString)
oracle存储过程、函数、序列、包的更多相关文章
- Oracle存储过程和程序包
一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...
- oracle 过程函数,包的区别和联系
一.过程与函数区别 1.过程可以有0~N个返回参数,通过OUT or IN OUT参数返回:函数有且仅有1个返回值,通过return语句返回. 2.调用过程时,可做为单独的语句执行:调用函数时,函数必 ...
- oracle存储过程函数
1.函数 create or replace function get_Destroy_no return varchar2 is Result varchar2(50);begin SELECT m ...
- Oracle存储过程 函数 计算使用资源
目录 存储过程与函数 存储过程的优势 存储过程 打印语句 选择语句 函数 计算使用资源 存储过程与函数 存储过程的优势 存储过程 /* 多行注释 */ -- 单行注释 //展示错误信息 show er ...
- hibernate调用oracle存储过程||函数
pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().cre ...
- Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?
Oracle中如何导出存储过程.函数.包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? QQ群里有人问:如何导出一个用户下的存储过程? 麦苗答:方法有多种,可以使用DBMS_MET ...
- oracle 存储过程,存储函数,包,
http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过 ...
- oracle存储过程和存储函数&触发器
oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 ...
- oracle中函数和存储过程的区别和联系【转载竹沥半夏】
oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...
- oracle 存储过程 包 【转】
一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...
随机推荐
- IOS 集成第三方登录
我使用的是友盟上集成的第三方登录功能,一共使用了三个应用的登录授权,QQ.微信.新浪微博.由于第三方登录授权成功后,需要跳转到一个新的界面,所以这里需要在项目里设置第三方登录的SSO授权.就是必须安装 ...
- php中的常用数组函数(五)(数组中获取键名集合)
array_keys($arr, $search_value, $strict); --数组中获取键名的集合. //参数1 要检索的数组:参数2 要检索的键值 默认NULL: 参数3 是否严格比较(= ...
- linux下安装redis的详细过程
先安装一些组件: yum -y install gcc gcc-c++ libstdc++-devel 下载并安装: # wget http://download.redis.io/releases/ ...
- Java一步一步构建web系统 在IDEA下用Maven搭建多模块项目
1.需求 做一个项目会有很多模块,主要是方便复用,通过各个模块之间聚合.模块也可以独立出来,如公用类库,也可以在做其它项目中使用.该文的实例会有两个模块:分别为dallin-web模块,dallin- ...
- vsftp "上传 553 Could not create file"
我在LINUX下VSftp建立一个FTP服务器,但从WINDOWS使用FTP时,无法上传也无法下载!出错如下 ftp>; ls 200 PORT command successful. Cons ...
- Ionic 开发环境搭建
android sdk环境搭建并非易事,本人经过无数失败,才使用以下方式成功 配置Ionic 开发环境 1.下载JDK并配置Java运行环境 http://www.oracle.com/technet ...
- MP4和HR-HDTV压制教程
写在前 几年前还没工作的时候,长期混迹于百度“恐怖片吧”和“电锯惊魂吧”.因喜欢看电影,也自学了RMVB内嵌字幕的压制. 偶然机会加入@谢耳朵字幕组,因RMVB过于陈旧,人人影视所有美剧也全面抛弃了R ...
- sizzle源码分析 (1)sizzle架构
sizzle是jquery的核心,它用来选择匹配的元素,其代码包含在一个匿名函数中,并以window作为其上下文环境: (function( window, undefined ) { //此处为si ...
- javascript对象继承详解
问题 比如我们有一个"动物"对象的构造函数. function animal() { this.type = '动物'; } 还有一个"猫"对象的构造函数. f ...
- SharePoint 2013 通过HttpModule 管理视图权限
HttpModule工作原理 HttpModule负责监听HttpRequest,当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任 ...