一:前言

今天我自己第二次写游标,我擦,觉得自己在数据库方面需要很大的提高啊。今天遇到三个问题,第一个是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 is
v_names varchar2(4000);
n varchar2(2000);
v_code varchar2(100);
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 = 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!

oracle有关游标的知识的更多相关文章

  1. 设置ORACLE数据库游标大小

    先用超级管理员(sys)登陆服务器: sqlplus "sys/***@orcl as sysdba" 连接到:Oracle 查看ORACLE最大游标数: SQL> show ...

  2. Oracle使用游标为所有用户表添加主键语句

    应用场合:数据表新增自增一主键能加快数据表的访问速度,而且是整形的索引速度最快.本程序适合在导入Oracle数据库时删除不存在主键的情况下运行. 代码说明:所有的表主键字段名都设置为ID,如果已存在I ...

  3. Oracle使用游标查询指定数据表的所有字段名称组合而成的字符串

    应用场合:参考网上查询数据表的所有字段名代码,使用游标生成指定单个表的所有字段名跟逗号组成的用于select  逗号隔开的字段名列表 from字符串等场合. 查询结果输出如下: 当前数据表TB_UD_ ...

  4. Oracle使用游标删除所有用户数据表中的所有记录脚本

    应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自 ...

  5. Oracle树形结构数据-相关知识总结

    Oracle树形结构数据--基本知识 1.数据组成 2.基本查询 2.1.查询某节点及该节点下的所有子孙节点 SELECT   *      FROM QIANCODE.TREE_TABLE_BASI ...

  6. Oracle最大游标数控制

    /************************************************************************ ********* Oracle最大游标数控制 ** ...

  7. Oracle PLSQL游标、游标变量的使用

    参考文章:https://www.cnblogs.com/huyong/archive/2011/05/04/2036377.html 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实 ...

  8. Oracle使用游标查询所有数据表备注

    功能作用:应用对应的SQL语句,能方便快速的查询Oracle数据库指定用户的所有用户表说明,快速知道每个数据表是做什么的,方便写文档和方案. 运行环境:搭建好Oracle数据库,并使用PQ/SQL D ...

  9. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

随机推荐

  1. Plsql developer 怎么在打开时登陆配置oracel client?

    配置前 logon 这块是空白的,该怎么配置呢? 看下面 --> 安装完plsql 后 需要安装 oracle client, 这里不再赘述,请自行百度.下面将贴出如何使用 oracle cli ...

  2. webapi到处excel

    最近项目用的webapi前几天做了个导出excel功能,给大家分享下,自己也记录下... 在用的过程中,可以直接请求就可以得到下载的excel文件,在实际的项目中可以通过js打开新页面,encodeU ...

  3. laravel+vue结合使用

        SegmentFault 首页 问答 专栏 讲堂 圈子 发现 搜索 立即登录免费注册 在 SegmentFault,学习技能.解决问题 每个月,我们帮助 1000 万的开发者解决各种各样的技术 ...

  4. jqgrid-parmNames和jsonReader的使用,以及json的返回格式(转)

    prmNames : { page:"page",    // 表示请求页码的参数名称 rows:"rows",    // 表示请求行数的参数名称 sort: ...

  5. 「日常训练」Mike and Feet(Codeforces Round #305 Div. 2 D)

    题意 (Codeforces 548D) 对一个有$n$个数的数列,我们要求其连续$x(1\le x\le n)$(对于每个$x$,这样的连续group有若干个)的最小数的最大值. 分析 这是一道用了 ...

  6. 基于阿里云服务器Linux系统部署JavaWeb项目

    前段时间刚完成一个JavaWeb项目,想着怎么部署到服务器上,边学边做,花了点时间终于成功部署了,这里总结记录一下过程中所遇到的问题及解决方法.之所以选择阿里云,考虑到它是使用用户最多也是最广泛的云服 ...

  7. Nginx 配置 HTTPS自签名证书

    工具: OpenSSL ssl的开源实现,几乎实现了市面上所有的加密 libcrypto: 通用加密库, 任何软件要实现加密功能 链接调用这个库 libssl: TLS/SSL 加密库 openssl ...

  8. cmd命令笔记

    查看端口信息:netstat -ano eg. netstat -ano|findstr 0.0.0.0:443 根据pid查看进程信息等:wmic process get name,executab ...

  9. 浅谈c语言和c++中struct的区别

    今天做二叉树的时候,发现利用结构体有点乱,不知道怎么回事,我之前知道c语言中声明一个结构体变量时需要通过 struct 结构体名 变量名,而在c++中,可以不要struct,由于可以利用typedef ...

  10. 玩Vim

    1)我一个脚本中粘贴的都是当年在vim下粘的东西,都是带行号的,我现在想把所有的行号都换成回车键,要怎么办呢? %s/[0-9]/^M/g 注:其中回车在vim的输入方法是ctrl+V,会得到^,此时 ...