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>(< ...
随机推荐
- core.net 创建coreclass 项目出现一些问题
错误如下: Project CoreTest does not have a lock file. Please run "dotnet restore" to generate ...
- C# 常用的工具方法
1.DateTime 转为Unix的long的时间戳 long orderTime = order.AddTime.ToUnixTimeStamp("Milliseconds"); ...
- [C++]油田(Oil Deposits)-用DFS求连通块
[本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...
- C语言编程程序的内存如何布局
重点关注以下内容: C语言程序在内存中各个段的组成 C语言程序连接过程中的特性和常见错误 C语言程序的运行方式 一:C语言程序的存储区域 由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过 ...
- Java开发环境配置(5)--Web 服务器--Tomcat--安装过程遇到的问题
1.参考例子:--- 怎样安装配置tomcat 8_百度经验https://jingyan.baidu.com/article/ff42efa91132a0c19e220208.html 安装与配置T ...
- Css - 精灵图
Css - 精灵图css sprite 一个页面文档上总是会有N多的图标小图片,它们都是以背景图的方式嵌入文档,每个小图片需要一个url的css属性,每个url都指向一个服务器地址的链接,每个链接都代 ...
- oracle查询语句 select a||','||b||','||c from table where a in('m','n')
查询table表中 字段a = m 或 n 时,a列,b列,c列的值,并且这三列之间用 ","(逗号)分割. 追问:连接符的作用呢?就是显示的时候链接abc和中间的逗号么?追答:| ...
- 【转】MySQL— 进阶
[转]MySQL— 进阶 目录 一.视图 二.触发器 三.函数 四.存储过程 五.事务 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需 ...
- 创建一个yum源,rpm安装二进制包
作者:邓聪聪 安装mariadb vi /etc/yum.repos.d/mariadb.repo [mariadb]name=mariadbbaseurl=http://mirrors.neusof ...
- requests库入门03-get请求
先看一个没有请求参数的get请求,访问百度首页 import requests r = requests.get('https://www.baidu.com') print(r.status_cod ...