functions 示例
示例1: “,”字符串截取
1 CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2, p_INDEX IN NUMBER)
2 RETURN varchar2
3 AS
4 v_length NUMBER := LENGTH(p_string);
5 v_start NUMBER := 1;
6 v_index NUMBER;
7 v_ret VARCHAR2(20);
8 v_count NUMBER := 1;
9 BEGIN
10 WHILE(v_start <= v_length)
11 LOOP
12 v_index := INSTR(p_string, p_delimiter, v_start);
13 v_ret := substr(p_string,v_start,v_index-1);
14 v_start := v_index+1;
15 IF v_count = p_index THEN
16 RETURN v_ret;
17 END IF;
18 v_count := v_count + 1;
19 END LOOP;
20
21 RETURN v_ret;
22 END splitstr;
示例2:解析分组函数
1 create or replace function resolve_group_sql(v_sql varchar2,in_flowCode varchar2,
2 in_nodesCode varchar2, in_workId varchar2, in_userId varchar2) return varchar2 is
3 /******************************************
4 解析分组函数
5 ***************************************/
6 Result varchar2(3000);
7 v_start INT;
8 v_start2 INT;
9 v_count INT;
10 v_count2 INT;
11 i_count INT;
12 v_tm_sql varchar2(3000);
13 v_tm_str varchar2(3000);
14 v_tm_code varchar2(200);
15 v_tm_code2 varchar2(200);
16 v_value varchar2(30);
17 begin
18 v_tm_sql:=v_sql;
19 /* i_count:=0;
20 while (instr(v_tm_sql,'{')>0) loop
21 v_start:=instr(v_tm_sql,'{')+1;
22 v_count:=instr(v_tm_sql,'}')- v_start;
23 v_tm_code:=substr(v_tm_sql,v_start,v_count);
24 i_count:=i_count+1;
25
26 v_tm_str:=v_tm_code;
27 while (instr(v_tm_str,'%[')>0) loop
28 v_start2:=instr(v_tm_str,'%[')+2;
29 v_count2:=instr(v_tm_str,']')- v_start2;
30 v_tm_code2:=substr(v_tm_str,v_start2,v_count2);
31 v_value:=get_constant_val(v_tm_code2);
32 v_tm_str:=replace(v_tm_str,'%['||v_tm_code2||']',v_value);
33 end loop;
34 select v_tm_str into v_value from dual;
35
36 v_tm_sql:=replace(v_tm_sql,'{'||v_tm_code||'}',v_value);
37
38 end loop;*/
39
40 --解析常量
41 i_count:=0;
42 while (instr(v_tm_sql,'%[')>0) loop
43 v_start:=instr(v_tm_sql,'%[')+2;
44 v_count:=get_end_pos(v_tm_sql,v_start)- v_start;
45 v_tm_code:=substr(v_tm_sql,v_start,v_count);
46 v_value:=get_constant_val(v_tm_code);
47 v_tm_sql:=replace(v_tm_sql,'%['||v_tm_code||']',v_value);
48 end loop;
49
50 --解析接口参数
51 i_count:=0;
52 while (instr(v_tm_sql,'&[')>0) loop
53 v_start:=instr(v_tm_sql,'&[')+2;
54 v_count:=get_end_pos(v_tm_sql,v_start)- v_start;
55 v_tm_code:=substr(v_tm_sql,v_start,v_count);
56 v_value:=get_param_val(v_tm_code,in_flowCode,in_nodesCode,in_workId,in_userId);
57 v_tm_sql:=replace(v_tm_sql,'&['||v_tm_code||']',v_value);
58 end loop;
59
60 --去掉{}符号
61 v_tm_sql:=replace(v_tm_sql,'{','');
62 v_tm_sql:=replace(v_tm_sql,'}','');
63
64 Result:=v_tm_sql;
65 return(Result);
66 end resolve_group_sql;
67
示例3:获取主键id
1 CREATE OR REPLACE FUNCTION NEXTID(NOID_ IN VARCHAR2) RETURN NUMBER AS
2 PRAGMA AUTONOMOUS_TRANSACTION;
3 RESULT NUMBER; --返回结果
4 IS_EXIST NUMBER; --是否存在,0 不尊在 1 存在
5 BEGIN
6 -- 判断非空
7 IF NOID_ IS NULL OR NOID_ = '' THEN
8 RETURN NULL;
9 END IF;
10 --判断是否存在序列 NOID
11
12 SELECT COUNT(*) INTO IS_EXIST FROM PWP_NO WHERE NOID = NOID_;
13 IF IS_EXIST = 1 THEN
14 -- 存在主表信息
15 SELECT COUNT(*) INTO IS_EXIST FROM PWP_NODTL WHERE NOID = NOID_;
16 IF IS_EXIST = 1 THEN
17 -- 存在明细表信息,查询需要的结果
18 SELECT NEXTID INTO RESULT FROM PWP_NODTL WHERE NOID = NOID_;
19 -- 更新nextid为下一个id
20 UPDATE PWP_NODTL SET NEXTID = NEXTID + 1 WHERE NOID = NOID_;
21 ELSIF IS_EXIST = 0 THEN
22 --不存在明细表信息,明细表插入数据,nextid设置为2,返回1
23 INSERT INTO PWP_NODTL
24 (NOID,
25 PREFIX,
26 NODAY,
27 NEXTID,
28 POSTFIX,
29 NOINCREMENT,
30 NOYEAR,
31 NOMONTH)
32 VALUES
33 (NOID_,
34 NULL,
35 0,
36 2,
37 NULL,
38 1,
39 TO_CHAR(SYSDATE, 'yyyy'),
40 TO_CHAR(SYSDATE, 'MM'));
41
42 RESULT := 1;
43 END IF;
44 END IF;
45
46 -- 提交
47 COMMIT;
48 --返回
49 RETURN(RESULT);
50 END NEXTID;
51
示例4:拼接字符串“,”
1 create or replace function GET_YKJF_YKJHID( v_zbz_bal_id in number,
2 v_gk_ykjhsphz_id in number)
3 return varchar2 is
4 result varchar2(4000);
5 begin
6
7 if v_zbz_bal_id is not null and v_gk_ykjhsphz_id is not null then
8 for temp_cursor in (select distinct zc.id
9 from gk_ykjh zc, gk_ykjh_mx zcm,gk_ykjh_sphz_mx zsm
10 where zc.id = zcm.gk_ykjh_id
11 and zsm.gk_ykjh_id=zc.id
12 and zcm.zbz_bal_id = v_zbz_bal_id
13 and zsm.gk_ykjhsphz_id = v_gk_ykjhsphz_id
14 order by zc.id) loop
15 result := result || temp_cursor.id || ',';
16 end loop;
17 result := rtrim(result, ',');
18
19
20 -----------------------------------------------------------------------------------------------
21
22 else
23 result := '';
24 end if;
25 dbms_output.put_line(result);
26 return result;
27 end;
28
1 create or replace function get_var_val(in_code varchar2, in_pid VARCHAR2, v_sql varchar2, in_group_id varchar2,
2 vartype in number, null_value in varchar2,in_flowCode varchar2, in_nodesCode varchar2,
3 in_workId varchar2, in_userId varchar2) return varchar2 is
4 /******************************************
5 获取取数函数
6 ***************************************/
7 Result varchar2(200);
8 type emp_array is Table OF varchar2(200) INDEX BY BINARY_INTEGER;
9 TYPE CURSOR_TYPE IS REF CURSOR; --声明动态游标
10 my_cursor CURSOR_TYPE; --声明游标变量
11 a_field_params emp_array; -- 取数sql中的分组字段数组
12 a_group_name emp_array; -- 取数sql中的分组字段数组
13 a_group_type emp_array; -- 取数sql中的分组字段类型
14 a_group_value emp_array; -- 取数sql中的分组字段数组
15 a_var_params emp_array; --取数代码数组
16 a_var_values emp_array; --取数代码值数组
17 cursor_handle INTEGER;
18 tmp_return INTEGER;
19 v_start INT;
20 v_count INT;
21 i_count INT;
22 v_tm_sql varchar2(1000);
23 v_tm_code varchar2(30);
24 v_value varchar2(200);
25 v_error_msg varchar2(4000);
26 begin
27 v_tm_sql:=v_sql;
28 i_count:=0;
29 while (instr(v_tm_sql,'#[')>0) loop
30 v_start:=instr(v_tm_sql,'#[')+2;
31 v_count:=get_end_pos(v_tm_sql,v_start)- v_start;
32 v_tm_code:=substr(v_tm_sql,v_start,v_count);
33
34 /* open my_cursor for 'SELECT T.GVALUE FROM zz_tmp_variable T WHERE T.group_id = '''||in_group_id||'''' ||' and T.CODE = '''||v_tm_code||'''';
35 loop
36 fetch my_cursor into v_value;
37 exit when my_cursor%notfound;
38 end loop;
39 close my_cursor;*/
40
41 SELECT T.GVALUE into v_value FROM zz_tmp_variable T
42 WHERE T.group_id =in_group_id
43 and T.CODE = v_tm_code and rownum=1
44 AND T.PID=in_pid ;
45
46 if v_value='null' then
47 Result:='null';
48 return(Result);
49 end if;
50 v_tm_sql:=replace(v_tm_sql,'#['||v_tm_code||']',':'||v_tm_code);
51 i_count:=i_count+1;
52 a_var_params(i_count):=v_tm_code;
53 a_var_values(i_count):=v_value;
54 end loop;
55
56 --解析SQL中的分组字段start
57 --去掉'.'符号,若不去掉绑定变量的时候会找不到变量start
58 i_count:=0;
59 while (instr(v_tm_sql,'$[')>0) loop
60 v_start:=instr(v_tm_sql,'$[')+2;
61 v_count:=get_end_pos(v_tm_sql,v_start)- v_start;
62 v_tm_code:=substr(v_tm_sql,v_start,v_count);
63 i_count:=i_count+1;
64 v_tm_sql:=replace(v_tm_sql,'$['||v_tm_code||']',':'||replace(v_tm_code,'.',''));
65 a_field_params(i_count):=replace(v_tm_code,'.','');
66 end loop;
67 --去掉'.'符号,若不去掉绑定变量的时候会找不到变量end
68
69 select t.value1,t.value2,t.value3,t.value4,t.value5,t.value6,t.value7,t.value8,t.value9,t.value10
70 into a_group_value(1),a_group_value(2),a_group_value(3),a_group_value(4),a_group_value(5)
71 ,a_group_value(6),a_group_value(7),a_group_value(8),a_group_value(9),a_group_value(10)
72 from zz_tmp_group t where t.id=in_group_id and t.pid=in_pid;
73
74 select t.name1,t.name2 ,t.name3,t.name4,t.name5,t.name6,t.name7,t.name8,t.name9,t.name10
75 into a_group_name(1),a_group_name(2),a_group_name(3),a_group_name(4),a_group_name(5)
76 ,a_group_name(6),a_group_name(7),a_group_name(8),a_group_name(9),a_group_name(10)
77 from zz_tmp_group t where t.id=in_group_id and t.pid=in_pid;
78
79 select t.type1,t.type2 ,t.type3,t.type4,t.type5,t.type6,t.type7,t.type8,t.type9,t.type10
80 into a_group_type(1),a_group_type(2),a_group_type(3),a_group_type(4),a_group_type(5)
81 ,a_group_type(6),a_group_type(7),a_group_type(8),a_group_type(9),a_group_type(10)
82 from zz_tmp_group t where t.id=in_group_id and t.pid=in_pid;
83
84 --解析SQL中的分组字段end
85
86 --解析常量
87 i_count:=0;
88 while (instr(v_tm_sql,'%[')>0) loop
89 v_start:=instr(v_tm_sql,'%[')+2;
90 v_count:=get_end_pos(v_tm_sql,v_start)- v_start;
91 v_tm_code:=substr(v_tm_sql,v_start,v_count);
92 v_value:=get_constant_val(v_tm_code);
93 v_tm_sql:=replace(v_tm_sql,'%['||v_tm_code||']',v_value);
94 end loop;
95
96 --去掉{}符号
97 v_tm_sql:=replace(v_tm_sql,'{','');
98 v_tm_sql:=replace(v_tm_sql,'}','');
99
100 --解析接口参数
101 i_count:=0;
102 while (instr(v_tm_sql,'&[')>0) loop
103 v_start:=instr(v_tm_sql,'&[')+2;
104 v_count:=get_end_pos(v_tm_sql,v_start)- v_start;
105 v_tm_code:=substr(v_tm_sql,v_start,v_count);
106 v_value:=get_param_val(v_tm_code,in_flowCode,in_nodesCode,in_workId,in_userId);
107 v_tm_sql:=replace(v_tm_sql,'&['||v_tm_code||']',v_value);
108 end loop;
109
110 --执行取数sql开始
111 cursor_handle := DBMS_SQL.OPEN_CURSOR;
112 dbms_sql.parse(cursor_handle,v_tm_sql,dbms_sql.native);
113
114 --替换绑定取数值start
115 for i in 1..a_var_params.count loop
116 dbms_sql.bind_variable(cursor_handle,a_var_params(i),a_var_values(i)) ;
117 end loop;
118 --替换绑定取数值end
119
120 i_count:=0;
121 for i in 1..a_group_name.count loop
122 if a_group_name(i) is not null then
123 i_count:=i_count+1;
124 end if;
125 end loop;
126
127 --绑定分组字段start
128 for i in 1..a_field_params.count loop
129 for j in 1..i_count loop
130 if a_field_params(i)=replace(a_group_name(j),'.','') then
131 if a_group_type(j)='date' then
132 dbms_sql.bind_variable(cursor_handle,a_field_params(i),to_date(a_group_value(j)));
133 else
134 dbms_sql.bind_variable(cursor_handle,a_field_params(i),a_group_value(j));
135 end if;
136
137 end if;
138 end loop;
139 end loop;
140 --绑定分组字段end
141
142
143
144 --绑定常量值start
145 /* for i in 1..a_constant.count loop
146 dbms_sql.bind_variable(cursor_handle,a_constant(i),get_constant_val(a_constant(i),v_constant_type)) ;
147 end loop;*/
148 --绑定常量值end
149
150 dbms_sql.define_column(cursor_handle, 1, Result,200);
151 tmp_return :=dbms_sql.EXECUTE(cursor_handle);
152 if dbms_sql.fetch_rows(cursor_handle)>0 then
153 dbms_sql.column_value(cursor_handle,1,Result);
154 end if;
155 if Result is null then
156 if null_value='1' then
157 Result:='null';
158 elsif null_value='2' then
159 Result:='0';
160 elsif null_value='3' then
161 Result:='';
162 end if;
163 end if;
164 if (vartype=3 ) then Result:=to_char(to_date(Result),'YYYY-MM-DD'); end if;
165 Result:=TO_CHAR(Result);
166 dbms_sql.close_cursor(cursor_handle);
167 --执行取数sql结束
168 return(Result);
169 exception when others then
170 v_error_msg:='取数编码:'||in_code||'解析出错 sqlerrm:'||substr(sqlerrm,1,3000);
171 DBMS_OUTPUT.PUT_LINE(v_error_msg);
172 Result:='null';
173 return result;
174
175 end get_var_val;
176
示例5:blob clob 之间的转化
1 CREATE OR REPLACE FUNCTION blob_to_varchar(
2 blob_in IN BLOB)
3 RETURN VARCHAR2
4 IS
5 v_varchar VARCHAR2(4000);
6 v_start Pls_Integer := 1;
7 v_buffer Pls_Integer := 4000;
8 BEGIN
9 IF Dbms_Lob.Getlength(blob_in) IS NULL THEN
10 RETURN '';
11 END IF;
12 FOR I IN 1..Ceil(Dbms_Lob.Getlength(blob_in) / V_Buffer)
13 LOOP
14 --当转换出来的字符串乱码时,可尝试用注释掉的函数
15 --v_varchar := Utl_Raw.Cast_To_Varchar2(Utl_Raw.Convert(Dbms_Lob.Substr(blob_in, v_buffer, v_start),'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', 'AMERICAN_THE NETHERLANDS.UTF8'));
16 v_varchar := Utl_Raw.Cast_To_Varchar2(Dbms_Lob.Substr(blob_in, v_buffer, v_start));
17 v_start := v_start + v_buffer;
18 END LOOP;
19 RETURN v_varchar;
20 END ;
21
1 CREATE OR REPLACE FUNCTION B2C(P_BLOB BLOB) RETURN CLOB AS
2 L_CLOB CLOB;
3 AMOUNT NUMBER;
4 DEST_OFFSET NUMBER;
5 SRC_OFFSET NUMBER;
6 BLOB_CSID NUMBER;
7 LANG_CONTEXT NUMBER;
8 WARNING NUMBER;
9 BEGIN
10 DBMS_LOB.CREATETEMPORARY(L_CLOB, TRUE);
11 AMOUNT := DBMS_LOB.GETLENGTH(P_BLOB);
12 DEST_OFFSET := 1;
13 SRC_OFFSET := 1;
14 BLOB_CSID := NLS_CHARSET_ID('UTF8');
15 LANG_CONTEXT := DBMS_LOB.DEFAULT_LANG_CTX;
16 DBMS_LOB.CONVERTTOCLOB(L_CLOB,
17 P_BLOB,
18 AMOUNT,
19 DEST_OFFSET,
20 SRC_OFFSET,
21 BLOB_CSID,
22 LANG_CONTEXT,
23 WARNING);
24 RETURN L_CLOB;
25 EXCEPTION
26 WHEN OTHERS THEN
27 RETURN NULL;
28 END;
29
1 CREATE OR REPLACE FUNCTION C2B(L_CLOB CLOB) RETURN BLOB IS
2 P_BLOB BLOB;
3 AMOUNT NUMBER;
4 DEST_OFFSET NUMBER;
5 SRC_OFFSET NUMBER;
6 BLOB_CSID NUMBER;
7 LANG_CONTEXT NUMBER;
8 WARNING NUMBER;
9 BEGIN
10
11 DBMS_LOB.CREATETEMPORARY(P_BLOB, TRUE);
12 AMOUNT := DBMS_LOB.GETLENGTH(L_CLOB);
13 DEST_OFFSET := 1;
14 SRC_OFFSET := 1;
15 BLOB_CSID := NLS_CHARSET_ID('UTF8');
16 LANG_CONTEXT := DBMS_LOB.DEFAULT_LANG_CTX;
17 DBMS_LOB.CONVERTTOBLOB(P_BLOB,
18 L_CLOB,
19 AMOUNT,
20 DEST_OFFSET,
21 SRC_OFFSET,
22 BLOB_CSID,
23 LANG_CONTEXT,
24 WARNING);
25 RETURN P_BLOB;
26 END C2B;
27
functions 示例的更多相关文章
- CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- CSS3与页面布局学习笔记(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- c++ namespace命名空间详解
What is a namespace? A namespace defines an area of code in which all identifiers are guaranteed to ...
- (cljs/run-at (JSVM. :all) "细说函数")
前言 作为一门函数式编程语言,深入了解函数的定义和使用自然是十分重要的事情,下面我们一起来学习吧! 3种基础定义方法 defn 定义语法 (defn name [params*] exprs*) 示 ...
- Scipy教程 - 优化和拟合库scipy.optimize
http://blog.csdn.net/pipisorry/article/details/51106570 最优化函数库Optimization 优化是找到最小值或等式的数值解的问题.scipy. ...
- 3D打印开源软件Cura分析(1) 【转】
http://www.sohu.com/a/236241465_100000368 Cura是Ultimaker公司开发的3D打印开源软件,在所有的3D打印开源软件中应属上乘之作,很有研究的价值.国内 ...
- freeswitch的拨号规则配置
当一个呼叫在ROUTING状态下达到命中拨号规则解析器时,相应的拨号规则就开始解析了.随着解析的进行,在xml文件中的符合条件的或标签中的指令形成一个指令表,安装到这个通道中. 你可以将拨号规则文件放 ...
- 详解tween.js 中文使用指南
补间(动画)是一个概念,允许你以平滑的方式更改对象的属性.你只需告诉它哪些属性要更改,当补间结束运行时它们应该具有哪些最终值,以及这需要多长时间,补间引擎将负责计算从起始点到结束点的值. 例如,pos ...
- (24)zabbix触发器表达式详解
概述 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: 1 {<server>:<key>.<function>(< ...
随机推荐
- 【SRM-06 D】五色战队&&【codeforces 788E】 New task
原题链接:788E - New task Description 游行寺家里人们的发色多种多样,有基佬紫.原谅绿.少女粉.高级黑.相簿白等. 日向彼方:吾令人观其气,气成五彩,此天子气也. 琉璃:我们 ...
- python中#!/usr/bin/env python与#!/usr/bin/python
通常在脚本语言的第一行会看到#!/usr/bin/env python 与 #!/usr/bin/python其中之一,这两句话的目的都是指出你的python文件用什么可执行程序去运行它. #!/us ...
- oracle.sql.TIMESTAMP转为java.sql.TIMESTAMP的方法
/** * @reference oracle.sql.Datum.timestampValue(); * @return */ private Timestamp getOracleTimestam ...
- JSP动态页面技术
1.JSP和html的区别 处理过程的区别 HTML 浏览器发送一个请求到服务器,服务器找到这个页面直接返回. JSP 浏览器发送一个请求道服务器,服务器判断到时.jsp结尾,去调用JSP引擎,JSP ...
- 【mmall】IDEA插件jrebel
破解方法 http://www.jianshu.com/p/87b11bad3d7f
- 转:MVC,MVP 和 MVVM 的图示
MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html 作者: 阮一峰 日期: 201 ...
- openstack Q版部署-----安装报错问题
1.实例开机提示找不到磁盘Booting from Hard Disk... GRUB. 开启 CPU 虚拟化支持. 将计算节点 nova.conf 配置修改如下即可: [libvirt] cpu_m ...
- linux 制作U盘启动,和定制系统
找到u盘的路径 fdisk -l 将镜像写入u盘 dd if=/root/Downloads/kali-linux-2017.1-amd64.iso of=/dev/sdc 定制U盘启动系统: 安装完 ...
- [转] 使用gc && objgraph 优化python内存
转自https://www.cnblogs.com/xybaby/p/7491656.html 使用gc.objgraph干掉python内存泄露与循环引用! 目录 一分钟版本 python内存管 ...
- ipconfig命令查ip的时候给别人看有危险吗
知识源:Unit 4: Networking 1 4.1 Networking 1 The Routing of a Packet 网址:https://www.baidu.com/link?url ...