zoukankan      html  css  js  c++  java
  • oracle有关游标的知识

    一:前言

          今天我自己第二次写游标,我擦,觉得自己在数据库方面需要很大的提高啊。今天遇到三个问题,第一个是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!

  • 相关阅读:
    第二部分 高数_9 优化
    第二部分 高数_8 泰勒公式、麦克劳林公式和线性化
    第二部分 高数_7 二元符合函数的求导法则
    第二部分 高数_6 高阶偏导数
    第二部分 高数_5 多元函数的导数
    第二部分 高数_4 函数的积分
    第二部分 高数_3 函数的微分
    第二部分 高数_2 导数
    第二部分 高数_1 极限
    第一部分 现代_4 特征值和特征向量
  • 原文地址:https://www.cnblogs.com/wuhao1991/p/3895192.html
Copyright © 2011-2022 走看看