一:前言

今天我自己第二次写游标,我擦,觉得自己在数据库方面需要很大的提高啊。今天遇到三个问题,第一个是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. SpringCloud项目,接口调用返回http 500 - Internal Server Error的错误

    今天上班的时候,自己正在参与的Spring Cloud项目出现了问题,原本上周五还正常的项目突然所有接口调用都是返回http 500的错误. 项目的状态是在Eureka上可以看到对应微服务是在线状态, ...

  2. SLAM中的常识与经验

    双目矫正 双目通常事先是通过畸变矫正标定的,而RGB-D和单目则并不一定完成了矫正. 因此,对于RGB-D和单目获取的图像,在提取特征点之后,需要矫正,而双目则可以省略这一过程. 词袋模型反向索引 D ...

  3. express与ejs,ejs在Linux上面的路径问题

    1.学习使用ejs模板(这个是ejs.js) var express = require('express'); var app = express(); app.set("view eng ...

  4. 【多线程】 Task ,async ,await

    [多线程]Task ,async ,await 一. WinForm 里经常会用到多线程, 多线程的好出就不多说了,来说说多线程比较麻烦的地方 1. UI 线程与其他线程的同步,主要是 Form 和 ...

  5. Qt Qwdget 汽车仪表知识点拆解3 进度条编写

    先贴上效果图,注意,没有写逻辑,都是乱动的 这篇我来说说左侧的这个进度条的实现原理,其实更简单,哈哈哈 有一个大的widget,根据素材,我放了10个label 剩下的就是写一个函数,根据数据的不同, ...

  6. web入门脑图

  7. NO8——排序

    //sort #include<algorithm> bool cmp(const int a,const int b) { return a>b;//降序排列 } //qsort ...

  8. python基础之删除文件及删除目录的方法

    下面来看一下python里面是如何删除一个文件及文件夹的~~ 1 2 3 4 5 6 7 8 #首先引入OS模块 import os #删除文件:  os.remove() #删除空目录:  os.r ...

  9. mysql原理以及相关优化

    说起MySQL的查询优化,相信大家积累一堆技巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在 ...

  10. lintcode-133-最长单词

    133-最长单词 给一个词典,找出其中所有最长的单词. 样例 在词典 { "dog", "google", "facebook", &quo ...