oracle有關遊標的知識

來源:互聯網
上載者:User

標籤:android   style   blog   http   color   os   io   資料   

一:前言

      今天我自己第二次寫遊標,我擦,覺得自己在資料庫方面需要很大的提高啊。今天遇到三個問題,第一個是oracle資料庫中的資料拆分的問題,這個我用regexp_substr來進行解決,第二個問題就是regexp_substr裡面的參數,我沒有成功的用select語句進行代替(我現在還不知道)。第三個是我寫完遊標竟然不知道怎麼講擷取的值返回。蒼天啊,大地啊。

下面進行詳細說明;

 

二:

     1、regexp_substr函數

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

          第一個參數:是需要進行匹配的字串;

     第二個參數:進行匹配的Regex;

          第三個參數:起始位置,從第幾個字元開始進行Regex的匹配。(預設為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!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.