博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle有关游标的知识
阅读量:5135 次
发布时间:2019-06-13

本文共 2664 字,大约阅读时间需要 8 分钟。

一:前言

      今天我自己第二次写游标,我擦,觉得自己在数据库方面需要很大的提高啊。今天遇到三个问题,第一个是oracle数据库中的数据拆分的问题,这个我用regexp_substr来进行解决,第二个问题就是regexp_substr里面的参数,我没有成功的用select语句进行代替(我现在还不知道)。第三个是我写完游标竟然不知道怎么讲获取的值返回。苍天啊,大地啊。

下面进行详细说明;

 

二:

     1、regexp_substr函数

           REGEXP_SUBSTR(String, pattern, position, occurrence, modifier):

          第一个参数:是需要进行匹配的字符串;

     第二个参数:进行匹配的正则表达式;

          第三个参数:起始位置,从第几个字符开始进行正则表达式的匹配。(默认为1)

          第四个参数:表示匹配的第几个。默认也为1;

          第五个参数:模式(“i”表示不区分大小写进行检索,"c"是区分大小写进行检索。默认的是“c”);

 

 

    

然后就是获取到我们自己想要查分后的结果:

上面的拆分就说到这,基本上就是照葫芦画瓢吧。

2、就是我想说的我想把那个第一个参数string用select 语句改写,但是没有改写成功。

select regexp_substr('3W,3X,5,57,58,0','[^,]+',1,level,'i') as str from dual connect by level <=length('3W,3X,5,57,58,0')-length(REGEXP_REPLACE('3W,3X,5,57,58,0',',',''))+1;

结果失败了。希望谁要是成功了告诉我下。

3、就是我现在得到了我想要的结果后,我们根据这拆分的数据在进行循环查询得到我们想要的数据,我得到是把循环的数据连载一起以字符串的形式返回。

所以这里我又要用到游标进行循环。

先给出错误的代码,那时我只是先写了游标,自己不知道怎么返create or replace function get_bclb(str in varchar2,v_group_code in varchar2)

create or replace function get_bclb(str in varchar2,v_group_code in varchar2)return varchar2 is v_names varchar2(4000);declare v_code pf_common_config.code%TYPE;n varchar2(2000);   CURSOR c_cursor    is   select regexp_substr(str,'[^,]+',1,level,'i') as str from dual connect by level <=length(str)-length(REGEXP_REPLACE(str,',',''))+1;begin      open c_cursor;     loop       fetch c_cursor into v_code;       exit when c_cursor%NOTFOUND;       select c.name into n from pf_common_config c where c.code = v_code and c.group_code = 'BCLB';   --  DBMS_OUTPUT.PUT_LINE('转换后的数据:'|| v_code||'='||n);     v_names := v_names ||n||',';     end loop;     close c_cursor;   --   DBMS_OUTPUT.PUT_LINE('转换后的数据:'||v_names);    return v_names;     end get_bclb;

 

 

最后修改成功的代码是:

create or replace function get_bclb(str in varchar2,v_group_code in varchar2)return varchar2 isv_names varchar2(4000);n varchar2(2000);v_code varchar2(100); CURSOR c_cursor isselect regexp_substr(str,'[^,]+',1,level,'i') as str from dualconnect by level <= length(str) - length(REGEXP_REPLACE(str,',',''))+1;begin     open c_cursor;     loop       fetch c_cursor into v_code;       exit when c_cursor%NOTFOUND;       select c.name into n from pf_common_config c where c.code = v_code and c.group_code = v_group_code;   --  DBMS_OUTPUT.PUT_LINE('转换后的数据:'|| v_code||'='||n);     v_names := v_names ||n||',';     end loop;     close c_cursor;   --   DBMS_OUTPUT.PUT_LINE('转换后的数据:'||v_names);   return v_names;end get_bclb;

几天还有个函数:在计算年龄是用到了,自己就去查了下。Trunc((sysdate-csrq)/365,0) as age,这里就表是取整,如果是Trunc((sysdate-csrq)/365,2) 就表示两位小数。

 

三:自己现在在实习,每天虽然做的事情不是很多,我现在在做报表,但是我还是觉得自己是码农啊,这不是我想干的,我想学很多我自己不会的知识,而不只是在这天天敲代码。努力加油。学习,最近去学学Android吧。Go!Go!Go!

 

转载于:https://www.cnblogs.com/wuhao1991/p/3895192.html

你可能感兴趣的文章
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
AS3优化性能笔记二
查看>>
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>